diff -Nru minetest-5.2.0/build/android/app/build.gradle minetest-5.3.0/build/android/app/build.gradle --- minetest-5.2.0/build/android/app/build.gradle 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/build.gradle 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,111 @@ +apply plugin: 'com.android.application' +android { + compileSdkVersion 29 + buildToolsVersion '29.0.3' + ndkVersion '21.1.6352462' + defaultConfig { + applicationId 'net.minetest.minetest' + minSdkVersion 16 + targetSdkVersion 29 + versionName "${versionMajor}.${versionMinor}.${versionPatch}" + versionCode project.versionCode + } + + Properties props = new Properties() + props.load(new FileInputStream(file('../local.properties'))) + + if (props.getProperty('keystore') != null) { + signingConfigs { + release { + storeFile file(props['keystore']) + storePassword props['keystore.password'] + keyAlias props['key'] + keyPassword props['key.password'] + } + } + + buildTypes { + release { + minifyEnabled true + signingConfig signingConfigs.release + } + } + } + + // for multiple APKs + splits { + abi { + enable true + reset() + include 'armeabi-v7a', 'arm64-v8a' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +task prepareAssets() { + def assetsFolder = "build/assets" + def projRoot = "../../.." + def gameToCopy = "minetest_game" + + copy { + from "${projRoot}/minetest.conf.example", "${projRoot}/README.md" into assetsFolder + } + copy { + from "${projRoot}/doc/lgpl-2.1.txt" into "${assetsFolder}" + } + copy { + from "${projRoot}/builtin" into "${assetsFolder}/builtin" + } + /*copy { + // ToDo: fix Minetest shaders that currently don't work with OpenGL ES + from "${projRoot}/client/shaders" into "${assetsFolder}/client/shaders" + }*/ + copy { + from "../native/deps/Android/Irrlicht/shaders" into "${assetsFolder}/client/shaders/Irrlicht" + } + copy { + from "${projRoot}/fonts" include "*.ttf" into "${assetsFolder}/fonts" + } + copy { + from "${projRoot}/games/${gameToCopy}" into "${assetsFolder}/games/${gameToCopy}" + } + /*copy { + // ToDo: fix broken locales + from "${projRoot}/po" into "${assetsFolder}/po" + }*/ + copy { + from "${projRoot}/textures" into "${assetsFolder}/textures" + } + + file("${assetsFolder}/.nomedia").text = ""; + + task zipAssets(type: Zip) { + archiveName "Minetest.zip" + from "${assetsFolder}" + destinationDir file("src/main/assets") + } +} + +preBuild.dependsOn zipAssets + +// 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.1.0' +} diff -Nru minetest-5.2.0/build/android/app/src/main/AndroidManifest.xml minetest-5.3.0/build/android/app/src/main/AndroidManifest.xml --- minetest-5.2.0/build/android/app/src/main/AndroidManifest.xml 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/src/main/AndroidManifest.xml 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru minetest-5.2.0/build/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java minetest-5.3.0/build/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java --- minetest-5.2.0/build/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,82 @@ +/* +Minetest +Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik +Copyright (C) 2014-2020 ubulem, Bektur Mambetov + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +package net.minetest.minetest; + +import android.content.Intent; +import android.os.AsyncTask; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.ref.WeakReference; + +public class CopyZipTask extends AsyncTask { + + private final WeakReference activityRef; + + CopyZipTask(AppCompatActivity activity) { + activityRef = new WeakReference<>(activity); + } + + protected String doInBackground(String... params) { + copyAsset(params[0]); + return params[0]; + } + + @Override + protected void onPostExecute(String result) { + startUnzipService(result); + } + + private void copyAsset(String zipName) { + String filename = zipName.substring(zipName.lastIndexOf("/") + 1); + try (InputStream in = activityRef.get().getAssets().open(filename); + OutputStream out = new FileOutputStream(zipName)) { + copyFile(in, out); + } catch (IOException e) { + AppCompatActivity activity = activityRef.get(); + if (activity != null) { + activity.runOnUiThread(() -> Toast.makeText(activityRef.get(), e.getLocalizedMessage(), Toast.LENGTH_LONG).show()); + } + cancel(true); + } + } + + private void copyFile(InputStream in, OutputStream out) throws IOException { + byte[] buffer = new byte[1024]; + int read; + while ((read = in.read(buffer)) != -1) + out.write(buffer, 0, read); + } + + private void startUnzipService(String file) { + Intent intent = new Intent(activityRef.get(), UnzipService.class); + intent.putExtra(UnzipService.EXTRA_KEY_IN_FILE, file); + AppCompatActivity activity = activityRef.get(); + if (activity != null) { + activity.startService(intent); + } + } +} diff -Nru minetest-5.2.0/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java minetest-5.3.0/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java --- minetest-5.2.0/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,126 @@ +/* +Minetest +Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik +Copyright (C) 2014-2020 ubulem, Bektur Mambetov + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +package net.minetest.minetest; + +import android.app.NativeActivity; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.view.View; +import android.view.WindowManager; + +public class GameActivity extends NativeActivity { + static { + System.loadLibrary("c++_shared"); + System.loadLibrary("Minetest"); + } + + private int messageReturnCode; + private String messageReturnValue; + + public static native void putMessageBoxResult(String text); + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + messageReturnCode = -1; + messageReturnValue = ""; + } + + private void makeFullScreen() { + if (Build.VERSION.SDK_INT >= 19) + this.getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | + View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus) + makeFullScreen(); + } + + @Override + protected void onResume() { + super.onResume(); + makeFullScreen(); + } + + @Override + public void onBackPressed() { + // Ignore the back press so Minetest can handle it + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == 101) { + if (resultCode == RESULT_OK) { + String text = data.getStringExtra("text"); + messageReturnCode = 0; + messageReturnValue = text; + } else + messageReturnCode = 1; + } + } + + public void showDialog(String acceptButton, String hint, String current, int editType) { + Intent intent = new Intent(this, InputDialogActivity.class); + Bundle params = new Bundle(); + params.putString("acceptButton", acceptButton); + params.putString("hint", hint); + params.putString("current", current); + params.putInt("editType", editType); + intent.putExtras(params); + startActivityForResult(intent, 101); + messageReturnValue = ""; + messageReturnCode = -1; + } + + public int getDialogState() { + return messageReturnCode; + } + + public String getDialogValue() { + messageReturnCode = -1; + return messageReturnValue; + } + + public float getDensity() { + return getResources().getDisplayMetrics().density; + } + + public int getDisplayHeight() { + return getResources().getDisplayMetrics().heightPixels; + } + + public int getDisplayWidth() { + return getResources().getDisplayMetrics().widthPixels; + } + + public void openURL(String url) { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + startActivity(browserIntent); + } +} diff -Nru minetest-5.2.0/build/android/app/src/main/java/net/minetest/minetest/InputDialogActivity.java minetest-5.3.0/build/android/app/src/main/java/net/minetest/minetest/InputDialogActivity.java --- minetest-5.2.0/build/android/app/src/main/java/net/minetest/minetest/InputDialogActivity.java 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/src/main/java/net/minetest/minetest/InputDialogActivity.java 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,98 @@ +/* +Minetest +Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik +Copyright (C) 2014-2020 ubulem, Bektur Mambetov + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +package net.minetest.minetest; + +import android.app.Activity; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.text.InputType; +import android.view.KeyEvent; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; + +import java.util.Objects; + +public class InputDialogActivity extends AppCompatActivity { + private AlertDialog alertDialog; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle b = getIntent().getExtras(); + int editType = Objects.requireNonNull(b).getInt("editType"); + String hint = b.getString("hint"); + String current = b.getString("current"); + final AlertDialog.Builder builder = new AlertDialog.Builder(this); + EditText editText = new EditText(this); + builder.setView(editText); + editText.requestFocus(); + editText.setHint(hint); + editText.setText(current); + final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); + Objects.requireNonNull(imm).toggleSoftInput(InputMethodManager.SHOW_FORCED, + InputMethodManager.HIDE_IMPLICIT_ONLY); + if (editType == 3) + editText.setInputType(InputType.TYPE_CLASS_TEXT | + InputType.TYPE_TEXT_VARIATION_PASSWORD); + else + editText.setInputType(InputType.TYPE_CLASS_TEXT); + editText.setOnKeyListener((view, KeyCode, event) -> { + if (KeyCode == KeyEvent.KEYCODE_ENTER) { + imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); + pushResult(editText.getText().toString()); + return true; + } + return false; + }); + alertDialog = builder.create(); + if (!this.isFinishing()) + alertDialog.show(); + alertDialog.setOnCancelListener(dialog -> { + pushResult(editText.getText().toString()); + setResult(Activity.RESULT_CANCELED); + alertDialog.dismiss(); + makeFullScreen(); + finish(); + }); + } + + private void pushResult(String text) { + Intent resultData = new Intent(); + resultData.putExtra("text", text); + setResult(AppCompatActivity.RESULT_OK, resultData); + alertDialog.dismiss(); + makeFullScreen(); + finish(); + } + + private void makeFullScreen() { + if (Build.VERSION.SDK_INT >= 19) + this.getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | + View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); + } +} diff -Nru minetest-5.2.0/build/android/app/src/main/java/net/minetest/minetest/MainActivity.java minetest-5.3.0/build/android/app/src/main/java/net/minetest/minetest/MainActivity.java --- minetest-5.2.0/build/android/app/src/main/java/net/minetest/minetest/MainActivity.java 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/src/main/java/net/minetest/minetest/MainActivity.java 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,153 @@ +/* +Minetest +Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik +Copyright (C) 2014-2020 ubulem, Bektur Mambetov + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +package net.minetest.minetest; + +import android.Manifest; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.os.Build; +import android.os.Bundle; +import android.view.View; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static net.minetest.minetest.UnzipService.ACTION_FAILURE; +import static net.minetest.minetest.UnzipService.ACTION_PROGRESS; +import static net.minetest.minetest.UnzipService.ACTION_UPDATE; +import static net.minetest.minetest.UnzipService.FAILURE; +import static net.minetest.minetest.UnzipService.SUCCESS; + +public class MainActivity extends AppCompatActivity { + private final static int versionCode = BuildConfig.VERSION_CODE; + private final static int PERMISSIONS = 1; + private static final String[] REQUIRED_SDK_PERMISSIONS = + new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}; + private static final String SETTINGS = "MinetestSettings"; + private static final String TAG_VERSION_CODE = "versionCode"; + private ProgressBar mProgressBar; + private TextView mTextView; + private SharedPreferences sharedPreferences; + private final BroadcastReceiver myReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + int progress = 0; + if (intent != null) + progress = intent.getIntExtra(ACTION_PROGRESS, 0); + if (progress >= 0) { + if (mProgressBar != null) { + mProgressBar.setVisibility(View.VISIBLE); + mProgressBar.setProgress(progress); + } + mTextView.setVisibility(View.VISIBLE); + } else if (progress == FAILURE) { + Toast.makeText(MainActivity.this, intent.getStringExtra(ACTION_FAILURE), Toast.LENGTH_LONG).show(); + finish(); + } else if (progress == SUCCESS) + startNative(); + } + }; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + IntentFilter filter = new IntentFilter(ACTION_UPDATE); + registerReceiver(myReceiver, filter); + mProgressBar = findViewById(R.id.progressBar); + mTextView = findViewById(R.id.textView); + sharedPreferences = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + checkPermission(); + else + checkAppVersion(); + } + + private void checkPermission() { + final List missingPermissions = new ArrayList<>(); + for (final String permission : REQUIRED_SDK_PERMISSIONS) { + final int result = ContextCompat.checkSelfPermission(this, permission); + if (result != PackageManager.PERMISSION_GRANTED) + missingPermissions.add(permission); + } + if (!missingPermissions.isEmpty()) { + final String[] permissions = missingPermissions + .toArray(new String[0]); + ActivityCompat.requestPermissions(this, permissions, PERMISSIONS); + } else { + final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length]; + Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED); + onRequestPermissionsResult(PERMISSIONS, REQUIRED_SDK_PERMISSIONS, grantResults); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, + @NonNull String[] permissions, @NonNull int[] grantResults) { + if (requestCode == PERMISSIONS) { + for (int grantResult : grantResults) { + if (grantResult != PackageManager.PERMISSION_GRANTED) { + Toast.makeText(this, R.string.not_granted, Toast.LENGTH_LONG).show(); + finish(); + } + } + checkAppVersion(); + } + } + + private void checkAppVersion() { + if (sharedPreferences.getInt(TAG_VERSION_CODE, 0) == versionCode) + startNative(); + else + new CopyZipTask(this).execute(getCacheDir() + "/Minetest.zip"); + } + + private void startNative() { + sharedPreferences.edit().putInt(TAG_VERSION_CODE, versionCode).apply(); + Intent intent = new Intent(this, GameActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); + } + + @Override + public void onBackPressed() { + // Prevent abrupt interruption when copy game files from assets + } + + @Override + protected void onDestroy() { + super.onDestroy(); + unregisterReceiver(myReceiver); + } +} diff -Nru minetest-5.2.0/build/android/app/src/main/java/net/minetest/minetest/UnzipService.java minetest-5.3.0/build/android/app/src/main/java/net/minetest/minetest/UnzipService.java --- minetest-5.2.0/build/android/app/src/main/java/net/minetest/minetest/UnzipService.java 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/src/main/java/net/minetest/minetest/UnzipService.java 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,157 @@ +/* +Minetest +Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik +Copyright (C) 2014-2020 ubulem, Bektur Mambetov + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +package net.minetest.minetest; + +import android.app.IntentService; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.Environment; +import android.widget.Toast; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +public class UnzipService extends IntentService { + public static final String ACTION_UPDATE = "net.minetest.minetest.UPDATE"; + public static final String ACTION_PROGRESS = "net.minetest.minetest.PROGRESS"; + public static final String ACTION_FAILURE = "net.minetest.minetest.FAILURE"; + public static final String EXTRA_KEY_IN_FILE = "file"; + public static final int SUCCESS = -1; + public static final int FAILURE = -2; + private final int id = 1; + private NotificationManager mNotifyManager; + private boolean isSuccess = true; + private String failureMessage; + + public UnzipService() { + super("net.minetest.minetest.UnzipService"); + } + + private void isDir(String dir, String location) { + File f = new File(location, dir); + if (!f.isDirectory()) + f.mkdirs(); + } + + @Override + protected void onHandleIntent(Intent intent) { + createNotification(); + unzip(intent); + } + + private void createNotification() { + String name = "net.minetest.minetest"; + String channelId = "Minetest channel"; + String description = "notifications from Minetest"; + Notification.Builder builder; + if (mNotifyManager == null) + mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + int importance = NotificationManager.IMPORTANCE_LOW; + NotificationChannel mChannel = null; + if (mNotifyManager != null) + mChannel = mNotifyManager.getNotificationChannel(channelId); + if (mChannel == null) { + mChannel = new NotificationChannel(channelId, name, importance); + mChannel.setDescription(description); + // Configure the notification channel, NO SOUND + mChannel.setSound(null, null); + mChannel.enableLights(false); + mChannel.enableVibration(false); + mNotifyManager.createNotificationChannel(mChannel); + } + builder = new Notification.Builder(this, channelId); + } else { + builder = new Notification.Builder(this); + } + builder.setContentTitle(getString(R.string.notification_title)) + .setSmallIcon(R.mipmap.ic_launcher) + .setContentText(getString(R.string.notification_description)); + mNotifyManager.notify(id, builder.build()); + } + + private void unzip(Intent intent) { + String zip = intent.getStringExtra(EXTRA_KEY_IN_FILE); + isDir("Minetest", Environment.getExternalStorageDirectory().toString()); + String location = Environment.getExternalStorageDirectory() + File.separator + "Minetest" + File.separator; + int per = 0; + int size = getSummarySize(zip); + File zipFile = new File(zip); + int readLen; + byte[] readBuffer = new byte[8192]; + try (FileInputStream fileInputStream = new FileInputStream(zipFile); + ZipInputStream zipInputStream = new ZipInputStream(fileInputStream)) { + ZipEntry ze; + while ((ze = zipInputStream.getNextEntry()) != null) { + if (ze.isDirectory()) { + ++per; + isDir(ze.getName(), location); + } else { + publishProgress(100 * ++per / size); + try (OutputStream outputStream = new FileOutputStream(location + ze.getName())) { + while ((readLen = zipInputStream.read(readBuffer)) != -1) { + outputStream.write(readBuffer, 0, readLen); + } + } + } + zipFile.delete(); + } + } catch (IOException e) { + isSuccess = false; + failureMessage = e.getLocalizedMessage(); + } + } + + private void publishProgress(int progress) { + Intent intentUpdate = new Intent(ACTION_UPDATE); + intentUpdate.putExtra(ACTION_PROGRESS, progress); + if (!isSuccess) intentUpdate.putExtra(ACTION_FAILURE, failureMessage); + sendBroadcast(intentUpdate); + } + + private int getSummarySize(String zip) { + int size = 0; + try { + ZipFile zipSize = new ZipFile(zip); + size += zipSize.size(); + } catch (IOException e) { + Toast.makeText(this, e.getLocalizedMessage(), Toast.LENGTH_LONG).show(); + } + return size; + } + + @Override + public void onDestroy() { + super.onDestroy(); + mNotifyManager.cancel(id); + publishProgress(isSuccess ? SUCCESS : FAILURE); + } +} Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/build/android/app/src/main/res/drawable/background.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/build/android/app/src/main/res/drawable/background.png differ diff -Nru minetest-5.2.0/build/android/app/src/main/res/drawable/bg.xml minetest-5.3.0/build/android/app/src/main/res/drawable/bg.xml --- minetest-5.2.0/build/android/app/src/main/res/drawable/bg.xml 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/src/main/res/drawable/bg.xml 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,4 @@ + + diff -Nru minetest-5.2.0/build/android/app/src/main/res/layout/activity_main.xml minetest-5.3.0/build/android/app/src/main/res/layout/activity_main.xml --- minetest-5.2.0/build/android/app/src/main/res/layout/activity_main.xml 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/src/main/res/layout/activity_main.xml 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,30 @@ + + + + + + + Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/build/android/app/src/main/res/mipmap/ic_launcher.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/build/android/app/src/main/res/mipmap/ic_launcher.png differ diff -Nru minetest-5.2.0/build/android/app/src/main/res/values/strings.xml minetest-5.3.0/build/android/app/src/main/res/values/strings.xml --- minetest-5.2.0/build/android/app/src/main/res/values/strings.xml 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/src/main/res/values/strings.xml 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,10 @@ + + + + Minetest + Loading… + Required permission wasn\'t granted, Minetest can\'t run without it + Loading Minetest + Less than 1 minute… + + diff -Nru minetest-5.2.0/build/android/app/src/main/res/values/styles.xml minetest-5.3.0/build/android/app/src/main/res/values/styles.xml --- minetest-5.2.0/build/android/app/src/main/res/values/styles.xml 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/app/src/main/res/values/styles.xml 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,22 @@ + + + + + + + + + + diff -Nru minetest-5.2.0/build/android/build.gradle minetest-5.3.0/build/android/build.gradle --- minetest-5.2.0/build/android/build.gradle 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/build.gradle 2020-07-09 21:13:20.000000000 +0000 @@ -1,10 +1,24 @@ +// 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", 3) // Version Minor +project.ext.set("versionPatch", 0) // Version Patch +project.ext.set("versionExtra", "-dev") // Version Extra +project.ext.set("versionCode", 30) // 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 + buildscript { repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.1' + classpath 'com.android.tools.build:gradle:3.6.3' + classpath 'org.ajoberstar.grgit:grgit-gradle:4.0.2' + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files } } @@ -15,161 +29,6 @@ } } -def curl_version = "7.60.0" -def irrlicht_revision = "5150" -def openal_version = "1.18.2" -def openssl_version = "1.0.2n" -def sqlite3_version = "3240000" - -apply plugin: "com.android.application" - -android { - compileSdkVersion 29 - buildToolsVersion '29.0.2' - - defaultConfig { - versionCode 26 - versionName "${System.env.VERSION_STR}.${versionCode}" - minSdkVersion 14 - targetSdkVersion 29 - applicationId "net.minetest.minetest" - manifestPlaceholders = [package: "net.minetest.minetest", project: project.name] - ndk { - // Specifies the ABI configurations of your native - // libraries Gradle should build and package with your APK. - // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' - abiFilters 'armeabi-v7a', 'x86', 'arm64-v8a' - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - lintOptions { - disable "OldTargetApi", "GoogleAppIndexingWarning" - } - - Properties props = new Properties() - props.load(new FileInputStream(file("local.properties"))) - - if (props.getProperty("keystore") != null) { - signingConfigs { - release { - storeFile file(props["keystore"]) - storePassword props["keystore.password"] - keyAlias props["key"] - keyPassword props["key.password"] - } - } - - buildTypes { - release { - signingConfig signingConfigs.release - } - } - } -} - -task cleanAssets(type: Delete) { - delete 'src/main/assets' -} - -task copyAssets { - dependsOn 'cleanAssets' - mkdir "src/main/assets" - - def mtAssetsFolder = "src/main/assets/Minetest" - def projRoot = "../.." - def gameToCopy = "minetest_game" - - doLast { - mkdir "${mtAssetsFolder}" - mkdir "${mtAssetsFolder}/client" - mkdir "${mtAssetsFolder}/fonts" - mkdir "${mtAssetsFolder}/games" - mkdir "${mtAssetsFolder}/media" - - copy { - from "${projRoot}/minetest.conf.example", "${projRoot}/README.md" into mtAssetsFolder - } - copy { - from "${projRoot}/doc/lgpl-2.1.txt" into "${mtAssetsFolder}/LICENSE.txt" - } - copy { - from "${projRoot}/builtin" into "${mtAssetsFolder}/builtin" - } - copy { - from "${projRoot}/client/shaders" into "${mtAssetsFolder}/client/shaders" - } - copy { - from "${projRoot}/fonts" include "*.ttf" into "${mtAssetsFolder}/fonts" - } - copy { - from "${projRoot}/games/${gameToCopy}" into "${mtAssetsFolder}/games/${gameToCopy}" - } - copy { - from "${projRoot}/po" into "${mtAssetsFolder}/po" - } - copy { - from "${projRoot}/textures" into "${mtAssetsFolder}/textures" - } - } -} - -task cleanIconv(type: Delete) { - delete 'deps/libiconv' -} - -task cleanIrrlicht(type: Delete) { - delete 'deps/irrlicht' -} - -task cleanLevelDB(type: Delete) { - delete 'deps/leveldb' -} - -task cleanCURL(type: Delete) { - delete 'deps/curl' - delete 'deps/curl-' + curl_version -} - -task cleanOpenSSL(type: Delete) { - delete 'deps/openssl' - delete 'deps/openssl-' + openssl_version - delete 'deps/openssl-' + openssl_version + '.tar.gz' -} - -task cleanOpenAL(type: Delete) { - delete 'deps/openal-soft' -} - -task cleanFreetype(type: Delete) { - delete 'deps/freetype2-android' -} - -task cleanOgg(type: Delete) { - delete 'deps/libvorbis-libogg-android' -} - -task cleanSQLite3(type: Delete) { - delete 'deps/sqlite-amalgamation-' + sqlite3_version - delete 'deps/sqlite-amalgamation-' + sqlite3_version + '.zip' -} - -task cleanAll(type: Delete, dependsOn: [clean, cleanAssets, cleanIconv, - cleanFreetype, cleanIrrlicht, cleanLevelDB, cleanSQLite3, cleanCURL, - cleanOpenSSL, cleanOpenAL, cleanOgg]) { - delete 'deps' - delete 'gen' - delete 'libs' - delete 'obj' - delete 'bin' - delete 'Debug' - delete 'and_env' -} - -dependencies { - implementation 'androidx.core:core:1.1.0' +task clean(type: Delete) { + delete rootProject.buildDir } Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/build/android/gradle/wrapper/gradle-wrapper.jar and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/build/android/gradle/wrapper/gradle-wrapper.jar differ diff -Nru minetest-5.2.0/build/android/gradle/wrapper/gradle-wrapper.properties minetest-5.3.0/build/android/gradle/wrapper/gradle-wrapper.properties --- minetest-5.2.0/build/android/gradle/wrapper/gradle-wrapper.properties 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/gradle/wrapper/gradle-wrapper.properties 2020-07-09 21:13:20.000000000 +0000 @@ -1 +1,2 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +#Mon Apr 06 00:06:16 CEST 2020 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip diff -Nru minetest-5.2.0/build/android/gradle.properties minetest-5.3.0/build/android/gradle.properties --- minetest-5.2.0/build/android/gradle.properties 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/gradle.properties 2020-07-09 21:13:20.000000000 +0000 @@ -1,2 +1,11 @@ +<#if isLowMemory> +org.gradle.jvmargs=-Xmx4G -XX:MaxPermSize=2G -XX:+HeapDumpOnOutOfMemoryError +<#else> +org.gradle.jvmargs=-Xmx16G -XX:MaxPermSize=8G -XX:+HeapDumpOnOutOfMemoryError + +org.gradle.daemon=true +org.gradle.parallel=true +org.gradle.parallel.threads=8 +org.gradle.configureondemand=true android.enableJetifier=true -android.useAndroidX=true \ No newline at end of file +android.useAndroidX=true diff -Nru minetest-5.2.0/build/android/gradlew minetest-5.3.0/build/android/gradlew --- minetest-5.2.0/build/android/gradlew 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/gradlew 2020-07-09 21:13:20.000000000 +0000 @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -109,8 +125,8 @@ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` diff -Nru minetest-5.2.0/build/android/gradlew.bat minetest-5.3.0/build/android/gradlew.bat --- minetest-5.2.0/build/android/gradlew.bat 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/gradlew.bat 2020-07-09 21:13:20.000000000 +0000 @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -14,7 +30,7 @@ set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome diff -Nru minetest-5.2.0/build/android/jni/Android.mk minetest-5.3.0/build/android/jni/Android.mk --- minetest-5.2.0/build/android/jni/Android.mk 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/jni/Android.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,446 +0,0 @@ -LOCAL_PATH := $(call my-dir)/.. - -#LOCAL_ADDRESS_SANITIZER:=true - -include $(CLEAR_VARS) -LOCAL_MODULE := Irrlicht -LOCAL_SRC_FILES := deps/irrlicht/lib/Android/libIrrlicht.a -include $(PREBUILT_STATIC_LIBRARY) - -ifeq ($(HAVE_LEVELDB), 1) - include $(CLEAR_VARS) - LOCAL_MODULE := LevelDB - LOCAL_SRC_FILES := deps/leveldb/libleveldb.a - include $(PREBUILT_STATIC_LIBRARY) -endif - -include $(CLEAR_VARS) -LOCAL_MODULE := curl -LOCAL_SRC_FILES := deps/curl/lib/.libs/libcurl.a -include $(PREBUILT_STATIC_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := freetype -LOCAL_SRC_FILES := deps/freetype2-android/Android/obj/local/$(TARGET_ARCH_ABI)/libfreetype2-static.a -include $(PREBUILT_STATIC_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := iconv -LOCAL_SRC_FILES := deps/libiconv/lib/.libs/libiconv.so -include $(PREBUILT_SHARED_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := openal -LOCAL_SRC_FILES := deps/openal-soft/libs/$(TARGET_LIBDIR)/libopenal.so -include $(PREBUILT_SHARED_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := ogg -LOCAL_SRC_FILES := deps/libvorbis-libogg-android/libs/$(TARGET_LIBDIR)/libogg.so -include $(PREBUILT_SHARED_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := vorbis -LOCAL_SRC_FILES := deps/libvorbis-libogg-android/libs/$(TARGET_LIBDIR)/libvorbis.so -include $(PREBUILT_SHARED_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := ssl -LOCAL_SRC_FILES := deps/openssl/libssl.a -include $(PREBUILT_STATIC_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := crypto -LOCAL_SRC_FILES := deps/openssl/libcrypto.a -include $(PREBUILT_STATIC_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := minetest - -LOCAL_CPP_FEATURES += exceptions - -ifdef GPROF -GPROF_DEF=-DGPROF -endif - -LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ \ - -DHAVE_TOUCHSCREENGUI \ - -DENABLE_GLES=1 \ - -DUSE_CURL=1 \ - -DUSE_SOUND=1 \ - -DUSE_FREETYPE=1 \ - -DUSE_LEVELDB=$(HAVE_LEVELDB) \ - $(GPROF_DEF) \ - -pipe -fstrict-aliasing - -ifndef NDEBUG -LOCAL_CFLAGS += -g -D_DEBUG -O0 -fno-omit-frame-pointer -else -LOCAL_CFLAGS += $(TARGET_CFLAGS_ADDON) -endif - -ifdef GPROF -PROFILER_LIBS := android-ndk-profiler -LOCAL_CFLAGS += -pg -endif - -# LOCAL_CFLAGS += -fsanitize=address -# LOCAL_LDFLAGS += -fsanitize=address - -ifeq ($(TARGET_ABI),x86) -LOCAL_CFLAGS += -fno-stack-protector -endif - -LOCAL_C_INCLUDES := \ - jni/src \ - jni/src/script \ - jni/lib/gmp \ - jni/lib/lua/src \ - jni/lib/jsoncpp \ - jni/src/cguittfont \ - deps/irrlicht/include \ - deps/libiconv/include \ - deps/freetype2-android/include \ - deps/curl/include \ - deps/openal-soft/jni/OpenAL/include \ - deps/libvorbis-libogg-android/jni/include \ - deps/leveldb/include \ - deps/sqlite/ - -LOCAL_SRC_FILES := \ - jni/src/ban.cpp \ - jni/src/chat.cpp \ - jni/src/client/activeobjectmgr.cpp \ - jni/src/client/camera.cpp \ - jni/src/client/client.cpp \ - jni/src/client/clientenvironment.cpp \ - jni/src/client/clientlauncher.cpp \ - jni/src/client/clientmap.cpp \ - jni/src/client/clientmedia.cpp \ - jni/src/client/clientobject.cpp \ - jni/src/client/clouds.cpp \ - jni/src/client/content_cao.cpp \ - jni/src/client/content_cso.cpp \ - jni/src/client/content_mapblock.cpp \ - jni/src/client/filecache.cpp \ - jni/src/client/fontengine.cpp \ - jni/src/client/game.cpp \ - jni/src/client/gameui.cpp \ - jni/src/client/guiscalingfilter.cpp \ - jni/src/client/hud.cpp \ - jni/src/clientiface.cpp \ - jni/src/client/imagefilters.cpp \ - jni/src/client/inputhandler.cpp \ - jni/src/client/joystick_controller.cpp \ - jni/src/client/keycode.cpp \ - jni/src/client/localplayer.cpp \ - jni/src/client/mapblock_mesh.cpp \ - jni/src/client/mesh.cpp \ - jni/src/client/meshgen/collector.cpp \ - jni/src/client/mesh_generator_thread.cpp \ - jni/src/client/minimap.cpp \ - jni/src/client/particles.cpp \ - jni/src/client/render/anaglyph.cpp \ - jni/src/client/render/core.cpp \ - jni/src/client/render/factory.cpp \ - jni/src/client/renderingengine.cpp \ - jni/src/client/render/interlaced.cpp \ - jni/src/client/render/pageflip.cpp \ - jni/src/client/render/plain.cpp \ - jni/src/client/render/sidebyside.cpp \ - jni/src/client/render/stereo.cpp \ - jni/src/client/shader.cpp \ - jni/src/client/sky.cpp \ - jni/src/client/sound.cpp \ - jni/src/client/sound_openal.cpp \ - jni/src/client/tile.cpp \ - jni/src/client/wieldmesh.cpp \ - jni/src/collision.cpp \ - jni/src/content/content.cpp \ - jni/src/content_mapnode.cpp \ - jni/src/content/mods.cpp \ - jni/src/content_nodemeta.cpp \ - jni/src/content/packages.cpp \ - jni/src/content_sao.cpp \ - jni/src/content/subgames.cpp \ - jni/src/convert_json.cpp \ - jni/src/craftdef.cpp \ - jni/src/database/database.cpp \ - jni/src/database/database-dummy.cpp \ - jni/src/database/database-files.cpp \ - jni/src/database/database-leveldb.cpp \ - jni/src/database/database-sqlite3.cpp \ - jni/src/debug.cpp \ - jni/src/defaultsettings.cpp \ - jni/src/emerge.cpp \ - jni/src/environment.cpp \ - jni/src/face_position_cache.cpp \ - jni/src/filesys.cpp \ - jni/src/genericobject.cpp \ - jni/src/gettext.cpp \ - jni/src/gui/guiAnimatedImage.cpp \ - jni/src/gui/guiBackgroundImage.cpp \ - jni/src/gui/guiBox.cpp \ - jni/src/gui/guiButton.cpp \ - jni/src/gui/guiButtonImage.cpp \ - jni/src/gui/guiButtonItemImage.cpp \ - jni/src/gui/guiChatConsole.cpp \ - jni/src/gui/guiConfirmRegistration.cpp \ - jni/src/gui/guiEditBoxWithScrollbar.cpp \ - jni/src/gui/guiEngine.cpp \ - jni/src/gui/guiFormSpecMenu.cpp \ - jni/src/gui/guiHyperText.cpp \ - jni/src/gui/guiInventoryList.cpp \ - jni/src/gui/guiItemImage.cpp \ - jni/src/gui/guiKeyChangeMenu.cpp \ - jni/src/gui/guiPasswordChange.cpp \ - jni/src/gui/guiPathSelectMenu.cpp \ - jni/src/gui/guiScrollBar.cpp \ - jni/src/gui/guiSkin.cpp \ - jni/src/gui/guiTable.cpp \ - jni/src/gui/guiVolumeChange.cpp \ - jni/src/gui/intlGUIEditBox.cpp \ - jni/src/gui/modalMenu.cpp \ - jni/src/gui/profilergraph.cpp \ - jni/src/gui/touchscreengui.cpp \ - jni/src/httpfetch.cpp \ - jni/src/hud.cpp \ - jni/src/inventory.cpp \ - jni/src/inventorymanager.cpp \ - jni/src/irrlicht_changes/CGUITTFont.cpp \ - jni/src/irrlicht_changes/static_text.cpp \ - jni/src/itemdef.cpp \ - jni/src/itemstackmetadata.cpp \ - jni/src/light.cpp \ - jni/src/log.cpp \ - jni/src/main.cpp \ - jni/src/mapblock.cpp \ - jni/src/map.cpp \ - jni/src/mapgen/cavegen.cpp \ - jni/src/mapgen/dungeongen.cpp \ - jni/src/mapgen/mapgen_carpathian.cpp \ - jni/src/mapgen/mapgen.cpp \ - jni/src/mapgen/mapgen_flat.cpp \ - jni/src/mapgen/mapgen_fractal.cpp \ - jni/src/mapgen/mapgen_singlenode.cpp \ - jni/src/mapgen/mapgen_v5.cpp \ - jni/src/mapgen/mapgen_v6.cpp \ - jni/src/mapgen/mapgen_v7.cpp \ - jni/src/mapgen/mapgen_valleys.cpp \ - jni/src/mapgen/mg_biome.cpp \ - jni/src/mapgen/mg_decoration.cpp \ - jni/src/mapgen/mg_ore.cpp \ - jni/src/mapgen/mg_schematic.cpp \ - jni/src/mapgen/treegen.cpp \ - jni/src/mapnode.cpp \ - jni/src/mapsector.cpp \ - jni/src/map_settings_manager.cpp \ - jni/src/metadata.cpp \ - jni/src/modchannels.cpp \ - jni/src/nameidmapping.cpp \ - jni/src/nodedef.cpp \ - jni/src/nodemetadata.cpp \ - jni/src/nodetimer.cpp \ - jni/src/noise.cpp \ - jni/src/objdef.cpp \ - jni/src/object_properties.cpp \ - jni/src/pathfinder.cpp \ - jni/src/player.cpp \ - jni/src/porting_android.cpp \ - jni/src/porting.cpp \ - jni/src/profiler.cpp \ - jni/src/raycast.cpp \ - jni/src/reflowscan.cpp \ - jni/src/remoteplayer.cpp \ - jni/src/rollback.cpp \ - jni/src/rollback_interface.cpp \ - jni/src/serialization.cpp \ - jni/src/server/activeobjectmgr.cpp \ - jni/src/server.cpp \ - jni/src/serverenvironment.cpp \ - jni/src/serverlist.cpp \ - jni/src/server/mods.cpp \ - jni/src/serverobject.cpp \ - jni/src/settings.cpp \ - jni/src/staticobject.cpp \ - jni/src/tileanimation.cpp \ - jni/src/tool.cpp \ - jni/src/translation.cpp \ - jni/src/unittest/test_authdatabase.cpp \ - jni/src/unittest/test_collision.cpp \ - jni/src/unittest/test_compression.cpp \ - jni/src/unittest/test_connection.cpp \ - jni/src/unittest/test.cpp \ - jni/src/unittest/test_filepath.cpp \ - jni/src/unittest/test_gameui.cpp \ - jni/src/unittest/test_inventory.cpp \ - jni/src/unittest/test_mapnode.cpp \ - jni/src/unittest/test_map_settings_manager.cpp \ - jni/src/unittest/test_nodedef.cpp \ - jni/src/unittest/test_noderesolver.cpp \ - jni/src/unittest/test_noise.cpp \ - jni/src/unittest/test_objdef.cpp \ - jni/src/unittest/test_profiler.cpp \ - jni/src/unittest/test_random.cpp \ - jni/src/unittest/test_schematic.cpp \ - jni/src/unittest/test_serialization.cpp \ - jni/src/unittest/test_settings.cpp \ - jni/src/unittest/test_socket.cpp \ - jni/src/unittest/test_utilities.cpp \ - jni/src/unittest/test_voxelalgorithms.cpp \ - jni/src/unittest/test_voxelmanipulator.cpp \ - jni/src/util/areastore.cpp \ - jni/src/util/auth.cpp \ - jni/src/util/base64.cpp \ - jni/src/util/directiontables.cpp \ - jni/src/util/enriched_string.cpp \ - jni/src/util/ieee_float.cpp \ - jni/src/util/numeric.cpp \ - jni/src/util/pointedthing.cpp \ - jni/src/util/quicktune.cpp \ - jni/src/util/serialize.cpp \ - jni/src/util/sha1.cpp \ - jni/src/util/srp.cpp \ - jni/src/util/string.cpp \ - jni/src/util/timetaker.cpp \ - jni/src/version.cpp \ - jni/src/voxelalgorithms.cpp \ - jni/src/voxel.cpp - - -# intentionally kept out (we already build openssl itself): jni/src/util/sha256.c - -# Network -LOCAL_SRC_FILES += \ - jni/src/network/address.cpp \ - jni/src/network/connection.cpp \ - jni/src/network/networkpacket.cpp \ - jni/src/network/clientopcodes.cpp \ - jni/src/network/clientpackethandler.cpp \ - jni/src/network/connectionthreads.cpp \ - jni/src/network/serveropcodes.cpp \ - jni/src/network/serverpackethandler.cpp \ - jni/src/network/socket.cpp \ - -# lua api -LOCAL_SRC_FILES += \ - jni/src/script/common/c_content.cpp \ - jni/src/script/common/c_converter.cpp \ - jni/src/script/common/c_internal.cpp \ - jni/src/script/common/c_types.cpp \ - jni/src/script/common/helper.cpp \ - jni/src/script/cpp_api/s_async.cpp \ - jni/src/script/cpp_api/s_base.cpp \ - jni/src/script/cpp_api/s_client.cpp \ - jni/src/script/cpp_api/s_entity.cpp \ - jni/src/script/cpp_api/s_env.cpp \ - jni/src/script/cpp_api/s_inventory.cpp \ - jni/src/script/cpp_api/s_item.cpp \ - jni/src/script/cpp_api/s_mainmenu.cpp \ - jni/src/script/cpp_api/s_modchannels.cpp \ - jni/src/script/cpp_api/s_node.cpp \ - jni/src/script/cpp_api/s_nodemeta.cpp \ - jni/src/script/cpp_api/s_player.cpp \ - jni/src/script/cpp_api/s_security.cpp \ - jni/src/script/cpp_api/s_server.cpp \ - jni/src/script/lua_api/l_areastore.cpp \ - jni/src/script/lua_api/l_auth.cpp \ - jni/src/script/lua_api/l_base.cpp \ - jni/src/script/lua_api/l_camera.cpp \ - jni/src/script/lua_api/l_client.cpp \ - jni/src/script/lua_api/l_craft.cpp \ - jni/src/script/lua_api/l_env.cpp \ - jni/src/script/lua_api/l_inventory.cpp \ - jni/src/script/lua_api/l_item.cpp \ - jni/src/script/lua_api/l_itemstackmeta.cpp\ - jni/src/script/lua_api/l_localplayer.cpp \ - jni/src/script/lua_api/l_mainmenu.cpp \ - jni/src/script/lua_api/l_mapgen.cpp \ - jni/src/script/lua_api/l_metadata.cpp \ - jni/src/script/lua_api/l_minimap.cpp \ - jni/src/script/lua_api/l_modchannels.cpp \ - jni/src/script/lua_api/l_nodemeta.cpp \ - jni/src/script/lua_api/l_nodetimer.cpp \ - jni/src/script/lua_api/l_noise.cpp \ - jni/src/script/lua_api/l_object.cpp \ - jni/src/script/lua_api/l_playermeta.cpp \ - jni/src/script/lua_api/l_particles.cpp \ - jni/src/script/lua_api/l_particles_local.cpp\ - jni/src/script/lua_api/l_rollback.cpp \ - jni/src/script/lua_api/l_server.cpp \ - jni/src/script/lua_api/l_settings.cpp \ - jni/src/script/lua_api/l_sound.cpp \ - jni/src/script/lua_api/l_http.cpp \ - jni/src/script/lua_api/l_storage.cpp \ - jni/src/script/lua_api/l_util.cpp \ - jni/src/script/lua_api/l_vmanip.cpp \ - jni/src/script/scripting_client.cpp \ - jni/src/script/scripting_server.cpp \ - jni/src/script/scripting_mainmenu.cpp - -#freetype2 support -#LOCAL_SRC_FILES += jni/src/cguittfont/xCGUITTFont.cpp - -# GMP -LOCAL_SRC_FILES += jni/lib/gmp/mini-gmp.c - -# Lua -LOCAL_SRC_FILES += \ - jni/lib/lua/src/lapi.c \ - jni/lib/lua/src/lauxlib.c \ - jni/lib/lua/src/lbaselib.c \ - jni/lib/lua/src/lcode.c \ - jni/lib/lua/src/ldblib.c \ - jni/lib/lua/src/ldebug.c \ - jni/lib/lua/src/ldo.c \ - jni/lib/lua/src/ldump.c \ - jni/lib/lua/src/lfunc.c \ - jni/lib/lua/src/lgc.c \ - jni/lib/lua/src/linit.c \ - jni/lib/lua/src/liolib.c \ - jni/lib/lua/src/llex.c \ - jni/lib/lua/src/lmathlib.c \ - jni/lib/lua/src/lmem.c \ - jni/lib/lua/src/loadlib.c \ - jni/lib/lua/src/lobject.c \ - jni/lib/lua/src/lopcodes.c \ - jni/lib/lua/src/loslib.c \ - jni/lib/lua/src/lparser.c \ - jni/lib/lua/src/lstate.c \ - jni/lib/lua/src/lstring.c \ - jni/lib/lua/src/lstrlib.c \ - jni/lib/lua/src/ltable.c \ - jni/lib/lua/src/ltablib.c \ - jni/lib/lua/src/ltm.c \ - jni/lib/lua/src/lundump.c \ - jni/lib/lua/src/lvm.c \ - jni/lib/lua/src/lzio.c \ - jni/lib/lua/src/print.c - -# SQLite3 -LOCAL_SRC_FILES += deps/sqlite/sqlite3.c - -# Threading -LOCAL_SRC_FILES += \ - jni/src/threading/event.cpp \ - jni/src/threading/semaphore.cpp \ - jni/src/threading/thread.cpp - -# JSONCPP -LOCAL_SRC_FILES += jni/lib/jsoncpp/jsoncpp.cpp - -LOCAL_SHARED_LIBRARIES := iconv openal ogg vorbis -LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS) - -ifeq ($(HAVE_LEVELDB), 1) - LOCAL_STATIC_LIBRARIES += LevelDB -endif -LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid - -include $(BUILD_SHARED_LIBRARY) - -# at the end of Android.mk -ifdef GPROF -$(call import-module,android-ndk-profiler) -endif -$(call import-module,android/native_app_glue) diff -Nru minetest-5.2.0/build/android/jni/Application.mk minetest-5.3.0/build/android/jni/Application.mk --- minetest-5.2.0/build/android/jni/Application.mk 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/jni/Application.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -APP_PLATFORM := ${APP_PLATFORM} -APP_ABI := ${TARGET_ABI} -APP_STL := c++_shared -APP_MODULES := minetest -ifndef NDEBUG -APP_OPTIM := debug -endif - -APP_CPPFLAGS += -fexceptions -std=c++11 -frtti diff -Nru minetest-5.2.0/build/android/jni/Deps.mk minetest-5.3.0/build/android/jni/Deps.mk --- minetest-5.2.0/build/android/jni/Deps.mk 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/jni/Deps.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -APP_PLATFORM := ${APP_PLATFORM} -APP_ABI := ${TARGET_ABI} -APP_STL := c++_shared -APP_DEPRECATED_HEADERS := true - -APP_CFLAGS += ${TARGET_CFLAGS_ADDON} -APP_CPPFLAGS += ${TARGET_CXXFLAGS_ADDON} -fexceptions -std=c++11 diff -Nru minetest-5.2.0/build/android/jni/Irrlicht.mk minetest-5.3.0/build/android/jni/Irrlicht.mk --- minetest-5.2.0/build/android/jni/Irrlicht.mk 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/jni/Irrlicht.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -APP_PLATFORM := ${APP_PLATFORM} -APP_ABI := ${TARGET_ABI} -APP_STL := c++_shared -APP_DEPRECATED_HEADERS := true -APP_MODULES := Irrlicht - -APP_CLAFGS += ${TARGET_CFLAGS_ADDON} -APP_CPPFLAGS += ${TARGET_CXXFLAGS_ADDON} -fexceptions diff -Nru minetest-5.2.0/build/android/Makefile minetest-5.3.0/build/android/Makefile --- minetest-5.2.0/build/android/Makefile 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/Makefile 1970-01-01 00:00:00.000000000 +0000 @@ -1,763 +0,0 @@ -# build options - -OS := $(shell uname) - -# compile with GPROF -# GPROF = 1 - -# build for build platform -API = 14 -APP_PLATFORM = android-$(API) - -ANDR_ROOT = $(shell pwd) -PROJ_ROOT = $(shell realpath $(ANDR_ROOT)/../..) -APP_ROOT = $(ANDR_ROOT)/src/main - -VERSION_MAJOR := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \ - grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ') -VERSION_MINOR := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \ - grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' ') -VERSION_PATCH := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \ - grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' ') - -################################################################################ -# toolchain config for arm new processors -################################################################################ -TARGET_HOST = arm-linux -TARGET_ABI = armeabi-v7a -TARGET_LIBDIR = armeabi-v7a -TARGET_TOOLCHAIN = arm-linux-androideabi- -TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfpv3 -O3 -TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON) -TARGET_ARCH = armv7 -CROSS_CC = clang -CROSS_CXX = clang++ -COMPILER_VERSION = clang -HAVE_LEVELDB = 0 - -################################################################################ -# toolchain config for little endian mips -################################################################################ -#TARGET_HOST = mipsel-linux -#TARGET_ABI = mips -#TARGET_LIBDIR = mips -#TARGET_TOOLCHAIN = mipsel-linux-android- -#TARGET_ARCH = mips32 -#CROSS_CC = mipsel-linux-android-gcc -#CROSS_CXX = mipsel-linux-android-g++ -#COMPILER_VERSION = 4.9 -#HAVE_LEVELDB = 0 - -################################################################################ -# toolchain config for x86 -################################################################################ -#TARGET_HOST = x86-linux -#TARGET_ABI = x86 -#TARGET_LIBDIR = x86 -#TARGET_TOOLCHAIN = x86- -#TARGET_ARCH = x86 -#CROSS_CC = clang -#CROSS_CXX = clang++ -#COMPILER_VERSION = clang -#HAVE_LEVELDB = 0 - -################################################################################ -ASSETS_TIMESTAMP = deps/assets_timestamp - -LEVELDB_DIR = $(ANDR_ROOT)/deps/leveldb/ -LEVELDB_LIB = $(LEVELDB_DIR)libleveldb.a -LEVELDB_TIMESTAMP = $(LEVELDB_DIR)/timestamp -LEVELDB_TIMESTAMP_INT = $(ANDR_ROOT)/deps/leveldb_timestamp -LEVELDB_URL_GIT = https://github.com/google/leveldb -LEVELDB_COMMIT = 2d0320a458d0e6a20fff46d5f80b18bfdcce7018 - -OPENAL_DIR = $(ANDR_ROOT)/deps/openal-soft/ -OPENAL_LIB = $(OPENAL_DIR)libs/$(TARGET_ABI)/libopenal.so -OPENAL_TIMESTAMP = $(OPENAL_DIR)/timestamp -OPENAL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/openal_timestamp -OPENAL_URL_GIT = https://github.com/apportable/openal-soft - -OGG_DIR = $(ANDR_ROOT)/deps/libvorbis-libogg-android/ -OGG_LIB = $(OGG_DIR)libs/$(TARGET_ABI)/libogg.so -VORBIS_LIB = $(OGG_DIR)libs/$(TARGET_ABI)/libogg.so -OGG_TIMESTAMP = $(OGG_DIR)timestamp -OGG_TIMESTAMP_INT = $(ANDR_ROOT)/deps/ogg_timestamp -OGG_URL_GIT = https://gitlab.com/minetest/libvorbis-libogg-android - -IRRLICHT_REVISION = 5150 -IRRLICHT_DIR = $(ANDR_ROOT)/deps/irrlicht/ -IRRLICHT_LIB = $(IRRLICHT_DIR)lib/Android/libIrrlicht.a -IRRLICHT_TIMESTAMP = $(IRRLICHT_DIR)timestamp -IRRLICHT_TIMESTAMP_INT = $(ANDR_ROOT)/deps/irrlicht_timestamp -IRRLICHT_URL_SVN = https://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@$(IRRLICHT_REVISION) - -OPENSSL_VERSION = 1.0.2n -OPENSSL_BASEDIR = openssl-$(OPENSSL_VERSION) -OPENSSL_DIR = $(ANDR_ROOT)/deps/$(OPENSSL_BASEDIR)/ -OPENSSL_LIB = $(OPENSSL_DIR)/libssl.a -OPENSSL_TIMESTAMP = $(OPENSSL_DIR)timestamp -OPENSSL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/openssl_timestamp -OPENSSL_URL = https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz - -CURL_VERSION = 7.60.0 -CURL_DIR = $(ANDR_ROOT)/deps/curl-$(CURL_VERSION) -CURL_LIB = $(CURL_DIR)/lib/.libs/libcurl.a -CURL_TIMESTAMP = $(CURL_DIR)/timestamp -CURL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/curl_timestamp -CURL_URL_HTTP = https://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2 - -FREETYPE_DIR = $(ANDR_ROOT)/deps/freetype2-android/ -FREETYPE_LIB = $(FREETYPE_DIR)/Android/obj/local/$(TARGET_ABI)/libfreetype2-static.a -FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp -FREETYPE_TIMESTAMP_INT = $(ANDR_ROOT)/deps/freetype_timestamp -FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android - -ICONV_VERSION = 1.16 -ICONV_DIR = $(ANDR_ROOT)/deps/libiconv/ -ICONV_LIB = $(ICONV_DIR)/lib/.libs/libiconv.so -ICONV_TIMESTAMP = $(ICONV_DIR)timestamp -ICONV_TIMESTAMP_INT = $(ANDR_ROOT)/deps/iconv_timestamp -ICONV_URL_HTTP = https://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz - -SQLITE3_FOLDER = sqlite-amalgamation-3240000 -SQLITE3_URL = https://www.sqlite.org/2018/$(SQLITE3_FOLDER).zip - -ANDROID_SDK = $(shell grep '^sdk\.dir' local.properties | sed 's/^.*=[[:space:]]*//') -ANDROID_NDK = $(shell grep '^ndk\.dir' local.properties | sed 's/^.*=[[:space:]]*//') - -#use interim target variable to switch leveldb on or off -ifeq ($(HAVE_LEVELDB),1) - LEVELDB_TARGET = $(LEVELDB_LIB) -endif - -.PHONY : debug release reconfig delconfig \ - leveldb_download clean_leveldb leveldb\ - irrlicht_download clean_irrlicht irrlicht \ - clean_assets assets sqlite3_download \ - freetype_download clean_freetype freetype \ - apk clean_apk \ - clean_all clean prep_srcdir \ - install_debug install_release envpaths all \ - $(ASSETS_TIMESTAMP) $(LEVELDB_TIMESTAMP) \ - $(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \ - $(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \ - $(OPENSSL_TIMESTAMP) \ - $(ANDR_ROOT)/jni/src/android_version.h \ - $(ANDR_ROOT)/jni/src/android_version_githash.h - -debug : local.properties - export NDEBUG=; \ - export BUILD_TYPE=debug; \ - $(MAKE) apk - -all : debug release - -release : local.properties - @export NDEBUG=1; \ - export BUILD_TYPE=release; \ - $(MAKE) apk - -reconfig: delconfig - @$(MAKE) local.properties - -delconfig: - $(RM) local.properties - -local.properties: - @echo "Please specify path of ANDROID NDK"; \ - echo "e.g. $$HOME/Android/Sdk/ndk-bundle/"; \ - read ANDROID_NDK ; \ - if [ ! -d $$ANDROID_NDK ] ; then \ - echo "$$ANDROID_NDK is not a valid folder"; \ - exit 1; \ - fi; \ - echo "ndk.dir = $$ANDROID_NDK" > local.properties; \ - echo "Please specify path of ANDROID SDK"; \ - echo "e.g. $$HOME/Android/Sdk/"; \ - read SDKFLDR ; \ - if [ ! -d $$SDKFLDR ] ; then \ - echo "$$SDKFLDR is not a valid folder"; \ - exit 1; \ - fi; \ - echo "sdk.dir = $$SDKFLDR" >> local.properties; - - -$(OPENAL_TIMESTAMP) : openal_download - @LAST_MODIF=$$(find ${OPENAL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${OPENAL_TIMESTAMP}; \ - fi - -openal_download : - @if [ ! -d ${OPENAL_DIR} ] ; then \ - echo "openal sources missing, downloading..."; \ - mkdir -p ${ANDR_ROOT}/deps; \ - cd ${ANDR_ROOT}/deps ; \ - git clone ${OPENAL_URL_GIT} || exit 1; \ - fi - -openal : $(OPENAL_LIB) - -$(OPENAL_LIB): $(OPENAL_TIMESTAMP) - + @REFRESH=0; \ - if [ ! -e ${OPENAL_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ ${OPENAL_TIMESTAMP} -nt ${OPENAL_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ $$REFRESH -ne 0 ] ; then \ - echo "changed timestamp for openal detected building..."; \ - cd ${OPENAL_DIR}; \ - export APP_PLATFORM=${APP_PLATFORM}; \ - export TARGET_ABI=${TARGET_ABI}; \ - export TARGET_CFLAGS_ADDON="${TARGET_CFLAGS_ADDON}"; \ - export TARGET_CXXFLAGS_ADDON="${TARGET_CXXFLAGS_ADDON}"; \ - export COMPILER_VERSION=${COMPILER_VERSION}; \ - ${ANDROID_NDK}/ndk-build \ - NDK_APPLICATION_MK=${ANDR_ROOT}/jni/Deps.mk || exit 1; \ - touch ${OPENAL_TIMESTAMP}; \ - touch ${OPENAL_TIMESTAMP_INT}; \ - else \ - echo "nothing to be done for openal"; \ - fi - -clean_openal : - $(RM) -rf ${OPENAL_DIR} - -$(OGG_TIMESTAMP) : ogg_download - @LAST_MODIF=$$(find ${OGG_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${OGG_TIMESTAMP}; \ - fi - -ogg_download : - @if [ ! -d ${OGG_DIR} ] ; then \ - echo "ogg sources missing, downloading..."; \ - mkdir -p ${ANDR_ROOT}/deps; \ - cd ${ANDR_ROOT}/deps ; \ - git clone ${OGG_URL_GIT}|| exit 1; \ - cd libvorbis-libogg-android ; \ - patch -p1 < ${ANDR_ROOT}/patches/libvorbis-libogg-fpu.patch || exit 1; \ - fi - -ogg : $(OGG_LIB) - -$(OGG_LIB): $(OGG_TIMESTAMP) - + @REFRESH=0; \ - if [ ! -e ${OGG_TIMESTAMP_INT} ] ; then \ - echo "${OGG_TIMESTAMP_INT} doesn't exist"; \ - REFRESH=1; \ - fi; \ - if [ ${OGG_TIMESTAMP} -nt ${OGG_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ $$REFRESH -ne 0 ] ; then \ - echo "changed timestamp for ogg detected building..."; \ - cd ${OGG_DIR}; \ - export APP_PLATFORM=${APP_PLATFORM}; \ - export TARGET_ABI=${TARGET_ABI}; \ - ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ - --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ - --platform=${APP_PLATFORM} \ - --install-dir=$${TOOLCHAIN}; \ - touch ${OGG_TIMESTAMP}; \ - touch ${OGG_TIMESTAMP_INT}; \ - else \ - echo "nothing to be done for libogg/libvorbis"; \ - fi - -clean_ogg : - $(RM) -rf ${OGG_DIR} - -$(OPENSSL_TIMESTAMP) : openssl_download - @LAST_MODIF=$$(find ${OPENSSL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${OPENSSL_TIMESTAMP}; \ - fi - -openssl_download : - @if [ ! -d ${OPENSSL_DIR} ] ; then \ - echo "openssl sources missing, downloading..."; \ - mkdir -p ${ANDR_ROOT}/deps; \ - cd ${ANDR_ROOT}/deps ; \ - wget ${OPENSSL_URL} || exit 1; \ - tar -xzf ${OPENSSL_BASEDIR}.tar.gz; \ - cd ${OPENSSL_BASEDIR}; \ - patch -p1 < ${ANDR_ROOT}/patches/openssl_arch.patch; \ - sed -i 's/-mandroid //g' Configure; \ - fi - -openssl : $(OPENSSL_LIB) - -$(OPENSSL_LIB): $(OPENSSL_TIMESTAMP) - @REFRESH=0; \ - if [ ! -e ${OPENSSL_TIMESTAMP_INT} ] ; then \ - echo "${OPENSSL_TIMESTAMP_INT} doesn't exist"; \ - REFRESH=1; \ - fi; \ - if [ ${OPENSSL_TIMESTAMP} -nt ${OPENSSL_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ $$REFRESH -ne 0 ] ; then \ - echo "changed timestamp for openssl detected building..."; \ - cd ${OPENSSL_DIR}; \ - ln -s ${OPENSSL_DIR} ../openssl; \ - export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-openssl; \ - ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ - --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ - --platform=${APP_PLATFORM} \ - --stl=libc++ \ - --install-dir=$${TOOLCHAIN}; \ - export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ - export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \ - export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON}"; \ - CC=${CROSS_CC} ./Configure -DL_ENDIAN no-asm android-${TARGET_ARCH} \ - -D__ANDROID_API__=$(API); \ - CC=${CROSS_CC} ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make depend; \ - CC=${CROSS_CC} ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make build_libs; \ - touch ${OPENSSL_TIMESTAMP}; \ - touch ${OPENSSL_TIMESTAMP_INT}; \ - $(RM) -rf $${TOOLCHAIN}; \ - else \ - echo "nothing to be done for openssl"; \ - fi - -clean_openssl : - $(RM) -rf ${OPENSSL_DIR}; \ - $(RM) -rf $(ANDR_ROOT)/deps/${OPENSSL_BASEDIR}.tar.gz; \ - $(RM) -rf $(ANDR_ROOT)/deps/openssl - -$(LEVELDB_TIMESTAMP) : leveldb_download - @LAST_MODIF=$$(find ${LEVELDB_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${LEVELDB_TIMESTAMP}; \ - fi - -leveldb_download : - @if [ ! -d ${LEVELDB_DIR} ] ; then \ - echo "leveldb sources missing, downloading..."; \ - mkdir -p ${ANDR_ROOT}/deps; \ - cd ${ANDR_ROOT}/deps ; \ - git clone ${LEVELDB_URL_GIT} || exit 1; \ - cd ${LEVELDB_DIR} || exit 1; \ - git checkout ${LEVELDB_COMMIT} || exit 1; \ - fi - -leveldb : $(LEVELDB_LIB) -ifeq ($(HAVE_LEVELDB),1) -$(LEVELDB_LIB): $(LEVELDB_TIMESTAMP) - @REFRESH=0; \ - if [ ! -e ${LEVELDB_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ ${LEVELDB_TIMESTAMP} -nt ${LEVELDB_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ $$REFRESH -ne 0 ] ; then \ - echo "changed timestamp for leveldb detected building..."; \ - cd deps/leveldb; \ - export CROSS_PREFIX=${TARGET_TOOLCHAIN}; \ - export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-leveldb; \ - ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ - --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ - --platform=${APP_PLATFORM} \ - --stl=libc++ \ - --install-dir=$${TOOLCHAIN}; \ - export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ - export CC=${CROSS_CC}; \ - export CXX=${CROSS_CXX}; \ - export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \ - export CPPFLAGS="$${CPPFLAGS} ${TARGET_CXXFLAGS_ADDON}"; \ - export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON}"; \ - export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \ - $(MAKE) || exit 1; \ - touch ${LEVELDB_TIMESTAMP}; \ - touch ${LEVELDB_TIMESTAMP_INT}; \ - $(RM) -rf $${TOOLCHAIN}; \ - else \ - echo "nothing to be done for leveldb"; \ - fi -endif - -clean_leveldb : - ./gradlew cleanLevelDB - -$(FREETYPE_TIMESTAMP) : freetype_download - @LAST_MODIF=$$(find ${FREETYPE_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${FREETYPE_TIMESTAMP}; \ - fi - -freetype_download : - @if [ ! -d ${FREETYPE_DIR} ] ; then \ - echo "freetype sources missing, downloading..."; \ - mkdir -p ${ANDR_ROOT}/deps; \ - cd deps; \ - git clone ${FREETYPE_URL_GIT} || exit 1; \ - fi - -freetype : $(FREETYPE_LIB) - -$(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP) - + @REFRESH=0; \ - if [ ! -e ${FREETYPE_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ ! -e ${FREETYPE_LIB} ] ; then \ - REFRESH=1; \ - fi; \ - if [ ${FREETYPE_TIMESTAMP} -nt ${FREETYPE_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ $$REFRESH -ne 0 ] ; then \ - mkdir -p ${FREETYPE_DIR}; \ - echo "changed timestamp for freetype detected building..."; \ - cd ${FREETYPE_DIR}/Android/jni; \ - export APP_PLATFORM=${APP_PLATFORM}; \ - export TARGET_ABI=${TARGET_ABI}; \ - export TARGET_CFLAGS_ADDON="${TARGET_CFLAGS_ADDON}"; \ - export TARGET_CXXFLAGS_ADDON="${TARGET_CXXFLAGS_ADDON}"; \ - export COMPILER_VERSION=${COMPILER_VERSION}; \ - ${ANDROID_NDK}/ndk-build \ - NDK_APPLICATION_MK=${ANDR_ROOT}/jni/Deps.mk || exit 1; \ - touch ${FREETYPE_TIMESTAMP}; \ - touch ${FREETYPE_TIMESTAMP_INT}; \ - else \ - echo "nothing to be done for freetype"; \ - fi - -clean_freetype : - ./gradlew cleanFreetype - -$(ICONV_TIMESTAMP) : iconv_download - @LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ICONV_TIMESTAMP}; \ - fi - -iconv_download : - @if [ ! -d ${ICONV_DIR} ] ; then \ - echo "iconv sources missing, downloading..."; \ - mkdir -p ${ANDR_ROOT}/deps; \ - cd ${ANDR_ROOT}/deps; \ - wget ${ICONV_URL_HTTP} || exit 1; \ - tar -xzf libiconv-${ICONV_VERSION}.tar.gz || exit 1; \ - rm libiconv-${ICONV_VERSION}.tar.gz; \ - ln -s libiconv-${ICONV_VERSION} libiconv; \ - fi - -iconv : $(ICONV_LIB) - -$(ICONV_LIB) : $(ICONV_TIMESTAMP) - @REFRESH=0; \ - if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ ! -e ${ICONV_LIB} ] ; then \ - REFRESH=1; \ - fi; \ - if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ $$REFRESH -ne 0 ] ; then \ - mkdir -p ${ICONV_DIR}; \ - echo "changed timestamp for iconv detected building..."; \ - cd ${ICONV_DIR}; \ - export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-iconv; \ - ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ - --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ - --platform=${APP_PLATFORM} \ - --stl=libc++ \ - --install-dir=$${TOOLCHAIN}; \ - export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ - export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \ - export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON} -lstdc++"; \ - export CC=${CROSS_CC}; \ - export CXX=${CROSS_CXX}; \ - export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \ - ./configure --host=${TARGET_HOST} || exit 1; \ - sed -i 's/LIBICONV_VERSION_INFO) /LIBICONV_VERSION_INFO) -avoid-version /g' lib/Makefile; \ - grep "iconv_LDFLAGS" src/Makefile; \ - $(MAKE) -s || exit 1; \ - touch ${ICONV_TIMESTAMP}; \ - touch ${ICONV_TIMESTAMP_INT}; \ - rm -rf ${TOOLCHAIN}; \ - else \ - echo "nothing to be done for iconv"; \ - fi - -clean_iconv : - ./gradlew cleanIconv - -#Note: Texturehack patch is required for gpu's not supporting color format -# correctly. Known bad GPU: -# -geforce on emulator -# -Vivante Corporation GC1000 core (e.g. Galaxy Tab 3) - -irrlicht_download : - @if [ ! -d "deps/irrlicht" ] ; then \ - echo "irrlicht sources missing, downloading..."; \ - mkdir -p ${ANDR_ROOT}/deps; \ - cd deps; \ - svn co ${IRRLICHT_URL_SVN} irrlicht || exit 1; \ - cd irrlicht; \ - patch -p1 < ${ANDR_ROOT}/patches/irrlicht-touchcount.patch || exit 1; \ - patch -p1 < ${ANDR_ROOT}/patches/irrlicht-back_button.patch || exit 1; \ - patch -p1 < ${ANDR_ROOT}/patches/irrlicht-texturehack.patch || exit 1; \ - patch -p1 < ${ANDR_ROOT}/patches/irrlicht-native_activity.patch || exit 1; \ - fi - -$(IRRLICHT_TIMESTAMP) : irrlicht_download - @LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${IRRLICHT_TIMESTAMP}; \ - fi - -irrlicht : $(IRRLICHT_LIB) - -$(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB) - + @REFRESH=0; \ - if [ ! -e ${IRRLICHT_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ ! -e ${IRRLICHT_LIB} ] ; then \ - REFRESH=1; \ - fi; \ - if [ ${IRRLICHT_TIMESTAMP} -nt ${IRRLICHT_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ $$REFRESH -ne 0 ] ; then \ - mkdir -p ${IRRLICHT_DIR}; \ - echo "changed timestamp for irrlicht detected building..."; \ - cd deps/irrlicht/source/Irrlicht/Android; \ - export APP_PLATFORM=${APP_PLATFORM}; \ - export TARGET_ABI=${TARGET_ABI}; \ - export TARGET_CFLAGS_ADDON="${TARGET_CFLAGS_ADDON}"; \ - export TARGET_CXXFLAGS_ADDON="${TARGET_CXXFLAGS_ADDON}"; \ - export COMPILER_VERSION=${COMPILER_VERSION}; \ - ${ANDROID_NDK}/ndk-build \ - NDK_APPLICATION_MK=${ANDR_ROOT}/jni/Deps.mk || exit 1; \ - touch ${IRRLICHT_TIMESTAMP}; \ - touch ${IRRLICHT_TIMESTAMP_INT}; \ - else \ - echo "nothing to be done for irrlicht"; \ - fi - -clean_irrlicht : - ./gradlew cleanIrrlicht - -$(CURL_TIMESTAMP) : curl_download - @LAST_MODIF=$$(find ${CURL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${CURL_TIMESTAMP}; \ - fi - -curl_download : - @if [ ! -d "deps/curl-${CURL_VERSION}" ] ; then \ - echo "curl sources missing, downloading..."; \ - mkdir -p ${ANDR_ROOT}/deps; \ - cd deps; \ - wget ${CURL_URL_HTTP} || exit 1; \ - tar -xjf curl-${CURL_VERSION}.tar.bz2 || exit 1; \ - rm curl-${CURL_VERSION}.tar.bz2; \ - ln -s curl-${CURL_VERSION} curl; \ - fi - -curl : $(CURL_LIB) - -$(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB) - @REFRESH=0; \ - if [ ! -e ${CURL_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ ! -e ${CURL_LIB} ] ; then \ - REFRESH=1; \ - fi; \ - if [ ${CURL_TIMESTAMP} -nt ${CURL_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ - fi; \ - if [ $$REFRESH -ne 0 ] ; then \ - mkdir -p ${CURL_DIR}; \ - echo "changed timestamp for curl detected building..."; \ - cd deps/curl-${CURL_VERSION}; \ - export CROSS_PREFIX=${TARGET_TOOLCHAIN}; \ - export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-curl; \ - ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ - --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ - --platform=${APP_PLATFORM} \ - --stl=libc++ \ - --install-dir=$${TOOLCHAIN}; \ - export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ - export CC=${CROSS_CC}; \ - export CXX=${CROSS_CXX}; \ - export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \ - export CPPFLAGS="$${CPPFLAGS} -I${OPENSSL_DIR}/include ${TARGET_CFLAGS_ADDON}"; \ - export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \ - export LDFLAGS="$${LDFLAGS} -L${OPENSSL_DIR} ${TARGET_LDFLAGS_ADDON}"; \ - ./configure --host=${TARGET_HOST} --disable-shared --enable-static --with-ssl; \ - $(MAKE) -s || exit 1; \ - touch ${CURL_TIMESTAMP}; \ - touch ${CURL_TIMESTAMP_INT}; \ - $(RM) -rf $${TOOLCHAIN}; \ - else \ - echo "nothing to be done for curl"; \ - fi - -clean_curl : - ./gradlew cleanCURL - -sqlite3_download: deps/${SQLITE3_FOLDER}/sqlite3.c - -deps/${SQLITE3_FOLDER}/sqlite3.c : - cd deps; \ - wget ${SQLITE3_URL}; \ - unzip ${SQLITE3_FOLDER}.zip; \ - ln -s ${SQLITE3_FOLDER} sqlite; \ - cd ${SQLITE3_FOLDER}; - -clean_sqlite3: - ./gradlew cleanSQLite3 - -$(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB) - @mkdir -p ${ANDR_ROOT}/deps; \ - for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do \ - LAST_MODIF=$$(find ${PROJ_ROOT}/${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ]; then \ - touch ${PROJ_ROOT}/${DIRNAME}/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - echo ${DIRNAME} changed $$LAST_MODIF; \ - fi; \ - done; \ - LAST_MODIF=$$(find ${IRRLICHT_DIR}/media -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${IRRLICHT_DIR}/media/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - if [ ${PROJ_ROOT}/minetest.conf.example -nt ${ASSETS_TIMESTAMP} ] ; then \ - echo "conf changed"; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - if [ ${PROJ_ROOT}/README.txt -nt ${ASSETS_TIMESTAMP} ] ; then \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - if [ ! -e $(ASSETS_TIMESTAMP) ] ; then \ - touch $(ASSETS_TIMESTAMP); \ - fi - -assets : $(ASSETS_TIMESTAMP) - @REFRESH=0; \ - if [ ! -e ${ASSETS_TIMESTAMP}.old ] ; then \ - REFRESH=1; \ - fi; \ - if [ ${ASSETS_TIMESTAMP} -nt ${ASSETS_TIMESTAMP}.old ] ; then \ - REFRESH=1; \ - fi; \ - if [ ! -d ${APP_ROOT}/assets ] ; then \ - REFRESH=1; \ - fi; \ - if [ $$REFRESH -ne 0 ] ; then \ - echo "assets changed, refreshing..."; \ - $(MAKE) clean_assets; \ - ./gradlew copyAssets; \ - cp -r ${IRRLICHT_DIR}/media/Shaders ${APP_ROOT}/assets/Minetest/media; \ - cd ${APP_ROOT}/assets || exit 1; \ - find . -name "timestamp" -exec rm {} \; ; \ - find . -name "*.blend" -exec rm {} \; ; \ - find . -name "*~" -exec rm {} \; ; \ - find . -type d -path "*.git" -exec rm -rf {} \; ; \ - find . -type d -path "*.svn" -exec rm -rf {} \; ; \ - find . -type f -path "*.gitignore" -exec rm -rf {} \; ; \ - ls -R | grep ":$$" | sed -e 's/:$$//' -e 's/\.//' -e 's/^\///' > "index.txt"; \ - find -L Minetest > filelist.txt; \ - cp ${ANDR_ROOT}/${ASSETS_TIMESTAMP} ${ANDR_ROOT}/${ASSETS_TIMESTAMP}.old; \ - else \ - echo "nothing to be done for assets"; \ - fi - -clean_assets : - ./gradlew cleanAssets - -apk: local.properties assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(LEVELDB_TARGET) \ - $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ANDR_ROOT)/jni/src/android_version.h \ - $(ANDR_ROOT)/jni/src/android_version_githash.h sqlite3_download - + @export TARGET_LIBDIR=${TARGET_LIBDIR}; \ - export HAVE_LEVELDB=${HAVE_LEVELDB}; \ - export APP_PLATFORM=${APP_PLATFORM}; \ - export TARGET_ABI=${TARGET_ABI}; \ - export TARGET_CFLAGS_ADDON="${TARGET_CFLAGS_ADDON}"; \ - export TARGET_CXXFLAGS_ADDON="${TARGET_CXXFLAGS_ADDON}"; \ - export COMPILER_VERSION=${COMPILER_VERSION}; \ - export GPROF=${GPROF}; \ - ${ANDROID_NDK}/ndk-build || exit 1; \ - if [ ! -e ${APP_ROOT}/jniLibs ]; then \ - ln -s ${ANDR_ROOT}/libs ${APP_ROOT}/jniLibs || exit 1; \ - fi; \ - export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" && \ - export BUILD_TYPE_C=$$(echo "$${BUILD_TYPE}" | sed 's/./\U&/') && \ - ./gradlew assemble$$BUILD_TYPE_C && \ - echo "APK stored at: build/outputs/apk/$$BUILD_TYPE/Minetest-$$BUILD_TYPE.apk" && \ - echo "You can install it with \`make install_$$BUILD_TYPE\`" - -# These Intentionally doesn't depend on their respective build steps, -# because it takes a while to verify that everything's up-to-date. -install_debug: - ${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/debug/Minetest-debug.apk - -install_release: - ${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/release/Minetest-release.apk - -prep_srcdir : - @if [ ! -e ${ANDR_ROOT}/jni/src ]; then \ - ln -s ${PROJ_ROOT}/src ${ANDR_ROOT}/jni/src; \ - fi; \ - if [ ! -e ${ANDR_ROOT}/jni/lib ]; then \ - ln -s ${PROJ_ROOT}/lib ${ANDR_ROOT}/jni/lib; \ - fi - -clean_apk : - ./gradlew clean - -clean_all : - ./gradlew cleanAll - -$(ANDR_ROOT)/jni/src/android_version_githash.h : prep_srcdir - @export VERSION_FILE=${ANDR_ROOT}/jni/src/android_version_githash.h; \ - export VERSION_FILE_NEW=$${VERSION_FILE}.new; \ - { \ - echo "#ifndef ANDROID_MT_VERSION_GITHASH_H"; \ - echo "#define ANDROID_MT_VERSION_GITHASH_H"; \ - export GITHASH=$$(git rev-parse --short=8 HEAD); \ - export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"; \ - echo "#define VERSION_GITHASH \"$$VERSION_STR-$$GITHASH-Android\""; \ - echo "#endif"; \ - } > "$${VERSION_FILE_NEW}"; \ - if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \ - echo "android_version_githash.h changed, updating..."; \ - mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \ - else \ - rm "$${VERSION_FILE_NEW}"; \ - fi - - -$(ANDR_ROOT)/jni/src/android_version.h : prep_srcdir - @export VERSION_FILE=${ANDR_ROOT}/jni/src/android_version.h; \ - export VERSION_FILE_NEW=$${VERSION_FILE}.new; \ - { \ - echo "#ifndef ANDROID_MT_VERSION_H"; \ - echo "#define ANDROID_MT_VERSION_H"; \ - echo "#define VERSION_MAJOR ${VERSION_MAJOR}"; \ - echo "#define VERSION_MINOR ${VERSION_MINOR}"; \ - echo "#define VERSION_PATCH ${VERSION_PATCH}"; \ - echo "#define VERSION_STRING STR(VERSION_MAJOR) \".\" STR(VERSION_MINOR) \ - \".\" STR(VERSION_PATCH)"; \ - echo "#endif"; \ - } > $${VERSION_FILE_NEW}; \ - if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \ - echo "android_version.h changed, updating..."; \ - mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \ - else \ - rm "$${VERSION_FILE_NEW}"; \ - fi - -clean : clean_apk clean_assets diff -Nru minetest-5.2.0/build/android/native/build.gradle minetest-5.3.0/build/android/native/build.gradle --- minetest-5.2.0/build/android/native/build.gradle 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/native/build.gradle 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,59 @@ +apply plugin: 'com.android.library' +import org.ajoberstar.grgit.Grgit + +android { + compileSdkVersion 29 + buildToolsVersion '29.0.3' + ndkVersion '21.1.6352462' + defaultConfig { + minSdkVersion 16 + targetSdkVersion 29 + externalNativeBuild { + ndkBuild { + arguments '-j8', + "versionMajor=${versionMajor}", + "versionMinor=${versionMinor}", + "versionPatch=${versionPatch}", + "versionExtra=${versionExtra}" + } + } + } + + externalNativeBuild { + ndkBuild { + path file('jni/Android.mk') + } + } + + // supported architectures + splits { + abi { + enable true + reset() + include 'armeabi-v7a', 'arm64-v8a'//, 'x86' + } + } + + buildTypes { + release { + externalNativeBuild { + ndkBuild { + arguments 'NDEBUG=1' + } + } + } + } +} + +task cloneGitRepo() { + def destination = file('deps') + if(!destination.exists()) { + def grgit = Grgit.clone( + dir: destination, + uri: 'https://github.com/minetest/minetest_android_deps_binaries' + ) + grgit.close() + } +} + +preBuild.dependsOn cloneGitRepo diff -Nru minetest-5.2.0/build/android/native/jni/Android.mk minetest-5.3.0/build/android/native/jni/Android.mk --- minetest-5.2.0/build/android/native/jni/Android.mk 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/native/jni/Android.mk 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,219 @@ +LOCAL_PATH := $(call my-dir)/.. + +#LOCAL_ADDRESS_SANITIZER:=true + +include $(CLEAR_VARS) +LOCAL_MODULE := Curl +LOCAL_SRC_FILES := deps/Android/Curl/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libcurl.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Freetype +LOCAL_SRC_FILES := deps/Android/Freetype/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libfreetype.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Irrlicht +LOCAL_SRC_FILES := deps/Android/Irrlicht/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libIrrlicht.a +include $(PREBUILT_STATIC_LIBRARY) + +#include $(CLEAR_VARS) +#LOCAL_MODULE := LevelDB +#LOCAL_SRC_FILES := deps/Android/LevelDB/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libleveldb.a +#include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := LuaJIT +LOCAL_SRC_FILES := deps/Android/LuaJIT/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libluajit.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := mbedTLS +LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedtls.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := mbedx509 +LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedx509.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := mbedcrypto +LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedcrypto.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := OpenAL +LOCAL_SRC_FILES := deps/Android/OpenAL-Soft/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libopenal.a +include $(PREBUILT_STATIC_LIBRARY) + +# You can use `OpenSSL and Crypto` instead `mbedTLS mbedx509 mbedcrypto`, +#but it increase APK size on ~0.7MB +#include $(CLEAR_VARS) +#LOCAL_MODULE := OpenSSL +#LOCAL_SRC_FILES := deps/Android/OpenSSL/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libssl.a +#include $(PREBUILT_STATIC_LIBRARY) + +#include $(CLEAR_VARS) +#LOCAL_MODULE := Crypto +#LOCAL_SRC_FILES := deps/Android/OpenSSL/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libcrypto.a +#include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Vorbis +LOCAL_SRC_FILES := deps/Android/Vorbis/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libvorbis.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Minetest + +LOCAL_CFLAGS += \ + -DJSONCPP_NO_LOCALE_SUPPORT \ + -DHAVE_TOUCHSCREENGUI \ + -DENABLE_GLES=1 \ + -DUSE_CURL=1 \ + -DUSE_SOUND=1 \ + -DUSE_FREETYPE=1 \ + -DUSE_LEVELDB=0 \ + -DUSE_LUAJIT=1 \ + -DVERSION_MAJOR=${versionMajor} \ + -DVERSION_MINOR=${versionMinor} \ + -DVERSION_PATCH=${versionPatch} \ + -DVERSION_EXTRA=${versionExtra} \ + $(GPROF_DEF) + +ifdef NDEBUG + LOCAL_CFLAGS += -DNDEBUG=1 +endif + +ifdef GPROF + GPROF_DEF := -DGPROF + PROFILER_LIBS := android-ndk-profiler + LOCAL_CFLAGS += -pg +endif + +LOCAL_C_INCLUDES := \ + ../../../src \ + ../../../src/script \ + ../../../lib/gmp \ + ../../../lib/jsoncpp \ + deps/Android/Curl/include \ + deps/Android/Freetype/include \ + deps/Android/Irrlicht/include \ + deps/Android/LevelDB/include \ + deps/Android/libiconv/include \ + deps/Android/libiconv/libcharset/include \ + deps/Android/LuaJIT/src \ + deps/Android/OpenAL-Soft/include \ + deps/Android/sqlite \ + deps/Android/Vorbis/include + +LOCAL_SRC_FILES := \ + $(wildcard ../../../src/client/*.cpp) \ + $(wildcard ../../../src/client/*/*.cpp) \ + $(wildcard ../../../src/content/*.cpp) \ + ../../../src/database/database.cpp \ + ../../../src/database/database-dummy.cpp \ + ../../../src/database/database-files.cpp \ + ../../../src/database/database-sqlite3.cpp \ + $(wildcard ../../../src/gui/*.cpp) \ + $(wildcard ../../../src/irrlicht_changes/*.cpp) \ + $(wildcard ../../../src/mapgen/*.cpp) \ + $(wildcard ../../../src/network/*.cpp) \ + $(wildcard ../../../src/script/*.cpp) \ + $(wildcard ../../../src/script/*/*.cpp) \ + $(wildcard ../../../src/server/*.cpp) \ + $(wildcard ../../../src/threading/*.cpp) \ + $(wildcard ../../../src/util/*.c) \ + $(wildcard ../../../src/util/*.cpp) \ + ../../../src/ban.cpp \ + ../../../src/chat.cpp \ + ../../../src/clientiface.cpp \ + ../../../src/collision.cpp \ + ../../../src/content_mapnode.cpp \ + ../../../src/content_nodemeta.cpp \ + ../../../src/convert_json.cpp \ + ../../../src/craftdef.cpp \ + ../../../src/debug.cpp \ + ../../../src/defaultsettings.cpp \ + ../../../src/emerge.cpp \ + ../../../src/environment.cpp \ + ../../../src/face_position_cache.cpp \ + ../../../src/filesys.cpp \ + ../../../src/gettext.cpp \ + ../../../src/httpfetch.cpp \ + ../../../src/hud.cpp \ + ../../../src/inventory.cpp \ + ../../../src/inventorymanager.cpp \ + ../../../src/itemdef.cpp \ + ../../../src/itemstackmetadata.cpp \ + ../../../src/light.cpp \ + ../../../src/log.cpp \ + ../../../src/main.cpp \ + ../../../src/map.cpp \ + ../../../src/map_settings_manager.cpp \ + ../../../src/mapblock.cpp \ + ../../../src/mapnode.cpp \ + ../../../src/mapsector.cpp \ + ../../../src/metadata.cpp \ + ../../../src/modchannels.cpp \ + ../../../src/nameidmapping.cpp \ + ../../../src/nodedef.cpp \ + ../../../src/nodemetadata.cpp \ + ../../../src/nodetimer.cpp \ + ../../../src/noise.cpp \ + ../../../src/objdef.cpp \ + ../../../src/object_properties.cpp \ + ../../../src/particles.cpp \ + ../../../src/pathfinder.cpp \ + ../../../src/player.cpp \ + ../../../src/porting.cpp \ + ../../../src/porting_android.cpp \ + ../../../src/profiler.cpp \ + ../../../src/raycast.cpp \ + ../../../src/reflowscan.cpp \ + ../../../src/remoteplayer.cpp \ + ../../../src/rollback.cpp \ + ../../../src/rollback_interface.cpp \ + ../../../src/serialization.cpp \ + ../../../src/server.cpp \ + ../../../src/serverenvironment.cpp \ + ../../../src/serverlist.cpp \ + ../../../src/settings.cpp \ + ../../../src/staticobject.cpp \ + ../../../src/texture_override.cpp \ + ../../../src/tileanimation.cpp \ + ../../../src/tool.cpp \ + ../../../src/translation.cpp \ + ../../../src/version.cpp \ + ../../../src/voxel.cpp \ + ../../../src/voxelalgorithms.cpp + +# LevelDB backend is disabled +# ../../../src/database/database-leveldb.cpp + +# GMP +LOCAL_SRC_FILES += ../../../lib/gmp/mini-gmp.c + +# JSONCPP +LOCAL_SRC_FILES += ../../../lib/jsoncpp/jsoncpp.cpp + +# iconv +LOCAL_SRC_FILES += \ + deps/Android/libiconv/lib/iconv.c \ + deps/Android/libiconv/libcharset/lib/localcharset.c + +# SQLite3 +LOCAL_SRC_FILES += deps/Android/sqlite/sqlite3.c + +LOCAL_STATIC_LIBRARIES += Curl Freetype Irrlicht OpenAL mbedTLS mbedx509 mbedcrypto Vorbis LuaJIT android_native_app_glue $(PROFILER_LIBS) #LevelDB +#OpenSSL Crypto + +LOCAL_LDLIBS := -lEGL -lGLESv1_CM -lGLESv2 -landroid -lOpenSLES + +include $(BUILD_SHARED_LIBRARY) + +ifdef GPROF +$(call import-module,android-ndk-profiler) +endif +$(call import-module,android/native_app_glue) diff -Nru minetest-5.2.0/build/android/native/jni/Application.mk minetest-5.3.0/build/android/native/jni/Application.mk --- minetest-5.2.0/build/android/native/jni/Application.mk 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/native/jni/Application.mk 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,32 @@ +APP_PLATFORM := ${APP_PLATFORM} +APP_ABI := ${TARGET_ABI} +APP_STL := c++_shared +NDK_TOOLCHAIN_VERSION := clang +APP_SHORT_COMMANDS := true +APP_MODULES := Minetest + +APP_CPPFLAGS := -Ofast -fvisibility=hidden -fexceptions -Wno-deprecated-declarations -Wno-extra-tokens + +ifeq ($(APP_ABI),armeabi-v7a) +APP_CPPFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb +endif + +#ifeq ($(APP_ABI),x86) +#APP_CPPFLAGS += -march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32 -funroll-loops +#endif + +ifndef NDEBUG +APP_CPPFLAGS := -g -D_DEBUG -O0 -fno-omit-frame-pointer -fexceptions +endif + +APP_CFLAGS := $(APP_CPPFLAGS) -Wno-parentheses-equality #-Werror=shorten-64-to-32 +APP_CXXFLAGS := $(APP_CPPFLAGS) -frtti -std=gnu++17 +APP_LDFLAGS := -Wl,--no-warn-mismatch,--gc-sections,--icf=safe + +ifeq ($(APP_ABI),arm64-v8a) +APP_LDFLAGS := -Wl,--no-warn-mismatch,--gc-sections +endif + +ifndef NDEBUG +APP_LDFLAGS := +endif diff -Nru minetest-5.2.0/build/android/native/src/main/AndroidManifest.xml minetest-5.3.0/build/android/native/src/main/AndroidManifest.xml --- minetest-5.2.0/build/android/native/src/main/AndroidManifest.xml 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/build/android/native/src/main/AndroidManifest.xml 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru minetest-5.2.0/build/android/patches/irrlicht-back_button.patch minetest-5.3.0/build/android/patches/irrlicht-back_button.patch --- minetest-5.2.0/build/android/patches/irrlicht-back_button.patch 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/patches/irrlicht-back_button.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ ---- irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp.orig 2015-08-29 15:43:09.000000000 +0300 -+++ irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2016-05-13 21:36:22.880388505 +0300 -@@ -486,7 +486,7 @@ - event.KeyInput.Char = 0; - } - -- device->postEventFromUser(event); -+ status = device->postEventFromUser(event); - } - break; - default: -@@ -543,7 +543,7 @@ - KeyMap[1] = KEY_LBUTTON; // AKEYCODE_SOFT_LEFT - KeyMap[2] = KEY_RBUTTON; // AKEYCODE_SOFT_RIGHT - KeyMap[3] = KEY_HOME; // AKEYCODE_HOME -- KeyMap[4] = KEY_BACK; // AKEYCODE_BACK -+ KeyMap[4] = KEY_CANCEL; // AKEYCODE_BACK - KeyMap[5] = KEY_UNKNOWN; // AKEYCODE_CALL - KeyMap[6] = KEY_UNKNOWN; // AKEYCODE_ENDCALL - KeyMap[7] = KEY_KEY_0; // AKEYCODE_0 diff -Nru minetest-5.2.0/build/android/patches/irrlicht-native_activity.patch minetest-5.3.0/build/android/patches/irrlicht-native_activity.patch --- minetest-5.2.0/build/android/patches/irrlicht-native_activity.patch 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/patches/irrlicht-native_activity.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ ---- irrlicht/source/Irrlicht/CEGLManager.cpp.orig 2018-09-11 18:19:51.453403631 +0300 -+++ irrlicht/source/Irrlicht/CEGLManager.cpp 2018-09-11 18:36:24.603471869 +0300 -@@ -9,6 +9,10 @@ - #include "irrString.h" - #include "os.h" - -+#if defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) -+#include -+#endif -+ - namespace irr - { - namespace video diff -Nru minetest-5.2.0/build/android/patches/irrlicht-texturehack.patch minetest-5.3.0/build/android/patches/irrlicht-texturehack.patch --- minetest-5.2.0/build/android/patches/irrlicht-texturehack.patch 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/patches/irrlicht-texturehack.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,240 +0,0 @@ ---- irrlicht/source/Irrlicht/COGLESTexture.cpp.orig 2014-06-22 17:01:13.266568869 +0200 -+++ irrlicht/source/Irrlicht/COGLESTexture.cpp 2014-06-22 17:03:59.298572810 +0200 -@@ -366,112 +366,140 @@ - void(*convert)(const void*, s32, void*) = 0; - getFormatParameters(ColorFormat, InternalFormat, filtering, PixelFormat, PixelType, convert); - -- // make sure we don't change the internal format of existing images -- if (!newTexture) -- InternalFormat = oldInternalFormat; -- -- Driver->setActiveTexture(0, this); -- -- if (Driver->testGLError()) -- os::Printer::log("Could not bind Texture", ELL_ERROR); -- -- // mipmap handling for main texture -- if (!level && newTexture) -- { -- // auto generate if possible and no mipmap data is given -- if (!IsCompressed && HasMipMaps && !mipmapData && Driver->queryFeature(EVDF_MIP_MAP_AUTO_UPDATE)) -- { -- if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_SPEED)) -- glHint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST); -- else if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_QUALITY)) -- glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST); -- else -- glHint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE); -+ bool retry = false; -+ -+ do { -+ if (retry) { -+ InternalFormat = GL_RGBA; -+ PixelFormat = GL_RGBA; -+ convert = CColorConverter::convert_A8R8G8B8toA8B8G8R8; -+ } -+ // make sure we don't change the internal format of existing images -+ if (!newTexture) -+ InternalFormat = oldInternalFormat; - -- glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); -- AutomaticMipmapUpdate=true; -- } -+ Driver->setActiveTexture(0, this); - -- // enable bilinear filter without mipmaps -- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering); -- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering); -- } -+ if (Driver->testGLError()) -+ os::Printer::log("Could not bind Texture", ELL_ERROR); - -- // now get image data and upload to GPU -+ // mipmap handling for main texture -+ if (!level && newTexture) -+ { -+ // auto generate if possible and no mipmap data is given -+ if (!IsCompressed && HasMipMaps && !mipmapData && Driver->queryFeature(EVDF_MIP_MAP_AUTO_UPDATE)) -+ { -+ if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_SPEED)) -+ glHint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST); -+ else if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_QUALITY)) -+ glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST); -+ else -+ glHint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE); -+ -+ glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); -+ AutomaticMipmapUpdate=true; -+ } -+ -+ // enable bilinear filter without mipmaps -+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering); -+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering); -+ } - -- u32 compressedImageSize = IImage::getCompressedImageSize(ColorFormat, image->getDimension().Width, image->getDimension().Height); -+ // now get image data and upload to GPU - -- void* source = image->lock(); -+ u32 compressedImageSize = IImage::getCompressedImageSize(ColorFormat, image->getDimension().Width, image->getDimension().Height); - -- IImage* tmpImage = 0; -+ void* source = image->lock(); - -- if (convert) -- { -- tmpImage = new CImage(image->getColorFormat(), image->getDimension()); -- void* dest = tmpImage->lock(); -- convert(source, image->getDimension().getArea(), dest); -- image->unlock(); -- source = dest; -- } -+ IImage* tmpImage = 0; - -- if (newTexture) -- { -- if (IsCompressed) -+ if (convert) - { -- glCompressedTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, image->getDimension().Width, -- image->getDimension().Height, 0, compressedImageSize, source); -+ tmpImage = new CImage(image->getColorFormat(), image->getDimension()); -+ void* dest = tmpImage->lock(); -+ convert(source, image->getDimension().getArea(), dest); -+ image->unlock(); -+ source = dest; - } -- else -- glTexImage2D(GL_TEXTURE_2D, level, InternalFormat, image->getDimension().Width, -- image->getDimension().Height, 0, PixelFormat, PixelType, source); -- } -- else -- { -- if (IsCompressed) -+ -+ if (newTexture) - { -- glCompressedTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width, -- image->getDimension().Height, PixelFormat, compressedImageSize, source); -+ if (IsCompressed) -+ { -+ glCompressedTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, image->getDimension().Width, -+ image->getDimension().Height, 0, compressedImageSize, source); -+ } -+ else -+ glTexImage2D(GL_TEXTURE_2D, level, InternalFormat, image->getDimension().Width, -+ image->getDimension().Height, 0, PixelFormat, PixelType, source); - } - else -- glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width, -- image->getDimension().Height, PixelFormat, PixelType, source); -- } -- -- if (convert) -- { -- tmpImage->unlock(); -- tmpImage->drop(); -- } -- else -- image->unlock(); -- -- if (!level && newTexture) -- { -- if (IsCompressed && !mipmapData) - { -- if (image->hasMipMaps()) -- mipmapData = static_cast(image->lock())+compressedImageSize; -+ if (IsCompressed) -+ { -+ glCompressedTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width, -+ image->getDimension().Height, PixelFormat, compressedImageSize, source); -+ } - else -- HasMipMaps = false; -+ glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width, -+ image->getDimension().Height, PixelFormat, PixelType, source); - } - -- regenerateMipMapLevels(mipmapData); -- -- if (HasMipMaps) // might have changed in regenerateMipMapLevels -+ if (convert) - { -- // enable bilinear mipmap filter -- GLint filteringMipMaps = GL_LINEAR_MIPMAP_NEAREST; -- -- if (filtering != GL_LINEAR) -- filteringMipMaps = GL_NEAREST_MIPMAP_NEAREST; -+ tmpImage->unlock(); -+ tmpImage->drop(); -+ } -+ else -+ image->unlock(); -+ -+ if (glGetError() != GL_NO_ERROR) { -+ static bool warned = false; -+ if ((!retry) && (ColorFormat == ECF_A8R8G8B8)) { -+ -+ if (!warned) { -+ os::Printer::log("Your driver claims to support GL_BGRA but fails on trying to upload a texture, converting to GL_RGBA and trying again", ELL_ERROR); -+ warned = true; -+ } -+ } -+ else if (retry) { -+ os::Printer::log("Neither uploading texture as GL_BGRA nor, converted one using GL_RGBA succeeded", ELL_ERROR); -+ } -+ retry = !retry; -+ continue; -+ } else { -+ retry = false; -+ } - -- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filteringMipMaps); -- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering); -+ if (!level && newTexture) -+ { -+ if (IsCompressed && !mipmapData) -+ { -+ if (image->hasMipMaps()) -+ mipmapData = static_cast(image->lock())+compressedImageSize; -+ else -+ HasMipMaps = false; -+ } -+ -+ regenerateMipMapLevels(mipmapData); -+ -+ if (HasMipMaps) // might have changed in regenerateMipMapLevels -+ { -+ // enable bilinear mipmap filter -+ GLint filteringMipMaps = GL_LINEAR_MIPMAP_NEAREST; -+ -+ if (filtering != GL_LINEAR) -+ filteringMipMaps = GL_NEAREST_MIPMAP_NEAREST; -+ -+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filteringMipMaps); -+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering); -+ } - } -- } - -- if (Driver->testGLError()) -- os::Printer::log("Could not glTexImage2D", ELL_ERROR); -+ if (Driver->testGLError()) -+ os::Printer::log("Could not glTexImage2D", ELL_ERROR); -+ } -+ while(retry); - } - - ---- irrlicht/source/Irrlicht/COGLESTexture.cpp.orig 2014-06-25 00:28:50.820501856 +0200 -+++ irrlicht/source/Irrlicht/COGLESTexture.cpp 2014-06-25 00:08:37.712544692 +0200 -@@ -422,6 +422,9 @@ - source = dest; - } - -+ //clear old error -+ glGetError(); -+ - if (newTexture) - { - if (IsCompressed) diff -Nru minetest-5.2.0/build/android/patches/irrlicht-touchcount.patch minetest-5.3.0/build/android/patches/irrlicht-touchcount.patch --- minetest-5.2.0/build/android/patches/irrlicht-touchcount.patch 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/patches/irrlicht-touchcount.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ ---- irrlicht.orig/include/IEventReceiver.h 2014-06-03 19:43:50.433713133 +0200 -+++ irrlicht/include/IEventReceiver.h 2014-06-03 19:44:36.993711489 +0200 -@@ -375,6 +375,9 @@ - // Y position of simple touch. - s32 Y; - -+ // number of current touches -+ s32 touchedCount; -+ - //! Type of touch event. - ETOUCH_INPUT_EVENT Event; - }; ---- irrlicht.orig/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2014-06-03 19:43:50.505713130 +0200 -+++ irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2014-06-03 19:45:37.265709359 +0200 -@@ -315,6 +315,7 @@ - event.TouchInput.ID = AMotionEvent_getPointerId(androidEvent, i); - event.TouchInput.X = AMotionEvent_getX(androidEvent, i); - event.TouchInput.Y = AMotionEvent_getY(androidEvent, i); -+ event.TouchInput.touchedCount = AMotionEvent_getPointerCount(androidEvent); - - device->postEventFromUser(event); - } -@@ -326,6 +327,7 @@ - event.TouchInput.ID = AMotionEvent_getPointerId(androidEvent, pointerIndex); - event.TouchInput.X = AMotionEvent_getX(androidEvent, pointerIndex); - event.TouchInput.Y = AMotionEvent_getY(androidEvent, pointerIndex); -+ event.TouchInput.touchedCount = AMotionEvent_getPointerCount(androidEvent); - - device->postEventFromUser(event); - } diff -Nru minetest-5.2.0/build/android/patches/libvorbis-libogg-fpu.patch minetest-5.3.0/build/android/patches/libvorbis-libogg-fpu.patch --- minetest-5.2.0/build/android/patches/libvorbis-libogg-fpu.patch 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/patches/libvorbis-libogg-fpu.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ ---- libvorbis-libogg-android/jni/libvorbis-jni/Android.mk.orig 2014-06-17 19:22:50.621559073 +0200 -+++ libvorbis-libogg-android/jni/libvorbis-jni/Android.mk 2014-06-17 19:38:20.641581140 +0200 -@@ -4,9 +4,6 @@ - - LOCAL_MODULE := vorbis-jni - LOCAL_CFLAGS += -I$(LOCAL_PATH)/../include -fsigned-char --ifeq ($(TARGET_ARCH),arm) -- LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp --endif - - LOCAL_SHARED_LIBRARIES := libogg libvorbis - ---- libvorbis-libogg-android/jni/libvorbis/Android.mk.orig 2014-06-17 19:22:39.077558797 +0200 -+++ libvorbis-libogg-android/jni/libvorbis/Android.mk 2014-06-17 19:38:52.121581887 +0200 -@@ -4,9 +4,6 @@ - - LOCAL_MODULE := libvorbis - LOCAL_CFLAGS += -I$(LOCAL_PATH)/../include -ffast-math -fsigned-char --ifeq ($(TARGET_ARCH),arm) -- LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp --endif - LOCAL_SHARED_LIBRARIES := libogg - - LOCAL_SRC_FILES := \ ---- libvorbis-libogg-android/jni/libogg/Android.mk.orig 2014-06-17 19:22:33.965558675 +0200 -+++ libvorbis-libogg-android/jni/libogg/Android.mk 2014-06-17 19:38:25.337581252 +0200 -@@ -4,10 +4,6 @@ - - LOCAL_MODULE := libogg - LOCAL_CFLAGS += -I$(LOCAL_PATH)/../include -ffast-math -fsigned-char --ifeq ($(TARGET_ARCH),arm) -- LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp --endif -- - - LOCAL_SRC_FILES := \ - bitwise.c \ diff -Nru minetest-5.2.0/build/android/patches/openssl_arch.patch minetest-5.3.0/build/android/patches/openssl_arch.patch --- minetest-5.2.0/build/android/patches/openssl_arch.patch 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/patches/openssl_arch.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ ---- openssl-1.0.2e.orig/Configure 2015-12-03 15:04:23.000000000 +0100 -+++ openssl-1.0.2e/Configure 2015-12-14 21:01:40.351265968 +0100 -@@ -464,8 +464,10 @@ - # Android: linux-* but without pointers to headers and libs. - "android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", - "android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", -+"android-arm","gcc:-march=armv4 -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", - "android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", - "android-mips","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", -+"android-mips32","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", - - #### *BSD [do see comment about ${BSDthreads} above!] - "BSD-generic32","gcc:-O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", diff -Nru minetest-5.2.0/build/android/settings.gradle minetest-5.3.0/build/android/settings.gradle --- minetest-5.2.0/build/android/settings.gradle 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/settings.gradle 2020-07-09 21:13:20.000000000 +0000 @@ -1 +1,2 @@ rootProject.name = "Minetest" +include ':app', ':native' diff -Nru minetest-5.2.0/build/android/src/main/AndroidManifest.xml minetest-5.3.0/build/android/src/main/AndroidManifest.xml --- minetest-5.2.0/build/android/src/main/AndroidManifest.xml 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/src/main/AndroidManifest.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru minetest-5.2.0/build/android/src/main/java/net.minetest.minetest/MainActivity.java minetest-5.3.0/build/android/src/main/java/net.minetest.minetest/MainActivity.java --- minetest-5.2.0/build/android/src/main/java/net.minetest.minetest/MainActivity.java 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/src/main/java/net.minetest.minetest/MainActivity.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,77 +0,0 @@ -package net.minetest.minetest; - -import android.Manifest; -import android.app.Activity; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.os.Build; -import android.os.Bundle; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class MainActivity extends Activity { - private final static int PERMISSIONS = 1; - private static final String[] REQUIRED_SDK_PERMISSIONS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - checkPermission(); - } else { - next(); - } - } - - private void checkPermission() { - final List missingPermissions = new ArrayList<>(); - // check required permission - for (final String permission : REQUIRED_SDK_PERMISSIONS) { - final int result = ContextCompat.checkSelfPermission(this, permission); - if (result != PackageManager.PERMISSION_GRANTED) { - missingPermissions.add(permission); - } - } - if (!missingPermissions.isEmpty()) { - // request permission - final String[] permissions = missingPermissions - .toArray(new String[0]); - ActivityCompat.requestPermissions(this, permissions, PERMISSIONS); - } else { - final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length]; - Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED); - onRequestPermissionsResult(PERMISSIONS, REQUIRED_SDK_PERMISSIONS, - grantResults); - } - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, - @NonNull int[] grantResults) { - if (requestCode == PERMISSIONS) { - for (int index = 0; index < permissions.length; index++) { - if (grantResults[index] != PackageManager.PERMISSION_GRANTED) { - // permission not granted - toast and exit - Toast.makeText(this, R.string.not_granted, Toast.LENGTH_LONG).show(); - finish(); - return; - } - } - // permission were granted - run - next(); - } - } - - private void next() { - Intent intent = new Intent(this, MtNativeActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); - startActivity(intent); - } -} diff -Nru minetest-5.2.0/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java minetest-5.3.0/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java --- minetest-5.2.0/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,371 +0,0 @@ -package net.minetest.minetest; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.res.AssetFileDescriptor; -import android.os.AsyncTask; -import android.os.Build; -import android.os.Bundle; -import android.os.Environment; -import android.util.Log; -import android.view.Display; -import android.view.View; -import android.widget.ProgressBar; -import android.widget.TextView; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.util.Vector; - -public class MinetestAssetCopy extends Activity { - private ProgressBar m_ProgressBar; - private TextView m_Filename; - private copyAssetTask m_AssetCopy; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.assetcopy); - m_ProgressBar = findViewById(R.id.progressBar1); - m_Filename = findViewById(R.id.textView1); - Display display = getWindowManager().getDefaultDisplay(); - m_ProgressBar.getLayoutParams().width = (int) (display.getWidth() * 0.8); - m_ProgressBar.invalidate(); - - /* check if there's already a copy in progress and reuse in case it is*/ - MinetestAssetCopy prevActivity = - (MinetestAssetCopy) getLastNonConfigurationInstance(); - if (prevActivity != null) { - m_AssetCopy = prevActivity.m_AssetCopy; - } else { - m_AssetCopy = new copyAssetTask(); - m_AssetCopy.execute(); - } - } - - @Override - protected void onResume() { - super.onResume(); - makeFullScreen(); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - if (m_AssetCopy != null) { - m_AssetCopy.cancel(true); - } - } - - private void makeFullScreen() { - if (Build.VERSION.SDK_INT >= 19) - this.getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); - } - - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (hasFocus) - makeFullScreen(); - } - - /* preserve asset copy background task to prevent restart of copying */ - /* this way of doing it is not recommended for latest android version */ - /* but the recommended way isn't available on android 2.x */ - public Object onRetainNonConfigurationInstance() { - return this; - } - - @SuppressLint("StaticFieldLeak") - private class copyAssetTask extends AsyncTask { - boolean m_copy_started = false; - String m_Foldername = "media"; - Vector m_foldernames; - Vector m_filenames; - Vector m_tocopy; - Vector m_asset_size_unknown; - - private long getFullSize(String filename) { - long size = 0; - try { - InputStream src = getAssets().open(filename); - byte[] buf = new byte[4096]; - - int len; - while ((len = src.read(buf)) > 0) { - size += len; - } - } catch (IOException e) { - e.printStackTrace(); - } - return size; - } - - @Override - protected String doInBackground(String... files) { - m_foldernames = new Vector<>(); - m_filenames = new Vector<>(); - m_tocopy = new Vector<>(); - m_asset_size_unknown = new Vector<>(); - String baseDir = - Environment.getExternalStorageDirectory().getAbsolutePath() - + "/"; - - - // prepare temp folder - File TempFolder = new File(baseDir + "Minetest/tmp/"); - - if (!TempFolder.exists()) { - TempFolder.mkdir(); - } else { - File[] todel = TempFolder.listFiles(); - - for (File file : todel) { - Log.v("MinetestAssetCopy", "deleting: " + file.getAbsolutePath()); - file.delete(); - } - } - - // add a .nomedia file - try { - OutputStream dst = new FileOutputStream(baseDir + "Minetest/.nomedia"); - dst.close(); - } catch (IOException e) { - Log.e("MinetestAssetCopy", "Failed to create .nomedia file"); - e.printStackTrace(); - } - - - // build lists from prepared data - BuildFolderList(); - BuildFileList(); - - // scan filelist - ProcessFileList(); - - // doing work - m_copy_started = true; - m_ProgressBar.setMax(m_tocopy.size()); - - for (int i = 0; i < m_tocopy.size(); i++) { - try { - String filename = m_tocopy.get(i); - publishProgress(i); - - boolean asset_size_unknown = false; - long filesize = -1; - - if (m_asset_size_unknown.contains(filename)) { - File testme = new File(baseDir + "/" + filename); - - if (testme.exists()) - filesize = testme.length(); - - asset_size_unknown = true; - } - - InputStream src; - try { - src = getAssets().open(filename); - } catch (IOException e) { - Log.e("MinetestAssetCopy", "Copying file: " + filename + " FAILED (not in assets)"); - e.printStackTrace(); - continue; - } - - // Transfer bytes from in to out - byte[] buf = new byte[1024]; - int len = src.read(buf, 0, 1024); - - /* following handling is crazy but we need to deal with */ - /* compressed assets.Flash chips limited livetime due to */ - /* write operations, we can't allow large files to destroy */ - /* users flash. */ - if (asset_size_unknown) { - if ((len > 0) && (len < buf.length) && (len == filesize)) { - src.close(); - continue; - } - - if (len == buf.length) { - src.close(); - long size = getFullSize(filename); - if (size == filesize) { - continue; - } - src = getAssets().open(filename); - len = src.read(buf, 0, 1024); - } - } - if (len > 0) { - int total_filesize = 0; - OutputStream dst; - try { - dst = new FileOutputStream(baseDir + "/" + filename); - } catch (IOException e) { - Log.e("MinetestAssetCopy", "Copying file: " + baseDir + - "/" + filename + " FAILED (couldn't open output file)"); - e.printStackTrace(); - src.close(); - continue; - } - dst.write(buf, 0, len); - total_filesize += len; - - while ((len = src.read(buf)) > 0) { - dst.write(buf, 0, len); - total_filesize += len; - } - - dst.close(); - Log.v("MinetestAssetCopy", "Copied file: " + - m_tocopy.get(i) + " (" + total_filesize + - " bytes)"); - } else if (len < 0) { - Log.e("MinetestAssetCopy", "Copying file: " + - m_tocopy.get(i) + " failed, size < 0"); - } - src.close(); - } catch (IOException e) { - Log.e("MinetestAssetCopy", "Copying file: " + - m_tocopy.get(i) + " failed"); - e.printStackTrace(); - } - } - return ""; - } - - /** - * update progress bar - */ - protected void onProgressUpdate(Integer... progress) { - - if (m_copy_started) { - String todisplay = m_tocopy.get(progress[0]); - m_ProgressBar.setProgress(progress[0]); - m_Filename.setText(todisplay); - } else { - String todisplay = m_Foldername; - String full_text = "scanning " + todisplay + " ..."; - m_Filename.setText(full_text); - } - } - - /** - * check all files and folders in filelist - */ - void ProcessFileList() { - String FlashBaseDir = - Environment.getExternalStorageDirectory().getAbsolutePath(); - - for (String current_path : m_filenames) { - String FlashPath = FlashBaseDir + "/" + current_path; - - if (isAssetFolder(current_path)) { - /* store information and update gui */ - m_Foldername = current_path; - publishProgress(0); - - /* open file in order to check if it's a folder */ - File current_folder = new File(FlashPath); - if (!current_folder.exists()) { - if (!current_folder.mkdirs()) { - Log.e("MinetestAssetCopy", "\t failed create folder: " + - FlashPath); - } else { - Log.v("MinetestAssetCopy", "\t created folder: " + - FlashPath); - } - } - - continue; - } - - /* if it's not a folder it's most likely a file */ - boolean refresh = true; - - File testme = new File(FlashPath); - - long asset_filesize = -1; - long stored_filesize; - - if (testme.exists()) { - try { - AssetFileDescriptor fd = getAssets().openFd(current_path); - asset_filesize = fd.getLength(); - fd.close(); - } catch (IOException e) { - m_asset_size_unknown.add(current_path); - Log.e("MinetestAssetCopy", "Failed to open asset file \"" + - FlashPath + "\" for size check"); - } - - stored_filesize = testme.length(); - - if (asset_filesize == stored_filesize) - refresh = false; - - } - - if (refresh) - m_tocopy.add(current_path); - } - } - - /** - * read list of folders prepared on package build - */ - void BuildFolderList() { - try { - InputStream is = getAssets().open("index.txt"); - BufferedReader reader = new BufferedReader(new InputStreamReader(is)); - - String line = reader.readLine(); - while (line != null) { - m_foldernames.add(line); - line = reader.readLine(); - } - is.close(); - } catch (IOException e1) { - Log.e("MinetestAssetCopy", "Error on processing index.txt"); - e1.printStackTrace(); - } - } - - /** - * read list of asset files prepared on package build - */ - void BuildFileList() { - long entrycount = 0; - try { - InputStream is = getAssets().open("filelist.txt"); - BufferedReader reader = new BufferedReader(new InputStreamReader(is)); - - String line = reader.readLine(); - while (line != null) { - m_filenames.add(line); - line = reader.readLine(); - entrycount++; - } - is.close(); - } catch (IOException e1) { - Log.e("MinetestAssetCopy", "Error on processing filelist.txt"); - e1.printStackTrace(); - } - } - - protected void onPostExecute(String result) { - finish(); - } - - boolean isAssetFolder(String path) { - return m_foldernames.contains(path); - } - } -} diff -Nru minetest-5.2.0/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java minetest-5.3.0/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java --- minetest-5.2.0/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -package net.minetest.minetest; - -import android.app.Activity; -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.os.Bundle; -import android.text.InputType; -import android.view.KeyEvent; -import android.view.View; -import android.view.View.OnKeyListener; -import android.widget.EditText; - -public class MinetestTextEntry extends Activity { - private final int MultiLineTextInput = 1; - private final int SingleLineTextInput = 2; - private final int SingleLinePasswordInput = 3; - private AlertDialog mTextInputDialog; - private EditText mTextInputWidget; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Bundle b = getIntent().getExtras(); - String acceptButton = b.getString("EnterButton"); - String hint = b.getString("hint"); - String current = b.getString("current"); - int editType = b.getInt("editType"); - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - mTextInputWidget = new EditText(this); - mTextInputWidget.setHint(hint); - mTextInputWidget.setText(current); - mTextInputWidget.setMinWidth(300); - if (editType == SingleLinePasswordInput) { - mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - } else { - mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT); - } - - builder.setView(mTextInputWidget); - - if (editType == MultiLineTextInput) { - builder.setPositiveButton(acceptButton, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - pushResult(mTextInputWidget.getText().toString()); - } - }); - } - - builder.setOnCancelListener(new DialogInterface.OnCancelListener() { - public void onCancel(DialogInterface dialog) { - cancelDialog(); - } - }); - - mTextInputWidget.setOnKeyListener(new OnKeyListener() { - @Override - public boolean onKey(View view, int KeyCode, KeyEvent event) { - if (KeyCode == KeyEvent.KEYCODE_ENTER) { - - pushResult(mTextInputWidget.getText().toString()); - return true; - } - return false; - } - }); - - mTextInputDialog = builder.create(); - mTextInputDialog.show(); - } - - private void pushResult(String text) { - Intent resultData = new Intent(); - resultData.putExtra("text", text); - setResult(Activity.RESULT_OK, resultData); - mTextInputDialog.dismiss(); - finish(); - } - - private void cancelDialog() { - setResult(Activity.RESULT_CANCELED); - mTextInputDialog.dismiss(); - finish(); - } -} diff -Nru minetest-5.2.0/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java minetest-5.3.0/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java --- minetest-5.2.0/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ -package net.minetest.minetest; - -import android.app.NativeActivity; -import android.content.Intent; -import android.os.Build; -import android.os.Bundle; -import android.view.View; -import android.view.WindowManager; - -public class MtNativeActivity extends NativeActivity { - - static { - System.loadLibrary("c++_shared"); - System.loadLibrary("openal"); - System.loadLibrary("ogg"); - System.loadLibrary("vorbis"); - System.loadLibrary("iconv"); - System.loadLibrary("minetest"); - } - - private int m_MessagReturnCode; - private String m_MessageReturnValue; - - public static native void putMessageBoxResult(String text); - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - m_MessagReturnCode = -1; - m_MessageReturnValue = ""; - } - - @Override - protected void onResume() { - super.onResume(); - makeFullScreen(); - } - - private void makeFullScreen() { - if (Build.VERSION.SDK_INT >= 19) - this.getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); - } - - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (hasFocus) - makeFullScreen(); - } - - public void copyAssets() { - Intent intent = new Intent(this, MinetestAssetCopy.class); - startActivity(intent); - } - - public void showDialog(String acceptButton, String hint, String current, - int editType) { - - Intent intent = new Intent(this, MinetestTextEntry.class); - Bundle params = new Bundle(); - params.putString("acceptButton", acceptButton); - params.putString("hint", hint); - params.putString("current", current); - params.putInt("editType", editType); - intent.putExtras(params); - startActivityForResult(intent, 101); - m_MessageReturnValue = ""; - m_MessagReturnCode = -1; - } - - /* ugly code to workaround putMessageBoxResult not beeing found */ - public int getDialogState() { - return m_MessagReturnCode; - } - - public String getDialogValue() { - m_MessagReturnCode = -1; - return m_MessageReturnValue; - } - - public float getDensity() { - return getResources().getDisplayMetrics().density; - } - - public int getDisplayWidth() { - return getResources().getDisplayMetrics().widthPixels; - } - - public int getDisplayHeight() { - return getResources().getDisplayMetrics().heightPixels; - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, - Intent data) { - if (requestCode == 101) { - if (resultCode == RESULT_OK) { - String text = data.getStringExtra("text"); - m_MessagReturnCode = 0; - m_MessageReturnValue = text; - } else { - m_MessagReturnCode = 1; - } - } - } -} Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/build/android/src/main/res/drawable/background.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/build/android/src/main/res/drawable/background.png differ diff -Nru minetest-5.2.0/build/android/src/main/res/drawable/bg.xml minetest-5.3.0/build/android/src/main/res/drawable/bg.xml --- minetest-5.2.0/build/android/src/main/res/drawable/bg.xml 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/src/main/res/drawable/bg.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ - - \ No newline at end of file diff -Nru minetest-5.2.0/build/android/src/main/res/layout/assetcopy.xml minetest-5.3.0/build/android/src/main/res/layout/assetcopy.xml --- minetest-5.2.0/build/android/src/main/res/layout/assetcopy.xml 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/src/main/res/layout/assetcopy.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ - - - - - - - - Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/build/android/src/main/res/mipmap/ic_launcher.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/build/android/src/main/res/mipmap/ic_launcher.png differ diff -Nru minetest-5.2.0/build/android/src/main/res/values/strings.xml minetest-5.3.0/build/android/src/main/res/values/strings.xml --- minetest-5.2.0/build/android/src/main/res/values/strings.xml 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/src/main/res/values/strings.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ - - - Preparing media… - Required permission wasn\'t granted, Minetest can\'t run without it - \ No newline at end of file diff -Nru minetest-5.2.0/build/android/src/main/res/values/styles.xml minetest-5.3.0/build/android/src/main/res/values/styles.xml --- minetest-5.2.0/build/android/src/main/res/values/styles.xml 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/src/main/res/values/styles.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ - - - - - - - - diff -Nru minetest-5.2.0/build/android/src/main/res/values-v21/styles.xml minetest-5.3.0/build/android/src/main/res/values-v21/styles.xml --- minetest-5.2.0/build/android/src/main/res/values-v21/styles.xml 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/build/android/src/main/res/values-v21/styles.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ - - - - - - - - diff -Nru minetest-5.2.0/builtin/common/async_event.lua minetest-5.3.0/builtin/common/async_event.lua --- minetest-5.2.0/builtin/common/async_event.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/common/async_event.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ - -core.async_jobs = {} - -local function handle_job(jobid, serialized_retval) - local retval = core.deserialize(serialized_retval) - assert(type(core.async_jobs[jobid]) == "function") - core.async_jobs[jobid](retval) - core.async_jobs[jobid] = nil -end - -if core.register_globalstep then - core.register_globalstep(function(dtime) - for i, job in ipairs(core.get_finished_jobs()) do - handle_job(job.jobid, job.retval) - end - end) -else - core.async_event_handler = handle_job -end - -function core.handle_async(func, parameter, callback) - -- Serialize function - local serialized_func = string.dump(func) - - assert(serialized_func ~= nil) - - -- Serialize parameters - local serialized_param = core.serialize(parameter) - - if serialized_param == nil then - return false - end - - local jobid = core.do_async_callback(serialized_func, serialized_param) - - core.async_jobs[jobid] = callback - - return true -end - diff -Nru minetest-5.2.0/builtin/common/misc_helpers.lua minetest-5.3.0/builtin/common/misc_helpers.lua --- minetest-5.2.0/builtin/common/misc_helpers.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/common/misc_helpers.lua 2020-07-09 21:13:20.000000000 +0000 @@ -20,6 +20,8 @@ -- dump's output is intended for humans. --elseif tp == "function" then -- return string.format("loadstring(%q)", string.dump(o)) + elseif tp == "userdata" then + return tostring(o) else return string.format("<%s>", tp) end @@ -290,7 +292,8 @@ return end local undef = core.registered_nodes[unode.name] - if undef and undef.on_rightclick then + local sneaking = placer and placer:get_player_control().sneak + if undef and undef.on_rightclick and not sneaking then return undef.on_rightclick(pointed_thing.under, unode, placer, itemstack, pointed_thing) end @@ -344,18 +347,12 @@ --Wrapper for rotate_and_place() to check for sneak and assume Creative mode --implies infinite stacks when performing a 6d rotation. -------------------------------------------------------------------------------- - local creative_mode_cache = core.settings:get_bool("creative_mode") - local function is_creative(name) - return creative_mode_cache or - core.check_player_privs(name, {creative = true}) - end - core.rotate_node = function(itemstack, placer, pointed_thing) local name = placer and placer:get_player_name() or "" local invert_wall = placer and placer:get_player_control().sneak or false return core.rotate_and_place(itemstack, placer, pointed_thing, - is_creative(name), - {invert_wall = invert_wall}, true) + core.is_creative_enabled(name), + {invert_wall = invert_wall}, true) end end diff -Nru minetest-5.2.0/builtin/common/serialize.lua minetest-5.3.0/builtin/common/serialize.lua --- minetest-5.2.0/builtin/common/serialize.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/common/serialize.lua 2020-07-09 21:13:20.000000000 +0000 @@ -120,15 +120,8 @@ elseif tp == "function" then return string.format("loadstring(%q)", string.dump(x)) elseif tp == "number" then - -- Serialize integers with string.format to prevent - -- scientific notation, which doesn't preserve - -- precision and breaks things like node position - -- hashes. Serialize floats normally. - if math.floor(x) == x then - return string.format("%d", x) - else - return tostring(x) - end + -- Serialize numbers reversibly with string.format + return string.format("%.17g", x) elseif tp == "table" then local vals = {} local idx_dumped = {} diff -Nru minetest-5.2.0/builtin/common/tests/serialize_spec.lua minetest-5.3.0/builtin/common/tests/serialize_spec.lua --- minetest-5.2.0/builtin/common/tests/serialize_spec.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/common/tests/serialize_spec.lua 2020-07-09 21:13:20.000000000 +0000 @@ -18,6 +18,18 @@ assert.same(test_in, test_out) end) + it("handles precise numbers", function() + local test_in = 0.2695949158945771 + local test_out = core.deserialize(core.serialize(test_in)) + assert.same(test_in, test_out) + end) + + it("handles big integers", function() + local test_in = 269594915894577 + local test_out = core.deserialize(core.serialize(test_in)) + assert.same(test_in, test_out) + end) + it("handles recursive structures", function() local test_in = { hello = "world" } test_in.foo = test_in diff -Nru minetest-5.2.0/builtin/common/tests/vector_spec.lua minetest-5.3.0/builtin/common/tests/vector_spec.lua --- minetest-5.2.0/builtin/common/tests/vector_spec.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/common/tests/vector_spec.lua 2020-07-09 21:13:20.000000000 +0000 @@ -43,4 +43,146 @@ it("add()", function() assert.same({ x = 2, y = 4, z = 6 }, vector.add(vector.new(1, 2, 3), { x = 1, y = 2, z = 3 })) end) + + -- This function is needed because of floating point imprecision. + local function almost_equal(a, b) + if type(a) == "number" then + return math.abs(a - b) < 0.00000000001 + end + return vector.distance(a, b) < 0.000000000001 + end + + describe("rotate_around_axis()", function() + it("rotates", function() + assert.True(almost_equal({x = -1, y = 0, z = 0}, + vector.rotate_around_axis({x = 1, y = 0, z = 0}, {x = 0, y = 1, z = 0}, math.pi))) + assert.True(almost_equal({x = 0, y = 1, z = 0}, + vector.rotate_around_axis({x = 0, y = 0, z = 1}, {x = 1, y = 0, z = 0}, math.pi / 2))) + assert.True(almost_equal({x = 4, y = 1, z = 1}, + vector.rotate_around_axis({x = 4, y = 1, z = 1}, {x = 4, y = 1, z = 1}, math.pi / 6))) + end) + it("keeps distance to axis", function() + local rotate1 = {x = 1, y = 3, z = 1} + local axis1 = {x = 1, y = 3, z = 2} + local rotated1 = vector.rotate_around_axis(rotate1, axis1, math.pi / 13) + assert.True(almost_equal(vector.distance(axis1, rotate1), vector.distance(axis1, rotated1))) + local rotate2 = {x = 1, y = 1, z = 3} + local axis2 = {x = 2, y = 6, z = 100} + local rotated2 = vector.rotate_around_axis(rotate2, axis2, math.pi / 23) + assert.True(almost_equal(vector.distance(axis2, rotate2), vector.distance(axis2, rotated2))) + local rotate3 = {x = 1, y = -1, z = 3} + local axis3 = {x = 2, y = 6, z = 100} + local rotated3 = vector.rotate_around_axis(rotate3, axis3, math.pi / 2) + assert.True(almost_equal(vector.distance(axis3, rotate3), vector.distance(axis3, rotated3))) + end) + it("rotates back", function() + local rotate1 = {x = 1, y = 3, z = 1} + local axis1 = {x = 1, y = 3, z = 2} + local rotated1 = vector.rotate_around_axis(rotate1, axis1, math.pi / 13) + rotated1 = vector.rotate_around_axis(rotated1, axis1, -math.pi / 13) + assert.True(almost_equal(rotate1, rotated1)) + local rotate2 = {x = 1, y = 1, z = 3} + local axis2 = {x = 2, y = 6, z = 100} + local rotated2 = vector.rotate_around_axis(rotate2, axis2, math.pi / 23) + rotated2 = vector.rotate_around_axis(rotated2, axis2, -math.pi / 23) + assert.True(almost_equal(rotate2, rotated2)) + local rotate3 = {x = 1, y = -1, z = 3} + local axis3 = {x = 2, y = 6, z = 100} + local rotated3 = vector.rotate_around_axis(rotate3, axis3, math.pi / 2) + rotated3 = vector.rotate_around_axis(rotated3, axis3, -math.pi / 2) + assert.True(almost_equal(rotate3, rotated3)) + end) + it("is right handed", function() + local v_before1 = {x = 0, y = 1, z = -1} + local v_after1 = vector.rotate_around_axis(v_before1, {x = 1, y = 0, z = 0}, math.pi / 4) + assert.True(almost_equal(vector.normalize(vector.cross(v_after1, v_before1)), {x = 1, y = 0, z = 0})) + + local v_before2 = {x = 0, y = 3, z = 4} + local v_after2 = vector.rotate_around_axis(v_before2, {x = 1, y = 0, z = 0}, 2 * math.pi / 5) + assert.True(almost_equal(vector.normalize(vector.cross(v_after2, v_before2)), {x = 1, y = 0, z = 0})) + + local v_before3 = {x = 1, y = 0, z = -1} + local v_after3 = vector.rotate_around_axis(v_before3, {x = 0, y = 1, z = 0}, math.pi / 4) + assert.True(almost_equal(vector.normalize(vector.cross(v_after3, v_before3)), {x = 0, y = 1, z = 0})) + + local v_before4 = {x = 3, y = 0, z = 4} + local v_after4 = vector.rotate_around_axis(v_before4, {x = 0, y = 1, z = 0}, 2 * math.pi / 5) + assert.True(almost_equal(vector.normalize(vector.cross(v_after4, v_before4)), {x = 0, y = 1, z = 0})) + + local v_before5 = {x = 1, y = -1, z = 0} + local v_after5 = vector.rotate_around_axis(v_before5, {x = 0, y = 0, z = 1}, math.pi / 4) + assert.True(almost_equal(vector.normalize(vector.cross(v_after5, v_before5)), {x = 0, y = 0, z = 1})) + + local v_before6 = {x = 3, y = 4, z = 0} + local v_after6 = vector.rotate_around_axis(v_before6, {x = 0, y = 0, z = 1}, 2 * math.pi / 5) + assert.True(almost_equal(vector.normalize(vector.cross(v_after6, v_before6)), {x = 0, y = 0, z = 1})) + end) + end) + + describe("rotate()", function() + it("rotates", function() + assert.True(almost_equal({x = -1, y = 0, z = 0}, + vector.rotate({x = 1, y = 0, z = 0}, {x = 0, y = math.pi, z = 0}))) + assert.True(almost_equal({x = 0, y = -1, z = 0}, + vector.rotate({x = 1, y = 0, z = 0}, {x = 0, y = 0, z = math.pi / 2}))) + assert.True(almost_equal({x = 1, y = 0, z = 0}, + vector.rotate({x = 1, y = 0, z = 0}, {x = math.pi / 123, y = 0, z = 0}))) + end) + it("is counterclockwise", function() + local v_before1 = {x = 0, y = 1, z = -1} + local v_after1 = vector.rotate(v_before1, {x = math.pi / 4, y = 0, z = 0}) + assert.True(almost_equal(vector.normalize(vector.cross(v_after1, v_before1)), {x = 1, y = 0, z = 0})) + + local v_before2 = {x = 0, y = 3, z = 4} + local v_after2 = vector.rotate(v_before2, {x = 2 * math.pi / 5, y = 0, z = 0}) + assert.True(almost_equal(vector.normalize(vector.cross(v_after2, v_before2)), {x = 1, y = 0, z = 0})) + + local v_before3 = {x = 1, y = 0, z = -1} + local v_after3 = vector.rotate(v_before3, {x = 0, y = math.pi / 4, z = 0}) + assert.True(almost_equal(vector.normalize(vector.cross(v_after3, v_before3)), {x = 0, y = 1, z = 0})) + + local v_before4 = {x = 3, y = 0, z = 4} + local v_after4 = vector.rotate(v_before4, {x = 0, y = 2 * math.pi / 5, z = 0}) + assert.True(almost_equal(vector.normalize(vector.cross(v_after4, v_before4)), {x = 0, y = 1, z = 0})) + + local v_before5 = {x = 1, y = -1, z = 0} + local v_after5 = vector.rotate(v_before5, {x = 0, y = 0, z = math.pi / 4}) + assert.True(almost_equal(vector.normalize(vector.cross(v_after5, v_before5)), {x = 0, y = 0, z = 1})) + + local v_before6 = {x = 3, y = 4, z = 0} + local v_after6 = vector.rotate(v_before6, {x = 0, y = 0, z = 2 * math.pi / 5}) + assert.True(almost_equal(vector.normalize(vector.cross(v_after6, v_before6)), {x = 0, y = 0, z = 1})) + end) + end) + + it("dir_to_rotation()", function() + -- Comparing rotations (pitch, yaw, roll) is hard because of certain ambiguities, + -- e.g. (pi, 0, pi) looks exactly the same as (0, pi, 0) + -- So instead we convert the rotation back to vectors and compare these. + local function forward_at_rot(rot) + return vector.rotate(vector.new(0, 0, 1), rot) + end + local function up_at_rot(rot) + return vector.rotate(vector.new(0, 1, 0), rot) + end + local rot1 = vector.dir_to_rotation({x = 1, y = 0, z = 0}, {x = 0, y = 1, z = 0}) + assert.True(almost_equal({x = 1, y = 0, z = 0}, forward_at_rot(rot1))) + assert.True(almost_equal({x = 0, y = 1, z = 0}, up_at_rot(rot1))) + local rot2 = vector.dir_to_rotation({x = 1, y = 1, z = 0}, {x = 0, y = 0, z = 1}) + assert.True(almost_equal({x = 1/math.sqrt(2), y = 1/math.sqrt(2), z = 0}, forward_at_rot(rot2))) + assert.True(almost_equal({x = 0, y = 0, z = 1}, up_at_rot(rot2))) + for i = 1, 1000 do + local rand_vec = vector.new(math.random(), math.random(), math.random()) + if vector.length(rand_vec) ~= 0 then + local rot_1 = vector.dir_to_rotation(rand_vec) + local rot_2 = { + x = math.atan2(rand_vec.y, math.sqrt(rand_vec.z * rand_vec.z + rand_vec.x * rand_vec.x)), + y = -math.atan2(rand_vec.x, rand_vec.z), + z = 0 + } + assert.True(almost_equal(rot_1, rot_2)) + end + end + + end) end) diff -Nru minetest-5.2.0/builtin/common/vector.lua minetest-5.3.0/builtin/common/vector.lua --- minetest-5.2.0/builtin/common/vector.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/common/vector.lua 2020-07-09 21:13:20.000000000 +0000 @@ -141,3 +141,96 @@ return {x = math.min(a.x, b.x), y = math.min(a.y, b.y), z = math.min(a.z, b.z)}, {x = math.max(a.x, b.x), y = math.max(a.y, b.y), z = math.max(a.z, b.z)} end + +local function sin(x) + if x % math.pi == 0 then + return 0 + else + return math.sin(x) + end +end + +local function cos(x) + if x % math.pi == math.pi / 2 then + return 0 + else + return math.cos(x) + end +end + +function vector.rotate_around_axis(v, axis, angle) + local cosangle = cos(angle) + local sinangle = sin(angle) + axis = vector.normalize(axis) + -- https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula + local dot_axis = vector.multiply(axis, vector.dot(axis, v)) + local cross = vector.cross(v, axis) + return vector.new( + cross.x * sinangle + (v.x - dot_axis.x) * cosangle + dot_axis.x, + cross.y * sinangle + (v.y - dot_axis.y) * cosangle + dot_axis.y, + cross.z * sinangle + (v.z - dot_axis.z) * cosangle + dot_axis.z + ) +end + +function vector.rotate(v, rot) + local sinpitch = sin(-rot.x) + local sinyaw = sin(-rot.y) + local sinroll = sin(-rot.z) + local cospitch = cos(rot.x) + local cosyaw = cos(rot.y) + local cosroll = math.cos(rot.z) + -- Rotation matrix that applies yaw, pitch and roll + local matrix = { + { + sinyaw * sinpitch * sinroll + cosyaw * cosroll, + sinyaw * sinpitch * cosroll - cosyaw * sinroll, + sinyaw * cospitch, + }, + { + cospitch * sinroll, + cospitch * cosroll, + -sinpitch, + }, + { + cosyaw * sinpitch * sinroll - sinyaw * cosroll, + cosyaw * sinpitch * cosroll + sinyaw * sinroll, + cosyaw * cospitch, + }, + } + -- Compute matrix multiplication: `matrix` * `v` + return vector.new( + matrix[1][1] * v.x + matrix[1][2] * v.y + matrix[1][3] * v.z, + matrix[2][1] * v.x + matrix[2][2] * v.y + matrix[2][3] * v.z, + matrix[3][1] * v.x + matrix[3][2] * v.y + matrix[3][3] * v.z + ) +end + +function vector.dir_to_rotation(forward, up) + forward = vector.normalize(forward) + local rot = {x = math.asin(forward.y), y = -math.atan2(forward.x, forward.z), z = 0} + if not up then + return rot + end + assert(vector.dot(forward, up) < 0.000001, + "Invalid vectors passed to vector.dir_to_rotation().") + up = vector.normalize(up) + -- Calculate vector pointing up with roll = 0, just based on forward vector. + local forwup = vector.rotate({x = 0, y = 1, z = 0}, rot) + -- 'forwup' and 'up' are now in a plane with 'forward' as normal. + -- The angle between them is the absolute of the roll value we're looking for. + rot.z = vector.angle(forwup, up) + + -- Since vector.angle never returns a negative value or a value greater + -- than math.pi, rot.z has to be inverted sometimes. + -- To determine wether this is the case, we rotate the up vector back around + -- the forward vector and check if it worked out. + local back = vector.rotate_around_axis(up, forward, -rot.z) + + -- We don't use vector.equals for this because of floating point imprecision. + if (back.x - forwup.x) * (back.x - forwup.x) + + (back.y - forwup.y) * (back.y - forwup.y) + + (back.z - forwup.z) * (back.z - forwup.z) > 0.0000001 then + rot.z = -rot.z + end + return rot +end diff -Nru minetest-5.2.0/builtin/fstk/dialog.lua minetest-5.3.0/builtin/fstk/dialog.lua --- minetest-5.2.0/builtin/fstk/dialog.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/fstk/dialog.lua 2020-07-09 21:13:20.000000000 +0000 @@ -67,3 +67,22 @@ ui.add(self) return self end + +function messagebox(name, message) + return dialog_create(name, + function() + return ([[ + formspec_version[3] + size[8,3] + textarea[0.375,0.375;7.25,1.2;;;%s] + button[3,1.825;2,0.8;ok;%s] + ]]):format(message, fgettext("OK")) + end, + function(this, fields) + if fields.ok then + this:delete() + return true + end + end, + nil) +end diff -Nru minetest-5.2.0/builtin/fstk/ui.lua minetest-5.3.0/builtin/fstk/ui.lua --- minetest-5.2.0/builtin/fstk/ui.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/fstk/ui.lua 2020-07-09 21:13:20.000000000 +0000 @@ -85,7 +85,7 @@ "box[0.5,1.2;13,5;#000]", ("textarea[0.5,1.2;13,5;;%s;%s]"):format( error_title, error_message), - "button[5,6.6;4,1;btn_error_confirm;" .. fgettext("Ok") .. "]" + "button[5,6.6;4,1;btn_error_confirm;" .. fgettext("OK") .. "]" } else local active_toplevel_ui_elements = 0 diff -Nru minetest-5.2.0/builtin/game/auth.lua minetest-5.3.0/builtin/game/auth.lua --- minetest-5.2.0/builtin/game/auth.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/auth.lua 2020-07-09 21:13:20.000000000 +0000 @@ -41,7 +41,6 @@ return { password = auth_entry.password, privileges = privileges, - -- Is set to nil if unknown last_login = auth_entry.last_login, } end, @@ -53,7 +52,7 @@ name = name, password = password, privileges = core.string_to_privs(core.settings:get("default_privs")), - last_login = os.time(), + last_login = -1, -- Defer login time calculation until record_login (called by on_joinplayer) }) end, delete_auth = function(name) diff -Nru minetest-5.2.0/builtin/game/chat.lua minetest-5.3.0/builtin/game/chat.lua --- minetest-5.2.0/builtin/game/chat.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/chat.lua 2020-07-09 21:13:20.000000000 +0000 @@ -239,57 +239,76 @@ end, }) +local function handle_revoke_command(caller, revokename, revokeprivstr) + local caller_privs = core.get_player_privs(caller) + if not (caller_privs.privs or caller_privs.basic_privs) then + return false, "Your privileges are insufficient." + end + + if not core.get_auth_handler().get_auth(revokename) then + return false, "Player " .. revokename .. " does not exist." + end + + local revokeprivs = core.string_to_privs(revokeprivstr) + local privs = core.get_player_privs(revokename) + local basic_privs = + core.string_to_privs(core.settings:get("basic_privs") or "interact,shout") + for priv, _ in pairs(revokeprivs) do + if not basic_privs[priv] and not caller_privs.privs then + return false, "Your privileges are insufficient." + end + end + + if revokeprivstr == "all" then + revokeprivs = privs + privs = {} + else + for priv, _ in pairs(revokeprivs) do + privs[priv] = nil + end + end + + for priv, _ in pairs(revokeprivs) do + -- call the on_revoke callbacks + core.run_priv_callbacks(revokename, priv, caller, "revoke") + end + + core.set_player_privs(revokename, privs) + core.log("action", caller..' revoked (' + ..core.privs_to_string(revokeprivs, ', ') + ..') privileges from '..revokename) + if revokename ~= caller then + core.chat_send_player(revokename, caller + .. " revoked privileges from you: " + .. core.privs_to_string(revokeprivs, ' ')) + end + return true, "Privileges of " .. revokename .. ": " + .. core.privs_to_string( + core.get_player_privs(revokename), ' ') +end + core.register_chatcommand("revoke", { params = " ( | all)", description = "Remove privileges from player", privs = {}, func = function(name, param) - if not core.check_player_privs(name, {privs=true}) and - not core.check_player_privs(name, {basic_privs=true}) then - return false, "Your privileges are insufficient." - end - local revoke_name, revoke_priv_str = string.match(param, "([^ ]+) (.+)") - if not revoke_name or not revoke_priv_str then + local revokename, revokeprivstr = string.match(param, "([^ ]+) (.+)") + if not revokename or not revokeprivstr then return false, "Invalid parameters (see /help revoke)" - elseif not core.get_auth_handler().get_auth(revoke_name) then - return false, "Player " .. revoke_name .. " does not exist." - end - local revoke_privs = core.string_to_privs(revoke_priv_str) - local privs = core.get_player_privs(revoke_name) - local basic_privs = - core.string_to_privs(core.settings:get("basic_privs") or "interact,shout") - for priv, _ in pairs(revoke_privs) do - if not basic_privs[priv] and - not core.check_player_privs(name, {privs=true}) then - return false, "Your privileges are insufficient." - end - end - if revoke_priv_str == "all" then - revoke_privs = privs - privs = {} - else - for priv, _ in pairs(revoke_privs) do - privs[priv] = nil - end - end - - for priv, _ in pairs(revoke_privs) do - -- call the on_revoke callbacks - core.run_priv_callbacks(revoke_name, priv, name, "revoke") end + return handle_revoke_command(name, revokename, revokeprivstr) + end, +}) - core.set_player_privs(revoke_name, privs) - core.log("action", name..' revoked (' - ..core.privs_to_string(revoke_privs, ', ') - ..') privileges from '..revoke_name) - if revoke_name ~= name then - core.chat_send_player(revoke_name, name - .. " revoked privileges from you: " - .. core.privs_to_string(revoke_privs, ' ')) +core.register_chatcommand("revokeme", { + params = " | all", + description = "Revoke privileges from yourself", + privs = {}, + func = function(name, param) + if param == "" then + return false, "Invalid parameters (see /help revokeme)" end - return true, "Privileges of " .. revoke_name .. ": " - .. core.privs_to_string( - core.get_player_privs(revoke_name), ' ') + return handle_revoke_command(name, name, param) end, }) @@ -424,6 +443,9 @@ end local teleportee = core.get_player_by_name(name) if teleportee then + if teleportee:get_attach() then + return false, "Can't teleport, you're attached to an object!" + end teleportee:set_pos(p) return true, "Teleporting to "..core.pos_to_string(p) end @@ -441,6 +463,9 @@ end if teleportee and p then + if teleportee:get_attach() then + return false, "Can't teleport, you're attached to an object!" + end p = find_free_position_near(p) teleportee:set_pos(p) return true, "Teleporting to " .. target_name @@ -461,6 +486,9 @@ teleportee = core.get_player_by_name(teleportee_name) end if teleportee and p.x and p.y and p.z then + if teleportee:get_attach() then + return false, "Can't teleport, player is attached to an object!" + end teleportee:set_pos(p) return true, "Teleporting " .. teleportee_name .. " to " .. core.pos_to_string(p) @@ -479,6 +507,9 @@ end end if teleportee and p then + if teleportee:get_attach() then + return false, "Can't teleport, player is attached to an object!" + end p = find_free_position_near(p) teleportee:set_pos(p) return true, "Teleporting " .. teleportee_name @@ -717,8 +748,9 @@ end end p.y = p.y + 1 - core.add_entity(p, entityname) - return true, ("%q spawned."):format(entityname) + local obj = core.add_entity(p, entityname) + local msg = obj and "%q spawned." or "%q failed to spawn." + return true, msg:format(entityname) end, }) @@ -757,7 +789,7 @@ params = "[] [] []", description = "Check who last touched a node or a node near it" .. " within the time specified by . Default: range = 0," - .. " seconds = 86400 = 24h, limit = 5", + .. " seconds = 86400 = 24h, limit = 5. Set to inf for no time limit", privs = {rollback=true}, func = function(name, param) if not core.settings:get_bool("enable_rollback_recording") then @@ -808,7 +840,7 @@ core.register_chatcommand("rollback", { params = "( []) | (: [])", - description = "Revert actions of a player. Default for is 60", + description = "Revert actions of a player. Default for is 60. Set to inf for no time limit", privs = {rollback=true}, func = function(name, param) if not core.settings:get_bool("enable_rollback_recording") then @@ -1036,7 +1068,7 @@ param = name end local pauth = core.get_auth_handler().get_auth(param) - if pauth and pauth.last_login then + if pauth and pauth.last_login and pauth.last_login ~= -1 then -- Time in UTC, ISO 8601 format return true, "Last login time was " .. os.date("!%Y-%m-%dT%H:%M:%SZ", pauth.last_login) diff -Nru minetest-5.2.0/builtin/game/constants.lua minetest-5.3.0/builtin/game/constants.lua --- minetest-5.2.0/builtin/game/constants.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/constants.lua 2020-07-09 21:13:20.000000000 +0000 @@ -24,7 +24,7 @@ -- Default maximal HP of a player core.PLAYER_MAX_HP_DEFAULT = 20 -- Default maximal breath of a player -core.PLAYER_MAX_BREATH_DEFAULT = 11 +core.PLAYER_MAX_BREATH_DEFAULT = 10 -- light.h -- Maximum value for node 'light_source' parameter diff -Nru minetest-5.2.0/builtin/game/deprecated.lua minetest-5.3.0/builtin/game/deprecated.lua --- minetest-5.2.0/builtin/game/deprecated.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/deprecated.lua 2020-07-09 21:13:20.000000000 +0000 @@ -70,3 +70,19 @@ core.setting_setbool = setting_proxy("set_bool") core.setting_getbool = setting_proxy("get_bool") core.setting_save = setting_proxy("write") + +-- +-- core.register_on_auth_fail +-- + +function core.register_on_auth_fail(func) + core.log("deprecated", "core.register_on_auth_fail " .. + "is obsolete and should be replaced by " .. + "core.register_on_authplayer instead.") + + core.register_on_authplayer(function (player_name, ip, is_success) + if not is_success then + func(player_name, ip) + end + end) +end diff -Nru minetest-5.2.0/builtin/game/falling.lua minetest-5.3.0/builtin/game/falling.lua --- minetest-5.2.0/builtin/game/falling.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/falling.lua 2020-07-09 21:13:20.000000000 +0000 @@ -30,6 +30,8 @@ {y = math.pi/2, x = math.pi, z = 0} } +local gravity = tonumber(core.settings:get("movement_gravity")) or 9.81 + -- -- Falling stuff -- @@ -41,12 +43,13 @@ textures = {}, physical = true, is_visible = false, - collide_with_objects = false, + collide_with_objects = true, collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, node = {}, meta = {}, + floats = false, set_node = function(self, node, meta) self.node = node @@ -71,6 +74,11 @@ return end self.meta = meta + + -- Cache whether we're supposed to float on water + self.floats = core.get_item_group(node.name, "float") ~= 0 + + -- Set entity visuals if def.drawtype == "torchlike" or def.drawtype == "signlike" then local textures if def.tiles and def.tiles[1] then @@ -101,6 +109,7 @@ if core.is_colored_paramtype(def.paramtype2) then itemstring = core.itemstring_with_palette(itemstring, node.param2) end + -- FIXME: solution needed for paramtype2 == "leveled" local vsize if def.visual_scale then local s = def.visual_scale * SCALE @@ -113,6 +122,25 @@ glow = def.light_source, }) end + + -- Set collision box (certain nodeboxes only for now) + local nb_types = {fixed=true, leveled=true, connected=true} + if def.drawtype == "nodebox" and def.node_box and + nb_types[def.node_box.type] then + local box = table.copy(def.node_box.fixed) + if type(box[1]) == "table" then + box = #box == 1 and box[1] or nil -- We can only use a single box + end + if box then + if def.paramtype2 == "leveled" and (self.node.level or 0) > 0 then + box[5] = -0.5 + self.node.level / 64 + end + self.object:set_properties({ + collisionbox = box + }) + end + end + -- Rotate entity if def.drawtype == "torchlike" then self.object:set_yaw(math.pi*0.25) @@ -172,6 +200,7 @@ on_activate = function(self, staticdata) self.object:set_armor_groups({immortal = 1}) + self.object:set_acceleration({x = 0, y = -gravity, z = 0}) local ds = core.deserialize(staticdata) if ds and ds.node then @@ -183,85 +212,159 @@ end end, - on_step = function(self, dtime) - -- Set gravity - local acceleration = self.object:get_acceleration() - if not vector.equals(acceleration, {x = 0, y = -10, z = 0}) then - self.object:set_acceleration({x = 0, y = -10, z = 0}) - end - -- Turn to actual node when colliding with ground, or continue to move - local pos = self.object:get_pos() - -- Position of bottom center point - local bcp = {x = pos.x, y = pos.y - 0.7, z = pos.z} - -- 'bcn' is nil for unloaded nodes - local bcn = core.get_node_or_nil(bcp) - -- Delete on contact with ignore at world edges - if bcn and bcn.name == "ignore" then - self.object:remove() - return + try_place = function(self, bcp, bcn) + local bcd = core.registered_nodes[bcn.name] + -- Add levels if dropped on same leveled node + if bcd and bcd.paramtype2 == "leveled" and + bcn.name == self.node.name then + local addlevel = self.node.level + if (addlevel or 0) <= 0 then + addlevel = bcd.leveled + end + if core.add_node_level(bcp, addlevel) < addlevel then + return true + elseif bcd.buildable_to then + -- Node level has already reached max, don't place anything + return true + end end - local bcd = bcn and core.registered_nodes[bcn.name] - if bcn and - (not bcd or bcd.walkable or - (core.get_item_group(self.node.name, "float") ~= 0 and - bcd.liquidtype ~= "none")) then - if bcd and bcd.leveled and - bcn.name == self.node.name then - local addlevel = self.node.level - if not addlevel or addlevel <= 0 then - addlevel = bcd.leveled + + -- Decide if we're replacing the node or placing on top + local np = vector.new(bcp) + if bcd and bcd.buildable_to and + (not self.floats or bcd.liquidtype == "none") then + core.remove_node(bcp) + else + np.y = np.y + 1 + end + + -- Check what's here + local n2 = core.get_node(np) + local nd = core.registered_nodes[n2.name] + -- If it's not air or liquid, remove node and replace it with + -- it's drops + if n2.name ~= "air" and (not nd or nd.liquidtype == "none") then + if nd and nd.buildable_to == false then + nd.on_dig(np, n2, nil) + -- If it's still there, it might be protected + if core.get_node(np).name == n2.name then + return false end - if core.add_node_level(bcp, addlevel) == 0 then + else + core.remove_node(np) + end + end + + -- Create node + local def = core.registered_nodes[self.node.name] + if def then + core.add_node(np, self.node) + if self.meta then + core.get_meta(np):from_table(self.meta) + end + if def.sounds and def.sounds.place then + core.sound_play(def.sounds.place, {pos = np}, true) + end + end + core.check_for_falling(np) + return true + end, + + on_step = function(self, dtime, moveresult) + -- Fallback code since collision detection can't tell us + -- about liquids (which do not collide) + if self.floats then + local pos = self.object:get_pos() + + local bcp = vector.round({x = pos.x, y = pos.y - 0.7, z = pos.z}) + local bcn = core.get_node(bcp) + + local bcd = core.registered_nodes[bcn.name] + if bcd and bcd.liquidtype ~= "none" then + if self:try_place(bcp, bcn) then self.object:remove() return end - elseif bcd and bcd.buildable_to and - (core.get_item_group(self.node.name, "float") == 0 or - bcd.liquidtype == "none") then - core.remove_node(bcp) - return - end - local np = {x = bcp.x, y = bcp.y + 1, z = bcp.z} - -- Check what's here - local n2 = core.get_node(np) - local nd = core.registered_nodes[n2.name] - -- If it's not air or liquid, remove node and replace it with - -- it's drops - if n2.name ~= "air" and (not nd or nd.liquidtype == "none") then - core.remove_node(np) - if nd and nd.buildable_to == false then - -- Add dropped items - local drops = core.get_node_drops(n2, "") - for _, dropped_item in pairs(drops) do - core.add_item(np, dropped_item) + end + end + + assert(moveresult) + if not moveresult.collides then + return -- Nothing to do :) + end + + local bcp, bcn + local player_collision + if moveresult.touching_ground then + for _, info in ipairs(moveresult.collisions) do + if info.type == "object" then + if info.axis == "y" and info.object:is_player() then + player_collision = info end - end - -- Run script hook - for _, callback in pairs(core.registered_on_dignodes) do - callback(np, n2) + elseif info.axis == "y" then + bcp = info.node_pos + bcn = core.get_node(bcp) + break end end - -- Create node and remove entity - local def = core.registered_nodes[self.node.name] - if def then - core.add_node(np, self.node) - if self.meta then - local meta = core.get_meta(np) - meta:from_table(self.meta) - end - if def.sounds and def.sounds.place then - core.sound_play(def.sounds.place, {pos = np}, true) - end + end + + if not bcp then + -- We're colliding with something, but not the ground. Irrelevant to us. + if player_collision then + -- Continue falling through players by moving a little into + -- their collision box + -- TODO: this hack could be avoided in the future if objects + -- could choose who to collide with + local vel = self.object:get_velocity() + self.object:set_velocity({ + x = vel.x, + y = player_collision.old_velocity.y, + z = vel.z + }) + self.object:set_pos(vector.add(self.object:get_pos(), + {x = 0, y = -0.5, z = 0})) end + return + elseif bcn.name == "ignore" then + -- Delete on contact with ignore at world edges self.object:remove() - core.check_for_falling(np) return end - local vel = self.object:get_velocity() - if vector.equals(vel, {x = 0, y = 0, z = 0}) then - local npos = self.object:get_pos() - self.object:set_pos(vector.round(npos)) + + local failure = false + + local pos = self.object:get_pos() + local distance = vector.apply(vector.subtract(pos, bcp), math.abs) + if distance.x >= 1 or distance.z >= 1 then + -- We're colliding with some part of a node that's sticking out + -- Since we don't want to visually teleport, drop as item + failure = true + elseif distance.y >= 2 then + -- Doors consist of a hidden top node and a bottom node that is + -- the actual door. Despite the top node being solid, the moveresult + -- almost always indicates collision with the bottom node. + -- Compensate for this by checking the top node + bcp.y = bcp.y + 1 + bcn = core.get_node(bcp) + local def = core.registered_nodes[bcn.name] + if not (def and def.walkable) then + failure = true -- This is unexpected, fail + end + end + + -- Try to actually place ourselves + if not failure then + failure = not self:try_place(bcp, bcn) + end + + if failure then + local drops = core.get_node_drops(self.node, "") + for _, item in pairs(drops) do + core.add_item(pos, item) + end end + self.object:remove() end }) @@ -270,6 +373,7 @@ if not obj then return false end + -- remember node level, the entities' set_node() uses this node.level = core.get_node_level(pos) local meta = core.get_meta(pos) local metatable = meta and meta:to_table() or {} @@ -355,18 +459,23 @@ -- Only spawn falling node if node below is loaded local n_bottom = core.get_node_or_nil(p_bottom) local d_bottom = n_bottom and core.registered_nodes[n_bottom.name] - if d_bottom and - - (core.get_item_group(n.name, "float") == 0 or - d_bottom.liquidtype == "none") and - - (n.name ~= n_bottom.name or (d_bottom.leveled and - core.get_node_level(p_bottom) < - core.get_node_max_level(p_bottom))) and - - (not d_bottom.walkable or d_bottom.buildable_to) then - convert_to_falling_node(p, n) - return true + if d_bottom then + local same = n.name == n_bottom.name + -- Let leveled nodes fall if it can merge with the bottom node + if same and d_bottom.paramtype2 == "leveled" and + core.get_node_level(p_bottom) < + core.get_node_max_level(p_bottom) then + convert_to_falling_node(p, n) + return true + end + -- Otherwise only if the bottom node is considered "fall through" + if not same and + (not d_bottom.walkable or d_bottom.buildable_to) and + (core.get_item_group(n.name, "float") == 0 or + d_bottom.liquidtype == "none") then + convert_to_falling_node(p, n) + return true + end end end diff -Nru minetest-5.2.0/builtin/game/features.lua minetest-5.3.0/builtin/game/features.lua --- minetest-5.2.0/builtin/game/features.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/features.lua 2020-07-09 21:13:20.000000000 +0000 @@ -16,6 +16,7 @@ formspec_version_element = true, area_store_persistent_ids = true, pathfinder_works = true, + object_step_has_moveresult = true, } function core.has_feature(arg) diff -Nru minetest-5.2.0/builtin/game/item_entity.lua minetest-5.3.0/builtin/game/item_entity.lua --- minetest-5.2.0/builtin/game/item_entity.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/item_entity.lua 2020-07-09 21:13:20.000000000 +0000 @@ -27,14 +27,11 @@ visual = "wielditem", visual_size = {x = 0.4, y = 0.4}, textures = {""}, - spritediv = {x = 1, y = 1}, - initial_sprite_basepos = {x = 0, y = 0}, is_visible = false, }, itemstring = "", moving_state = true, - slippery_state = false, physical_state = true, -- Item expiry age = 0, @@ -57,7 +54,6 @@ local max_count = stack:get_stack_max() local count = math.min(stack:get_count(), max_count) local size = 0.2 + 0.1 * (count / max_count) ^ (1 / 3) - local coll_height = size * 0.75 local def = core.registered_nodes[itemname] local glow = def and math.floor(def.light_source / 2 + 0.5) @@ -66,9 +62,7 @@ visual = "wielditem", textures = {itemname}, visual_size = {x = size, y = size}, - collisionbox = {-size, -coll_height, -size, - size, coll_height, size}, - selectionbox = {-size, -size, -size, size, size, size}, + collisionbox = {-size, -size, -size, size, size, size}, automatic_rotate = math.pi * 0.5 * 0.2 / size, wield_item = self.itemstring, glow = glow, @@ -157,7 +151,7 @@ end end, - on_step = function(self, dtime) + on_step = function(self, dtime, moveresult) self.age = self.age + dtime if time_to_live > 0 and self.age > time_to_live then self.itemstring = "" @@ -178,6 +172,38 @@ return end + if self.force_out then + -- This code runs after the entity got a push from the is_stuck code. + -- It makes sure the entity is entirely outside the solid node + local c = self.object:get_properties().collisionbox + local s = self.force_out_start + local f = self.force_out + local ok = (f.x > 0 and pos.x + c[1] > s.x + 0.5) or + (f.y > 0 and pos.y + c[2] > s.y + 0.5) or + (f.z > 0 and pos.z + c[3] > s.z + 0.5) or + (f.x < 0 and pos.x + c[4] < s.x - 0.5) or + (f.z < 0 and pos.z + c[6] < s.z - 0.5) + if ok then + -- Item was successfully forced out + self.force_out = nil + self:enable_physics() + return + end + end + + if not self.physical_state then + return -- Don't do anything + end + + assert(moveresult, + "Collision info missing, this is caused by an out-of-date/buggy mod or game") + + if not moveresult.collides then + -- future TODO: items should probably decelerate in air + return + end + + -- Push item out when stuck inside solid node local is_stuck = false local snode = core.get_node_or_nil(pos) if snode then @@ -187,7 +213,6 @@ and (sdef.node_box == nil or sdef.node_box.type == "regular") end - -- Push item out when stuck inside solid node if is_stuck then local shootdir local order = { @@ -223,69 +248,49 @@ self.force_out_start = vector.round(pos) return end - elseif self.force_out then - -- This code runs after the entity got a push from the above code. - -- It makes sure the entity is entirely outside the solid node - local c = self.object:get_properties().collisionbox - local s = self.force_out_start - local f = self.force_out - local ok = (f.x > 0 and pos.x + c[1] > s.x + 0.5) or - (f.y > 0 and pos.y + c[2] > s.y + 0.5) or - (f.z > 0 and pos.z + c[3] > s.z + 0.5) or - (f.x < 0 and pos.x + c[4] < s.x - 0.5) or - (f.z < 0 and pos.z + c[6] < s.z - 0.5) - if ok then - -- Item was successfully forced out - self.force_out = nil - self:enable_physics() - end end - if not self.physical_state then - return -- Don't do anything + node = nil -- ground node we're colliding with + if moveresult.touching_ground then + for _, info in ipairs(moveresult.collisions) do + if info.axis == "y" then + node = core.get_node(info.node_pos) + break + end + end end -- Slide on slippery nodes - local vel = self.object:get_velocity() local def = node and core.registered_nodes[node.name] - local is_moving = (def and not def.walkable) or - vel.x ~= 0 or vel.y ~= 0 or vel.z ~= 0 - local is_slippery = false + local keep_movement = false - if def and def.walkable then + if def then local slippery = core.get_item_group(node.name, "slippery") - is_slippery = slippery ~= 0 - if is_slippery and (math.abs(vel.x) > 0.2 or math.abs(vel.z) > 0.2) then + local vel = self.object:get_velocity() + if slippery ~= 0 and (math.abs(vel.x) > 0.1 or math.abs(vel.z) > 0.1) then -- Horizontal deceleration - local slip_factor = 4.0 / (slippery + 4) - self.object:set_acceleration({ - x = -vel.x * slip_factor, + local factor = math.min(4 / (slippery + 4) * dtime, 1) + self.object:set_velocity({ + x = vel.x * (1 - factor), y = 0, - z = -vel.z * slip_factor + z = vel.z * (1 - factor) }) - elseif vel.y == 0 then - is_moving = false + keep_movement = true end end - if self.moving_state == is_moving and - self.slippery_state == is_slippery then - -- Do not update anything until the moving state changes - return + if not keep_movement then + self.object:set_velocity({x=0, y=0, z=0}) end - self.moving_state = is_moving - self.slippery_state = is_slippery - - if is_moving then - self.object:set_acceleration({x = 0, y = -gravity, z = 0}) - else - self.object:set_acceleration({x = 0, y = 0, z = 0}) - self.object:set_velocity({x = 0, y = 0, z = 0}) + if self.moving_state == keep_movement then + -- Do not update anything until the moving state changes + return end + self.moving_state = keep_movement - --Only collect items if not moving - if is_moving then + -- Only collect items if not moving + if self.moving_state then return end -- Collect the items around to merge with diff -Nru minetest-5.2.0/builtin/game/item.lua minetest-5.3.0/builtin/game/item.lua --- minetest-5.2.0/builtin/game/item.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/item.lua 2020-07-09 21:13:20.000000000 +0000 @@ -582,7 +582,7 @@ wielded = wdef.after_use(wielded, digger, node, dp) or wielded else -- Wear out tool - if not core.settings:get_bool("creative_mode") then + if not core.is_creative_enabled(diggername) then wielded:add_wear(dp.wear) if wielded:get_count() == 0 and wdef.sound and wdef.sound.breaks then core.sound_play(wdef.sound.breaks, { @@ -675,6 +675,8 @@ -- Item definition defaults -- +local default_stack_max = tonumber(minetest.settings:get("default_stack_max")) or 99 + core.nodedef_default = { -- Item properties type="node", @@ -684,7 +686,7 @@ inventory_image = "", wield_image = "", wield_scale = {x=1,y=1,z=1}, - stack_max = 99, + stack_max = default_stack_max, usable = false, liquids_pointable = false, tool_capabilities = nil, @@ -748,7 +750,7 @@ inventory_image = "", wield_image = "", wield_scale = {x=1,y=1,z=1}, - stack_max = 99, + stack_max = default_stack_max, liquids_pointable = false, tool_capabilities = nil, @@ -786,7 +788,7 @@ inventory_image = "", wield_image = "", wield_scale = {x=1,y=1,z=1}, - stack_max = 99, + stack_max = default_stack_max, liquids_pointable = false, tool_capabilities = nil, diff -Nru minetest-5.2.0/builtin/game/misc.lua minetest-5.3.0/builtin/game/misc.lua --- minetest-5.2.0/builtin/game/misc.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/misc.lua 2020-07-09 21:13:20.000000000 +0000 @@ -164,6 +164,12 @@ end end +-- To be overridden by Creative mods + +local creative_mode_cache = core.settings:get_bool("creative_mode") +function core.is_creative_enabled(name) + return creative_mode_cache +end -- Checks if specified volume intersects a protected volume diff -Nru minetest-5.2.0/builtin/game/register.lua minetest-5.3.0/builtin/game/register.lua --- minetest-5.2.0/builtin/game/register.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/register.lua 2020-07-09 21:13:20.000000000 +0000 @@ -607,9 +607,9 @@ core.registered_on_punchplayers, core.register_on_punchplayer = make_registration() core.registered_on_priv_grant, core.register_on_priv_grant = make_registration() core.registered_on_priv_revoke, core.register_on_priv_revoke = make_registration() +core.registered_on_authplayers, core.register_on_authplayer = make_registration() core.registered_can_bypass_userlimit, core.register_can_bypass_userlimit = make_registration() core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration() -core.registered_on_auth_fail, core.register_on_auth_fail = make_registration() core.registered_on_player_inventory_actions, core.register_on_player_inventory_action = make_registration() core.registered_allow_player_inventory_actions, core.register_allow_player_inventory_action = make_registration() diff -Nru minetest-5.2.0/builtin/game/statbars.lua minetest-5.3.0/builtin/game/statbars.lua --- minetest-5.2.0/builtin/game/statbars.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/game/statbars.lua 2020-07-09 21:13:20.000000000 +0000 @@ -3,22 +3,26 @@ local health_bar_definition = { hud_elem_type = "statbar", - position = { x=0.5, y=1 }, + position = {x = 0.5, y = 1}, text = "heart.png", + text2 = "heart_gone.png", number = core.PLAYER_MAX_HP_DEFAULT, + item = core.PLAYER_MAX_HP_DEFAULT, direction = 0, - size = { x=24, y=24 }, - offset = { x=(-10*24)-25, y=-(48+24+16)}, + size = {x = 24, y = 24}, + offset = {x = (-10 * 24) - 25, y = -(48 + 24 + 16)}, } local breath_bar_definition = { hud_elem_type = "statbar", - position = { x=0.5, y=1 }, + position = {x = 0.5, y = 1}, text = "bubble.png", + text2 = "bubble_gone.png", number = core.PLAYER_MAX_BREATH_DEFAULT, + item = core.PLAYER_MAX_BREATH_DEFAULT * 2, direction = 0, - size = { x=24, y=24 }, - offset = {x=25,y=-(48+24+16)}, + size = {x = 24, y = 24}, + offset = {x = 25, y= -(48 + 24 + 16)}, } local hud_ids = {} @@ -26,7 +30,7 @@ local function scaleToDefault(player, field) -- Scale "hp" or "breath" to the default dimensions local current = player["get_" .. field](player) - local nominal = core["PLAYER_MAX_".. field:upper() .. "_DEFAULT"] + local nominal = core["PLAYER_MAX_" .. field:upper() .. "_DEFAULT"] local max_display = math.max(nominal, math.max(player:get_properties()[field .. "_max"], current)) return current / max_display * nominal @@ -49,6 +53,7 @@ local hud = hud_ids[name] local immortal = player:get_armor_groups().immortal == 1 + if flags.healthbar and enable_damage and not immortal then local number = scaleToDefault(player, "hp") if hud.id_healthbar == nil then @@ -63,19 +68,28 @@ hud.id_healthbar = nil end + local show_breathbar = flags.breathbar and enable_damage and not immortal + + local breath = player:get_breath() local breath_max = player:get_properties().breath_max - if flags.breathbar and enable_damage and not immortal and - player:get_breath() < breath_max then + if show_breathbar and breath <= breath_max then local number = 2 * scaleToDefault(player, "breath") - if hud.id_breathbar == nil then + if not hud.id_breathbar and breath < breath_max then local hud_def = table.copy(breath_bar_definition) hud_def.number = number hud.id_breathbar = player:hud_add(hud_def) - else + elseif hud.id_breathbar then player:hud_change(hud.id_breathbar, "number", number) end - elseif hud.id_breathbar then - player:hud_remove(hud.id_breathbar) + end + + if hud.id_breathbar and (not show_breathbar or breath == breath_max) then + minetest.after(1, function(player_name, breath_bar) + local player = minetest.get_player_by_name(player_name) + if player then + player:hud_remove(breath_bar) + end + end, name, hud.id_breathbar) hud.id_breathbar = nil end end diff -Nru minetest-5.2.0/builtin/init.lua minetest-5.3.0/builtin/init.lua --- minetest-5.2.0/builtin/init.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -36,6 +36,7 @@ if INIT == "game" then dofile(gamepath .. "init.lua") + assert(not core.get_http_api) elseif INIT == "mainmenu" then local mm_script = core.settings:get("main_menu_script") if mm_script and mm_script ~= "" then diff -Nru minetest-5.2.0/builtin/mainmenu/async_event.lua minetest-5.3.0/builtin/mainmenu/async_event.lua --- minetest-5.2.0/builtin/mainmenu/async_event.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/builtin/mainmenu/async_event.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,32 @@ + +core.async_jobs = {} + +local function handle_job(jobid, serialized_retval) + local retval = core.deserialize(serialized_retval) + assert(type(core.async_jobs[jobid]) == "function") + core.async_jobs[jobid](retval) + core.async_jobs[jobid] = nil +end + +core.async_event_handler = handle_job + +function core.handle_async(func, parameter, callback) + -- Serialize function + local serialized_func = string.dump(func) + + assert(serialized_func ~= nil) + + -- Serialize parameters + local serialized_param = core.serialize(parameter) + + if serialized_param == nil then + return false + end + + local jobid = core.do_async_callback(serialized_func, serialized_param) + + core.async_jobs[jobid] = callback + + return true +end + diff -Nru minetest-5.2.0/builtin/mainmenu/dlg_config_world.lua minetest-5.3.0/builtin/mainmenu/dlg_config_world.lua --- minetest-5.2.0/builtin/mainmenu/dlg_config_world.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/mainmenu/dlg_config_world.lua 2020-07-09 21:13:20.000000000 +0000 @@ -23,7 +23,49 @@ return not name:find("[^a-z0-9_]") end +local function init_data(data) + data.list = filterlist.create( + pkgmgr.preparemodlist, + pkgmgr.comparemod, + function(element, uid) + if element.name == uid then + return true + end + end, + function(element, criteria) + if criteria.hide_game and + element.is_game_content then + return false + end + + if criteria.hide_modpackcontents and + element.modpack ~= nil then + return false + end + return true + end, + { + worldpath = data.worldspec.path, + gameid = data.worldspec.gameid + }) + + if data.selected_mod > data.list:size() then + data.selected_mod = 0 + end + + data.list:set_filtercriteria({ + hide_game = data.hide_gamemods, + hide_modpackcontents = data.hide_modpackcontents + }) + data.list:add_sort_mechanism("alphabetic", sort_mod_list) + data.list:set_sortmode("alphabetic") +end + local function get_formspec(data) + if not data.list then + init_data(data) + end + local mod = data.list:get_list()[data.selected_mod] or {name = ""} local retval = @@ -85,11 +127,14 @@ end end end + retval = retval .. "button[3.25,7;2.5,0.5;btn_config_world_save;" .. fgettext("Save") .. "]" .. "button[5.75,7;2.5,0.5;btn_config_world_cancel;" .. - fgettext("Cancel") .. "]" + fgettext("Cancel") .. "]" .. + "button[9,7;2.5,0.5;btn_config_world_cdb;" .. + fgettext("Find More Mods") .. "]" if mod.name ~= "" and not mod.is_game_content then if mod.is_modpack then @@ -198,6 +243,16 @@ return true end + if fields.btn_config_world_cdb then + this.data.list = nil + + local dlg = create_store_dlg("mod") + dlg:set_parent(this) + this:hide() + dlg:show() + return true + end + if fields.btn_enable_all_mods then local list = this.data.list:get_raw_list() @@ -247,43 +302,5 @@ return end - dlg.data.list = filterlist.create( - pkgmgr.preparemodlist, - pkgmgr.comparemod, - function(element, uid) - if element.name == uid then - return true - end - end, - function(element, criteria) - if criteria.hide_game and - element.is_game_content then - return false - end - - if criteria.hide_modpackcontents and - element.modpack ~= nil then - return false - end - return true - end, - { - worldpath = dlg.data.worldspec.path, - gameid = dlg.data.worldspec.gameid - } - ) - - - if dlg.data.selected_mod > dlg.data.list:size() then - dlg.data.selected_mod = 0 - end - - dlg.data.list:set_filtercriteria({ - hide_game = dlg.data.hide_gamemods, - hide_modpackcontents = dlg.data.hide_modpackcontents - }) - dlg.data.list:add_sort_mechanism("alphabetic", sort_mod_list) - dlg.data.list:set_sortmode("alphabetic") - return dlg end diff -Nru minetest-5.2.0/builtin/mainmenu/dlg_contentstore.lua minetest-5.3.0/builtin/mainmenu/dlg_contentstore.lua --- minetest-5.2.0/builtin/mainmenu/dlg_contentstore.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/mainmenu/dlg_contentstore.lua 2020-07-09 21:13:20.000000000 +0000 @@ -1,5 +1,5 @@ --Minetest ---Copyright (C) 2018 rubenwardy +--Copyright (C) 2018-20 rubenwardy -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by @@ -15,8 +15,17 @@ --with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +if not minetest.get_http_api then + function create_store_dlg() + return messagebox("store", + fgettext("ContentDB is not available when Minetest was compiled without cURL")) + end + return +end + local store = { packages = {}, packages_full = {} } -local package_dialog = {} + +local http = minetest.get_http_api() -- Screenshot local screenshot_dir = core.get_cache_path() .. DIR_DELIM .. "cdb" @@ -44,19 +53,15 @@ } - - local function download_package(param) if core.download_file(param.package.url, param.filename) then return { - package = param.package, filename = param.filename, successful = true, } else core.log("error", "downloading " .. dump(param.package.url) .. " failed") return { - package = param.package, successful = false, } end @@ -70,9 +75,9 @@ local function callback(result) if result.successful then - local path, msg = pkgmgr.install(result.package.type, - result.filename, result.package.name, - result.package.path) + local path, msg = pkgmgr.install(package.type, + result.filename, package.name, + package.path) if not path then gamedata.errormessage = msg else @@ -80,33 +85,33 @@ local conf_path local name_is_title = false - if result.package.type == "mod" then + if package.type == "mod" then local actual_type = pkgmgr.get_folder_type(path) if actual_type.type == "modpack" then conf_path = path .. DIR_DELIM .. "modpack.conf" else conf_path = path .. DIR_DELIM .. "mod.conf" end - elseif result.package.type == "game" then + elseif package.type == "game" then conf_path = path .. DIR_DELIM .. "game.conf" name_is_title = true - elseif result.package.type == "txp" then + elseif package.type == "txp" then conf_path = path .. DIR_DELIM .. "texture_pack.conf" end if conf_path then local conf = Settings(conf_path) if name_is_title then - conf:set("name", result.package.title) + conf:set("name", package.title) else - conf:set("title", result.package.title) - conf:set("name", result.package.name) + conf:set("title", package.title) + conf:set("name", package.name) end if not conf:get("description") then - conf:set("description", result.package.short_description) + conf:set("description", package.short_description) end - conf:set("author", result.package.author) - conf:set("release", result.package.release) + conf:set("author", package.author) + conf:set("release", package.release) conf:write() end end @@ -115,37 +120,22 @@ gamedata.errormessage = fgettext("Failed to download $1", package.name) end - if gamedata.errormessage == nil then - core.button_handler({btn_hidden_close_download=result}) - else - core.button_handler({btn_hidden_close_download={successful=false}}) - end + package.downloading = false + ui.update() end + package.downloading = true + if not core.handle_async(download_package, params, callback) then core.log("error", "ERROR: async event failed") gamedata.errormessage = fgettext("Failed to download $1", package.name) + return end +end - local new_dlg = dialog_create("store_downloading", - function(data) - return "size[7,2]label[0.25,0.75;" .. - fgettext("Downloading and installing $1, please wait...", data.title) .. "]" - end, - function(this,fields) - if fields["btn_hidden_close_download"] ~= nil then - this:delete() - return true - end - - return false - end, - nil) - - new_dlg:set_parent(calling_dialog) - new_dlg.data.title = package.title - calling_dialog:hide() - new_dlg:show() +local function get_file_extension(path) + local parts = path:split(".") + return parts[#parts] end local function get_screenshot(package) @@ -156,8 +146,9 @@ end -- Get tmp screenshot path + local ext = get_file_extension(package.thumbnail) local filepath = screenshot_dir .. DIR_DELIM .. - package.type .. "-" .. package.author .. "-" .. package.name .. ".png" + ("%s-%s-%s.%s"):format(package.type, package.author, package.name, ext) -- Return if already downloaded local file = io.open(filepath, "r") @@ -195,84 +186,12 @@ return defaulttexturedir .. "loading_screenshot.png" end - - -function package_dialog.get_formspec() - local package = package_dialog.package - - store.update_paths() - - local formspec = { - "size[9,4;true]", - "image[0,1;4.5,3;", core.formspec_escape(get_screenshot(package)), ']', - "label[3.8,1;", - minetest.colorize(mt_color_green, core.formspec_escape(package.title)), "\n", - minetest.colorize('#BFBFBF', "by " .. core.formspec_escape(package.author)), "]", - "textarea[4,2;5.3,2;;;", core.formspec_escape(package.short_description), "]", - "button[0,0;2,1;back;", fgettext("Back"), "]", - } - - if not package.path then - formspec[#formspec + 1] = "button[7,0;2,1;install;" - formspec[#formspec + 1] = fgettext("Install") - formspec[#formspec + 1] = "]" - elseif package.installed_release < package.release then - -- The install_ action also handles updating - formspec[#formspec + 1] = "button[7,0;2,1;install;" - formspec[#formspec + 1] = fgettext("Update") - formspec[#formspec + 1] = "]" - formspec[#formspec + 1] = "button[5,0;2,1;uninstall;" - formspec[#formspec + 1] = fgettext("Uninstall") - formspec[#formspec + 1] = "]" - else - formspec[#formspec + 1] = "button[7,0;2,1;uninstall;" - formspec[#formspec + 1] = fgettext("Uninstall") - formspec[#formspec + 1] = "]" - end - - return table.concat(formspec, "") -end - -function package_dialog.handle_submit(this, fields) - if fields.back then - this:delete() - return true - end - - if fields.install then - start_install(this, package_dialog.package) - return true - end - - if fields.uninstall then - local dlg_delmod = create_delete_content_dlg(package_dialog.package) - dlg_delmod:set_parent(this) - this:hide() - dlg_delmod:show() - return true - end - - return false -end - -function package_dialog.create(package) - package_dialog.package = package - return dialog_create("package_view", - package_dialog.get_formspec, - package_dialog.handle_submit, - nil) -end - function store.load() - local tmpdir = os.tempfolder() - local target = tmpdir .. DIR_DELIM .. "packages.json" - - assert(core.create_dir(tmpdir)) - - local base_url = core.settings:get("contentdb_url") + local version = core.get_version() + local base_url = core.settings:get("contentdb_url") local url = base_url .. "/api/packages/?type=mod&type=game&type=txp&protocol_version=" .. - core.get_max_supp_proto() + core.get_max_supp_proto() .. "&engine_version=" .. version.string for _, item in pairs(core.settings:get("contentdb_flag_blacklist"):split(",")) do item = item:trim() @@ -281,31 +200,29 @@ end end - core.download_file(url, target) + local timeout = tonumber(minetest.settings:get("curl_file_download_timeout")) + local response = http.fetch_sync({ url = url, timeout = timeout }) + if not response.succeeded then + return + end - local file = io.open(target, "r") - if file then - store.packages_full = core.parse_json(file:read("*all")) or {} - file:close() + store.packages_full = core.parse_json(response.data) or {} - for _, package in pairs(store.packages_full) do - package.url = base_url .. "/packages/" .. + for _, package in pairs(store.packages_full) do + package.url = base_url .. "/packages/" .. package.author .. "/" .. package.name .. "/releases/" .. package.release .. "/download/" - local name_len = #package.name - if package.type == "game" and name_len > 5 and package.name:sub(name_len - 4) == "_game" then - package.id = package.author:lower() .. "/" .. package.name:sub(1, name_len - 5) - else - package.id = package.author:lower() .. "/" .. package.name - end + local name_len = #package.name + if package.type == "game" and name_len > 5 and package.name:sub(name_len - 4) == "_game" then + package.id = package.author:lower() .. "/" .. package.name:sub(1, name_len - 5) + else + package.id = package.author:lower() .. "/" .. package.name end - - store.packages = store.packages_full - store.loaded = true end - core.delete_dir(tmpdir) + store.packages = store.packages_full + store.loaded = true end function store.update_paths() @@ -395,34 +312,35 @@ cur_page = 1 end + local W = 15.75 + local H = 9.5 + local formspec if #store.packages_full > 0 then formspec = { - "size[12,7;true]", + "formspec_version[3]", + "size[15.75,9.5]", "position[0.5,0.55]", - "field[0.2,0.1;7.8,1;search_string;;", - core.formspec_escape(search_string), "]", + "container[0.375,0.375]", + "field[0,0;10.225,0.8;search_string;;", core.formspec_escape(search_string), "]", "field_close_on_enter[search_string;false]", - "button[7.7,-0.2;2,1;search;", - fgettext("Search"), "]", - "dropdown[9.7,-0.1;2.4;type;", - table.concat(filter_types_titles, ","), - ";", filter_type, "]", - -- "textlist[0,1;2.4,5.6;a;", - -- table.concat(taglist, ","), "]", + "button[10.225,0;2,0.8;search;", fgettext("Search"), "]", + "dropdown[12.6,0;2.4,0.8;type;", table.concat(filter_types_titles, ","), ";", filter_type, "]", + "container_end[]", -- Page nav buttons - "container[0,", - num_per_page + 1.5, "]", - "button[-0.1,0;3,1;back;", - fgettext("Back to Main Menu"), "]", - "button[7.1,0;1,1;pstart;<<]", - "button[8.1,0;1,1;pback;<]", - "label[9.2,0.2;", - tonumber(cur_page), " / ", - tonumber(dlgdata.pagemax), "]", - "button[10.1,0;1,1;pnext;>]", - "button[11.1,0;1,1;pend;>>]", + "container[0,", H - 0.8 - 0.375, "]", + "button[0.375,0;4,0.8;back;", fgettext("Back to Main Menu"), "]", + + "container[", W - 0.375 - 0.8*4 - 2, ",0]", + "image_button[0,0;0.8,0.8;", core.formspec_escape(defaulttexturedir), "start_icon.png;pstart;]", + "image_button[0.8,0;0.8,0.8;", core.formspec_escape(defaulttexturedir), "prev_icon.png;pback;]", + "style[pagenum;border=false]", + "button[1.6,0;2,0.8;pagenum;", tonumber(cur_page), " / ", tonumber(dlgdata.pagemax), "]", + "image_button[3.6,0;0.8,0.8;", core.formspec_escape(defaulttexturedir), "next_icon.png;pnext;]", + "image_button[4.4,0;0.8,0.8;", core.formspec_escape(defaulttexturedir), "end_icon.png;pend;]", + "container_end[]", + "container_end[]", } @@ -433,73 +351,84 @@ end else formspec = { - "size[12,7;true]", + "size[12,7]", "position[0.5,0.55]", "label[4,3;", fgettext("No packages could be retrieved"), "]", - "button[-0.1,", - num_per_page + 1.5, - ";3,1;back;", - fgettext("Back to Main Menu"), "]", + "container[0,", H - 0.8 - 0.375, "]", + "button[0,0;4,0.8;back;", fgettext("Back to Main Menu"), "]", + "container_end[]", } end local start_idx = (cur_page - 1) * num_per_page + 1 for i=start_idx, math.min(#store.packages, start_idx+num_per_page-1) do local package = store.packages[i] - formspec[#formspec + 1] = "container[0.5," - formspec[#formspec + 1] = (i - start_idx) * 1.1 + 1 + formspec[#formspec + 1] = "container[0.375," + formspec[#formspec + 1] = (i - start_idx) * 1.375 + (2*0.375 + 0.8) formspec[#formspec + 1] = "]" -- image - formspec[#formspec + 1] = "image[-0.4,0;1.5,1;" + formspec[#formspec + 1] = "image[0,0;1.5,1;" formspec[#formspec + 1] = core.formspec_escape(get_screenshot(package)) formspec[#formspec + 1] = "]" -- title - formspec[#formspec + 1] = "label[1,-0.1;" + formspec[#formspec + 1] = "label[1.875,0.1;" formspec[#formspec + 1] = core.formspec_escape( minetest.colorize(mt_color_green, package.title) .. minetest.colorize("#BFBFBF", " by " .. package.author)) formspec[#formspec + 1] = "]" - -- description - if package.path and package.installed_release < package.release then - formspec[#formspec + 1] = "textarea[1.25,0.3;7.5,1;;;" - else - formspec[#formspec + 1] = "textarea[1.25,0.3;9,1;;;" - end - formspec[#formspec + 1] = core.formspec_escape(package.short_description) - formspec[#formspec + 1] = "]" - -- buttons - if not package.path then - formspec[#formspec + 1] = "button[9.9,0;1.5,1;install_" + local description_width = W - 0.375*5 - 1 - 2*1.5 + formspec[#formspec + 1] = "container[" + formspec[#formspec + 1] = W - 0.375*2 + formspec[#formspec + 1] = ",0.1]" + + if package.downloading then + formspec[#formspec + 1] = "style[download;border=false]" + + formspec[#formspec + 1] = "button[-3.5,0;2,0.8;download;" + formspec[#formspec + 1] = fgettext("Downloading...") + formspec[#formspec + 1] = "]" + elseif not package.path then + formspec[#formspec + 1] = "button[-3,0;1.5,0.8;install_" formspec[#formspec + 1] = tostring(i) formspec[#formspec + 1] = ";" formspec[#formspec + 1] = fgettext("Install") formspec[#formspec + 1] = "]" else if package.installed_release < package.release then + description_width = description_width - 1.5 + -- The install_ action also handles updating - formspec[#formspec + 1] = "button[8.4,0;1.5,1;install_" + formspec[#formspec + 1] = "button[-4.5,0;1.5,0.8;install_" formspec[#formspec + 1] = tostring(i) formspec[#formspec + 1] = ";" formspec[#formspec + 1] = fgettext("Update") formspec[#formspec + 1] = "]" end - formspec[#formspec + 1] = "button[9.9,0;1.5,1;uninstall_" + formspec[#formspec + 1] = "button[-3,0;1.5,0.8;uninstall_" formspec[#formspec + 1] = tostring(i) formspec[#formspec + 1] = ";" formspec[#formspec + 1] = fgettext("Uninstall") formspec[#formspec + 1] = "]" end - --formspec[#formspec + 1] = "button[9.9,0;1.5,1;view_" - --formspec[#formspec + 1] = tostring(i) - --formspec[#formspec + 1] = ";" - --formspec[#formspec + 1] = fgettext("View") - --formspec[#formspec + 1] = "]" + formspec[#formspec + 1] = "button[-1.5,0;1.5,0.8;view_" + formspec[#formspec + 1] = tostring(i) + formspec[#formspec + 1] = ";" + formspec[#formspec + 1] = fgettext("View") + formspec[#formspec + 1] = "]" + formspec[#formspec + 1] = "container_end[]" + + -- description + formspec[#formspec + 1] = "textarea[1.855,0.3;" + formspec[#formspec + 1] = tostring(description_width) + formspec[#formspec + 1] = ",0.8;;;" + formspec[#formspec + 1] = core.formspec_escape(package.short_description) + formspec[#formspec + 1] = "]" formspec[#formspec + 1] = "container_end[]" end @@ -576,10 +505,9 @@ end if fields["view_" .. i] then - local dlg = package_dialog.create(package) - dlg:set_parent(this) - this:hide() - dlg:show() + local url = ("%s/packages/%s?protocol_version=%d"):format( + core.settings:get("contentdb_url"), package.id, core.get_max_supp_proto()) + core.open_url(url) return true end end @@ -594,6 +522,17 @@ search_string = "" cur_page = 1 + + if type then + -- table.indexof does not work on tables that contain `nil` + for i, v in pairs(filter_types_type) do + if v == type then + filter_type = i + break + end + end + end + store.filter_packages(search_string) return dialog_create("store", diff -Nru minetest-5.2.0/builtin/mainmenu/dlg_create_world.lua minetest-5.3.0/builtin/mainmenu/dlg_create_world.lua --- minetest-5.2.0/builtin/mainmenu/dlg_create_world.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/mainmenu/dlg_create_world.lua 2020-07-09 21:13:20.000000000 +0000 @@ -17,13 +17,110 @@ local worldname = "" +local function table_to_flags(ftable) + -- Convert e.g. { jungles = true, caves = false } to "jungles,nocaves" + local str = {} + for flag, is_set in pairs(ftable) do + str[#str + 1] = is_set and flag or ("no" .. flag) + end + return table.concat(str, ",") +end + +-- Same as check_flag but returns a string +local function strflag(flags, flag) + return (flags[flag] == true) and "true" or "false" +end + +local cb_caverns = { "caverns", fgettext("Caverns"), "caverns", + fgettext("Very large caverns deep in the underground") } +local tt_sea_rivers = fgettext("Sea level rivers") + +local flag_checkboxes = { + v5 = { + cb_caverns, + }, + v7 = { + cb_caverns, + { "ridges", fgettext("Rivers"), "ridges", tt_sea_rivers }, + { "mountains", fgettext("Mountains"), "mountains" }, + { "floatlands", fgettext("Floatlands (experimental)"), "floatlands", + fgettext("Floating landmasses in the sky") }, + }, + carpathian = { + cb_caverns, + { "rivers", fgettext("Rivers"), "rivers", tt_sea_rivers }, + }, + valleys = { + { "altitude-chill", fgettext("Altitude chill"), "altitude_chill", + fgettext("Reduces heat with altitude") }, + { "altitude-dry", fgettext("Altitude dry"), "altitude_dry", + fgettext("Reduces humidity with altitude") }, + { "humid-rivers", fgettext("Humid rivers"), "humid_rivers", + fgettext("Increases humidity around rivers") }, + { "vary-river-depth", fgettext("Vary river depth"), "vary_river_depth", + fgettext("Low humidity and high heat causes shallow or dry rivers") }, + }, + flat = { + { "hills", fgettext("Hills"), "hills" }, + { "lakes", fgettext("Lakes"), "lakes" }, + }, + fractal = { + { "terrain", fgettext("Additional terrain"), "terrain", + fgettext("Generate non-fractal terrain: Oceans and underground") }, + }, + v6 = { + { "trees", fgettext("Trees and jungle grass"), "trees" }, + { "flat", fgettext("Flat terrain"), "flat" }, + { "mudflow", fgettext("Mud flow"), "mudflow", + fgettext("Terrain surface erosion") }, + -- Biome settings are in mgv6_biomes below + }, +} + +local mgv6_biomes = { + { + fgettext("Temperate, Desert, Jungle, Tundra, Taiga"), + {jungles = true, snowbiomes = true} + }, + { + fgettext("Temperate, Desert, Jungle"), + {jungles = true, snowbiomes = false} + }, + { + fgettext("Temperate, Desert"), + {jungles = false, snowbiomes = false} + }, +} + local function create_world_formspec(dialogdata) + + -- Error out when no games found + if #pkgmgr.games == 0 then + return "size[12.25,3,true]" .. + "box[0,0;12,2;#ff8800]" .. + "textarea[0.3,0;11.7,2;;;".. + fgettext("You have no games installed.") .. "\n" .. + fgettext("Download one from minetest.net") .. "]" .. + "button[4.75,2.5;3,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]" + end + local mapgens = core.get_mapgen_names() local current_seed = core.settings:get("fixed_map_seed") or "" local current_mg = core.settings:get("mg_name") local gameid = core.settings:get("menu_last_game") + local flags = { + main = core.settings:get_flags("mg_flags"), + v5 = core.settings:get_flags("mgv5_spflags"), + v6 = core.settings:get_flags("mgv6_spflags"), + v7 = core.settings:get_flags("mgv7_spflags"), + fractal = core.settings:get_flags("mgfractal_spflags"), + carpathian = core.settings:get_flags("mgcarpathian_spflags"), + valleys = core.settings:get_flags("mgvalleys_spflags"), + flat = core.settings:get_flags("mgflat_spflags"), + } + local gameidx = 0 if gameid ~= nil then local _ @@ -35,15 +132,29 @@ end local game_by_gameidx = core.get_game(gameidx) + local disallowed_mapgen_settings = {} if game_by_gameidx ~= nil then local gamepath = game_by_gameidx.path local gameconfig = Settings(gamepath.."/game.conf") + local allowed_mapgens = (gameconfig:get("allowed_mapgens") or ""):split() + for key, value in pairs(allowed_mapgens) do + allowed_mapgens[key] = value:trim() + end + local disallowed_mapgens = (gameconfig:get("disallowed_mapgens") or ""):split() for key, value in pairs(disallowed_mapgens) do disallowed_mapgens[key] = value:trim() end + if #allowed_mapgens > 0 then + for i = #mapgens, 1, -1 do + if table.indexof(allowed_mapgens, mapgens[i]) == -1 then + table.remove(mapgens, i) + end + end + end + if disallowed_mapgens then for i = #mapgens, 1, -1 do if table.indexof(disallowed_mapgens, mapgens[i]) > 0 then @@ -51,49 +162,193 @@ end end end + + local ds = (gameconfig:get("disallowed_mapgen_settings") or ""):split() + for _, value in pairs(ds) do + disallowed_mapgen_settings[value:trim()] = true + end end local mglist = "" - local selindex = 1 + local selindex local i = 1 + local first_mg for k,v in pairs(mapgens) do + if not first_mg then + first_mg = v + end if current_mg == v then selindex = i end i = i + 1 mglist = mglist .. v .. "," end + if not selindex then + selindex = 1 + current_mg = first_mg + end mglist = mglist:sub(1, -2) + local mg_main_flags = function(mapgen, y) + if mapgen == "singlenode" then + return "", y + end + if disallowed_mapgen_settings["mg_flags"] then + return "", y + end + + local form = "checkbox[0," .. y .. ";flag_mg_caves;" .. + fgettext("Caves") .. ";"..strflag(flags.main, "caves").."]" + y = y + 0.5 + + form = form .. "checkbox[0,"..y..";flag_mg_dungeons;" .. + fgettext("Dungeons") .. ";"..strflag(flags.main, "dungeons").."]" + y = y + 0.5 + + local d_name = fgettext("Decorations") + local d_tt + if mapgen == "v6" then + d_tt = fgettext("Structures appearing on the terrain (no effect on trees and jungle grass created by v6)") + else + d_tt = fgettext("Structures appearing on the terrain, typically trees and plants") + end + form = form .. "checkbox[0,"..y..";flag_mg_decorations;" .. + d_name .. ";" .. + strflag(flags.main, "decorations").."]" .. + "tooltip[flag_mg_decorations;" .. + d_tt .. + "]" + y = y + 0.5 + + form = form .. "tooltip[flag_mg_caves;" .. + fgettext("Network of tunnels and caves") + .. "]" + return form, y + end + + local mg_specific_flags = function(mapgen, y) + if not flag_checkboxes[mapgen] then + return "", y + end + if disallowed_mapgen_settings["mg"..mapgen.."_spflags"] then + return "", y + end + local form = "" + for _,tab in pairs(flag_checkboxes[mapgen]) do + local id = "flag_mg"..mapgen.."_"..tab[1] + form = form .. ("checkbox[0,%f;%s;%s;%s]"): + format(y, id, tab[2], strflag(flags[mapgen], tab[3])) + + if tab[4] then + form = form .. "tooltip["..id..";"..tab[4].."]" + end + y = y + 0.5 + end + + if mapgen ~= "v6" then + -- No special treatment + return form, y + end + -- Special treatment for v6 (add biome widgets) + + -- Biome type (jungles, snowbiomes) + local biometype + if flags.v6.snowbiomes == true then + biometype = 1 + elseif flags.v6.jungles == true then + biometype = 2 + else + biometype = 3 + end + y = y + 0.3 + + form = form .. "label[0,"..(y+0.1)..";" .. fgettext("Biomes") .. "]" + y = y + 0.6 + + form = form .. "dropdown[0,"..y..";6.3;mgv6_biomes;" + for b=1, #mgv6_biomes do + form = form .. mgv6_biomes[b][1] + if b < #mgv6_biomes then + form = form .. "," + end + end + form = form .. ";" .. biometype.. "]" + + -- biomeblend + y = y + 0.55 + form = form .. "checkbox[0,"..y..";flag_mgv6_biomeblend;" .. + fgettext("Biome blending") .. ";"..strflag(flags.v6, "biomeblend").."]" .. + "tooltip[flag_mgv6_biomeblend;" .. + fgettext("Smooth transition between biomes") .. "]" + + return form, y + end + current_seed = core.formspec_escape(current_seed) - local retval = - "size[11.5,6.5,true]" .. - "label[2,0;" .. fgettext("World name") .. "]".. - "field[4.5,0.4;6,0.5;te_world_name;;" .. minetest.formspec_escape(worldname) .. "]" .. - - "label[2,1;" .. fgettext("Seed") .. "]".. - "field[4.5,1.4;6,0.5;te_seed;;".. current_seed .. "]" .. - - "label[2,2;" .. fgettext("Mapgen") .. "]".. - "dropdown[4.2,2;6.3;dd_mapgen;" .. mglist .. ";" .. selindex .. "]" .. - - "label[2,3;" .. fgettext("Game") .. "]".. - "textlist[4.2,3;5.8,2.3;games;" .. pkgmgr.gamelist() .. - ";" .. gameidx .. ";true]" .. - "button[3.25,6;2.5,0.5;world_create_confirm;" .. fgettext("Create") .. "]" .. - "button[5.75,6;2.5,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]" + local y_start = 0.0 + local y = y_start + local str_flags, str_spflags + local label_flags, label_spflags = "", "" + y = y + 0.3 + str_flags, y = mg_main_flags(current_mg, y) + if str_flags ~= "" then + label_flags = "label[0,"..y_start..";" .. fgettext("Mapgen flags") .. "]" + y_start = y + 0.4 + else + y_start = 0.0 + end + y = y_start + 0.3 + str_spflags = mg_specific_flags(current_mg, y) + if str_spflags ~= "" then + label_spflags = "label[0,"..y_start..";" .. fgettext("Mapgen-specific flags") .. "]" + end - if #pkgmgr.games == 0 then - retval = retval .. "box[2,4;8,1;#ff8800]label[2.25,4;" .. - fgettext("You have no games installed.") .. "]label[2.25,4.4;" .. - fgettext("Download one from minetest.net") .. "]" - elseif #pkgmgr.games == 1 and pkgmgr.games[1].id == "minimal" then - retval = retval .. "box[1.75,4;8.7,1;#ff8800]label[2,4;" .. - fgettext("Warning: The minimal development test is meant for developers.") .. "]label[2,4.4;" .. + -- Warning if only devtest is installed + local devtest_only = "" + local gamelist_height = 2.3 + if #pkgmgr.games == 1 and pkgmgr.games[1].id == "devtest" then + devtest_only = "box[0,0;5.8,1.7;#ff8800]" .. + "textarea[0.3,0;6,1.8;;;".. + fgettext("Warning: The Development Test is meant for developers.") .. "\n" .. fgettext("Download a game, such as Minetest Game, from minetest.net") .. "]" + gamelist_height = 0.5 end + local retval = + "size[12.25,7,true]" .. + + -- Left side + "container[0,0]".. + "field[0.3,0.6;6,0.5;te_world_name;" .. + fgettext("World name") .. + ";" .. core.formspec_escape(worldname) .. "]" .. + + "field[0.3,1.7;6,0.5;te_seed;" .. + fgettext("Seed") .. + ";".. current_seed .. "]" .. + + "label[0,2;" .. fgettext("Mapgen") .. "]".. + "dropdown[0,2.5;6.3;dd_mapgen;" .. mglist .. ";" .. selindex .. "]" .. + + "label[0,3.35;" .. fgettext("Game") .. "]".. + "textlist[0,3.85;5.8,"..gamelist_height..";games;" .. + pkgmgr.gamelist() .. ";" .. gameidx .. ";false]" .. + "container[0,4.5]" .. + devtest_only .. + "container_end[]" .. + "container_end[]" .. + + -- Right side + "container[6.2,0]".. + label_flags .. str_flags .. + label_spflags .. str_spflags .. + "container_end[]".. + + -- Menu buttons + "button[3.25,6.5;3,0.5;world_create_confirm;" .. fgettext("Create") .. "]" .. + "button[6.25,6.5;3,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]" + return retval end @@ -150,11 +405,53 @@ return true end + for k,v in pairs(fields) do + local split = string.split(k, "_", nil, 3) + if split and split[1] == "flag" then + local setting + if split[2] == "mg" then + setting = "mg_flags" + else + setting = split[2].."_spflags" + end + -- We replaced the underscore of flag names with a dash. + local flag = string.gsub(split[3], "-", "_") + local ftable = core.settings:get_flags(setting) + if v == "true" then + ftable[flag] = true + else + ftable[flag] = false + end + local flags = table_to_flags(ftable) + core.settings:set(setting, flags) + return true + end + end + if fields["world_create_cancel"] then this:delete() return true end + if fields["mgv6_biomes"] then + local entry = minetest.formspec_escape(fields["mgv6_biomes"]) + for b=1, #mgv6_biomes do + if entry == mgv6_biomes[b][1] then + local ftable = core.settings:get_flags("mgv6_spflags") + ftable.jungles = mgv6_biomes[b][2].jungles + ftable.snowbiomes = mgv6_biomes[b][2].snowbiomes + local flags = table_to_flags(ftable) + core.settings:set("mgv6_spflags", flags) + return true + end + end + end + + if fields["dd_mapgen"] then + core.settings:set("mg_name", fields["dd_mapgen"]) + return true + end + return false end diff -Nru minetest-5.2.0/builtin/mainmenu/init.lua minetest-5.3.0/builtin/mainmenu/init.lua --- minetest-5.2.0/builtin/mainmenu/init.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/mainmenu/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -20,20 +20,18 @@ mt_color_green = "#72FF63" mt_color_dark_green = "#25C191" ---for all other colors ask sfan5 to complete his work! - local menupath = core.get_mainmenu_path() local basepath = core.get_builtin_path() local menustyle = core.settings:get("main_menu_style") defaulttexturedir = core.get_texturepath_share() .. DIR_DELIM .. "base" .. DIR_DELIM .. "pack" .. DIR_DELIM -dofile(basepath .. "common" .. DIR_DELIM .. "async_event.lua") dofile(basepath .. "common" .. DIR_DELIM .. "filterlist.lua") dofile(basepath .. "fstk" .. DIR_DELIM .. "buttonbar.lua") dofile(basepath .. "fstk" .. DIR_DELIM .. "dialog.lua") dofile(basepath .. "fstk" .. DIR_DELIM .. "tabview.lua") dofile(basepath .. "fstk" .. DIR_DELIM .. "ui.lua") +dofile(menupath .. DIR_DELIM .. "async_event.lua") dofile(menupath .. DIR_DELIM .. "common.lua") dofile(menupath .. DIR_DELIM .. "pkgmgr.lua") dofile(menupath .. DIR_DELIM .. "textures.lua") diff -Nru minetest-5.2.0/builtin/mainmenu/tab_credits.lua minetest-5.3.0/builtin/mainmenu/tab_credits.lua --- minetest-5.2.0/builtin/mainmenu/tab_credits.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/mainmenu/tab_credits.lua 2020-07-09 21:13:20.000000000 +0000 @@ -101,8 +101,8 @@ local logofile = defaulttexturedir .. "logo.png" local version = core.get_version() return "image[0.5,1;" .. core.formspec_escape(logofile) .. "]" .. - "label[0.5,3.2;" .. version.project .. " " .. version.string .. "]" .. - "label[0.5,3.5;http://minetest.net]" .. + "label[0.5,2.8;" .. version.project .. " " .. version.string .. "]" .. + "button[0.5,3;2,2;homepage;minetest.net]" .. "tablecolumns[color;text]" .. "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. "table[3.5,-0.25;8.5,6.05;list_credits;" .. @@ -115,5 +115,10 @@ "#FFFF00," .. fgettext("Previous Contributors") .. ",," .. buildCreditList(previous_contributors) .. "," .. ";1]" - end + end, + cbf_button_handler = function(this, fields, name, tabdata) + if fields.homepage then + core.open_url("https://www.minetest.net") + end + end, } diff -Nru minetest-5.2.0/builtin/mainmenu/tab_local.lua minetest-5.3.0/builtin/mainmenu/tab_local.lua --- minetest-5.2.0/builtin/mainmenu/tab_local.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/mainmenu/tab_local.lua 2020-07-09 21:13:20.000000000 +0000 @@ -35,6 +35,15 @@ end local function game_buttonbar_button_handler(fields) + if fields.game_open_cdb then + local maintab = ui.find_by_name("maintab") + local dlg = create_store_dlg("game") + dlg:set_parent(maintab) + maintab:hide() + dlg:show() + return true + end + for key,value in pairs(fields) do for j=1,#pkgmgr.games,1 do if ("game_btnbar_" .. pkgmgr.games[j].id == key) then @@ -87,6 +96,9 @@ end btnbar:add_button(btn_name, text, image, tooltip) end + + local plus_image = core.formspec_escape(defaulttexturedir .. "plus.png") + btnbar:add_button("game_open_cdb", "", plus_image, fgettext("Install games from ContentDB")) end else function current_game() @@ -207,40 +219,35 @@ local selected = core.get_textlist_index("sp_worlds") gamedata.selected_world = menudata.worldlist:get_raw_index(selected) - if core.settings:get_bool("enable_server") then - if selected ~= nil and gamedata.selected_world ~= 0 then - gamedata.playername = fields["te_playername"] - gamedata.password = fields["te_passwd"] - gamedata.port = fields["te_serverport"] - gamedata.address = "" - - core.settings:set("port",gamedata.port) - if fields["te_serveraddr"] ~= nil then - core.settings:set("bind_address",fields["te_serveraddr"]) - end + if selected == nil or gamedata.selected_world == 0 then + gamedata.errormessage = + fgettext("No world created or selected!") + return true + end - --update last game - local world = menudata.worldlist:get_raw_element(gamedata.selected_world) - if world then - local game = pkgmgr.find_by_gameid(world.gameid) - core.settings:set("menu_last_game", game.id) - end + -- Update last game + local world = menudata.worldlist:get_raw_element(gamedata.selected_world) + if world then + local game = pkgmgr.find_by_gameid(world.gameid) + core.settings:set("menu_last_game", game.id) + end - core.start() - else - gamedata.errormessage = - fgettext("No world created or selected!") + if core.settings:get_bool("enable_server") then + gamedata.playername = fields["te_playername"] + gamedata.password = fields["te_passwd"] + gamedata.port = fields["te_serverport"] + gamedata.address = "" + + core.settings:set("port",gamedata.port) + if fields["te_serveraddr"] ~= nil then + core.settings:set("bind_address",fields["te_serveraddr"]) end else - if selected ~= nil and gamedata.selected_world ~= 0 then - gamedata.singleplayer = true - core.start() - else - gamedata.errormessage = - fgettext("No world created or selected!") - end - return true + gamedata.singleplayer = true end + + core.start() + return true end if fields["world_create"] ~= nil then diff -Nru minetest-5.2.0/builtin/settingtypes.txt minetest-5.3.0/builtin/settingtypes.txt --- minetest-5.2.0/builtin/settingtypes.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/builtin/settingtypes.txt 2020-07-09 21:13:20.000000000 +0000 @@ -42,10 +42,10 @@ # Flags are always separated by comma without spaces. # - default possible_flags # * noise_params_2d: -# Format is , , (, , ), , , , [, ] +# Format is , , (, , ), , , , [, ] # - default # * noise_params_3d: -# Format is , , (, , ), , , , [, ] +# Format is , , (, , ), , , , [, ] # - default # * v3f: # Format is (, , ) @@ -252,7 +252,7 @@ # Key for toggling display of minimap. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 -keymap_minimap (Minimap key) key KEY_F9 +keymap_minimap (Minimap key) key KEY_KEY_V # Key for taking screenshots. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 @@ -424,7 +424,7 @@ # Key for switching between first- and third-person camera. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 -keymap_camera_mode (Toggle camera mode key) key KEY_F7 +keymap_camera_mode (Toggle camera mode key) key KEY_KEY_C # Key for increasing the viewing range. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 @@ -561,9 +561,6 @@ # 1 = relief mapping (slower, more accurate). parallax_occlusion_mode (Parallax occlusion mode) int 1 0 1 -# Strength of parallax. -3d_paralax_strength (Parallax occlusion strength) float 0.025 - # Number of parallax occlusion iterations. parallax_occlusion_iterations (Parallax occlusion iterations) int 4 @@ -713,6 +710,9 @@ # Note that the interlaced mode requires shaders to be enabled. 3d_mode (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside,crossview,pageflip +# Strength of 3D mode parallax. +3d_paralax_strength (3D mode parallax strength) float 0.025 + # In-game chat console height, between 0.1 (10%) and 1.0 (100%). console_height (Console height) float 0.6 0.1 1.0 @@ -903,8 +903,13 @@ # This font will be used for certain languages or if the default font is unavailable. fallback_font_path (Fallback font path) filepath fonts/DroidSansFallbackFull.ttf -# Path to save screenshots at. -screenshot_path (Screenshot folder) path +# Font size of the recent chat text and chat prompt in point (pt). +# Value 0 will use the default font size. +chat_font_size (Chat font size) int 0 + +# Path to save screenshots at. Can be an absolute or relative path. +# The folder will be created if it doesn't already exist. +screenshot_path (Screenshot folder) path screenshots # Format of screenshots. screenshot_format (Screenshot format) enum png png,jpg,bmp,pcx,ppm,tga @@ -954,6 +959,12 @@ # Note that the port field in the main menu overrides this setting. remote_port (Remote port) int 30000 1 65535 +# Prometheus listener address. +# If minetest is compiled with ENABLE_PROMETHEUS option enabled, +# enable metrics listener for Prometheus on that address. +# Metrics can be fetch on http://127.0.0.1:30000/metrics +prometheus_listener_address (Prometheus listener address) string 127.0.0.1:30000 + # Save the map received by the client on disk. enable_local_map_saving (Saving map received from server) bool false @@ -1078,6 +1089,10 @@ # Setting it to -1 disables the feature. item_entity_ttl (Item entity TTL) int 900 +# Specifies the default stack size of nodes, items and tools. +# Note that mods or games may explicitly set a stack for certain (or all) items. +default_stack_max (Default stack size) int 99 + # Enable players getting damage and dying. enable_damage (Damage) bool false @@ -1149,7 +1164,7 @@ # active block stuff, stated in mapblocks (16 nodes). # In active blocks objects are loaded and ABMs run. # This is also the minimum range in which active objects (mobs) are maintained. -# This should be configured together with active_object_range. +# This should be configured together with active_object_send_range_blocks. active_block_range (Active block range) int 3 # From how far blocks are sent to clients, stated in mapblocks (16 nodes). @@ -1372,7 +1387,7 @@ # Set the language. Leave empty to use the system language. # A restart is required after changing this. -language (Language) enum ,ar,ca,cs,da,de,dv,el,eo,es,et,eu,fil,fr,hu,id,it,ja,ja_KS,jbo,kk,kn,lo,lt,ms,my,nb,nl,nn,pl,pt,pt_BR,ro,ru,sl,sr_Cyrl,sv,sw,th,tr,uk,vi +language (Language) enum ,ar,ca,cs,da,de,dv,el,en,eo,es,et,eu,fil,fr,hu,id,it,ja,ja_KS,jbo,kk,kn,lo,lt,ms,my,nb,nl,nn,pl,pt,pt_BR,ro,ru,sl,sr_Cyrl,sv,sw,th,tr,uk,vi # Level of logging to be written to debug.txt: # - (no logging) @@ -1390,6 +1405,9 @@ # debug.txt is only moved if this setting is positive. debug_log_size_max (Debug log file size threshold) int 50 +# Minimal level of logging to be written to chat. +chat_log_level (Chat log level) enum error ,none,error,warning,action,info,verbose + # Enable IPv6 support (for both client and server). # Required for IPv6 connections to work at all. enable_ipv6 (IPv6) bool true @@ -1593,12 +1611,53 @@ [*Mapgen V7] # Map generation attributes specific to Mapgen v7. -# 'ridges' enables the rivers. +# '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 # Y of mountain density gradient zero level. Used to shift mountains vertically. mgv7_mount_zero_level (Mountain zero level) int 0 +# Lower Y limit of floatlands. +mgv7_floatland_ymin (Floatland minimum Y) int 1024 + +# Upper Y limit of floatlands. +mgv7_floatland_ymax (Floatland maximum Y) int 4096 + +# Y-distance over which floatlands taper from full density to nothing. +# Tapering starts at this distance from the Y limit. +# For a solid floatland layer, this controls the height of hills/mountains. +# Must be less than or equal to half the distance between the Y limits. +mgv7_floatland_taper (Floatland tapering distance) int 256 + +# Exponent of the floatland tapering. Alters the tapering behaviour. +# Value = 1.0 creates a uniform, linear tapering. +# Values > 1.0 create a smooth tapering suitable for the default separated +# floatlands. +# Values < 1.0 (for example 0.25) create a more defined surface level with +# flatter lowlands, suitable for a solid floatland layer. +mgv7_float_taper_exp (Floatland taper exponent) float 2.0 + +# Adjusts the density of the floatland layer. +# Increase value to increase density. Can be positive or negative. +# Value = 0.0: 50% of volume is floatland. +# Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test +# to be sure) creates a solid floatland layer. +mgv7_floatland_density (Floatland density) float -0.6 + +# Surface level of optional water placed on a solid floatland layer. +# Water is disabled by default and will only be placed if this value is set +# to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the +# upper tapering). +# ***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***: +# When enabling water placement the floatlands must be configured and tested +# to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other +# required value depending on 'mgv7_np_floatland'), to avoid +# server-intensive extreme water flow and to avoid vast flooding of the +# world surface below. +mgv7_floatland_ywater (Floatland water level) int -31000 + # Controls width of tunnels, a smaller value creates wider tunnels. # Value >= 10.0 completely disables generation of tunnels and avoids the # intensive noise calculations. @@ -1668,6 +1727,12 @@ # 3D noise defining structure of river canyon walls. mgv7_np_ridge (Ridge noise) noise_params_3d 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0 +# 3D noise defining structure of floatlands. +# If altered from the default, the noise 'scale' (0.7 by default) may need +# to be adjusted, as floatland tapering functions best when this noise has +# a value range of approximately -2.0 to 2.0. +mgv7_np_floatland (Floatland noise) noise_params_3d 0, 0.7, (384, 96, 384), 1009, 4, 0.75, 1.618 + # 3D noise defining giant caverns. mgv7_np_cavern (Cavern noise) noise_params_3d 0, 1, (384, 128, 384), 723, 5, 0.63, 2.0 @@ -2098,20 +2163,17 @@ enable_mapgen_debug_info (Mapgen debug) bool false # Maximum number of blocks that can be queued for loading. -emergequeue_limit_total (Absolute limit of emerge queues) int 512 +emergequeue_limit_total (Absolute limit of queued blocks to emerge) int 512 # Maximum number of blocks to be queued that are to be loaded from file. -# Set to blank for an appropriate amount to be chosen automatically. -emergequeue_limit_diskonly (Limit of emerge queues on disk) int 64 +# This limit is enforced per player. +emergequeue_limit_diskonly (Per-player limit of queued blocks load from disk) int 64 # Maximum number of blocks to be queued that are to be generated. -# Set to blank for an appropriate amount to be chosen automatically. -emergequeue_limit_generate (Limit of emerge queues to generate) int 64 +# This limit is enforced per player. +emergequeue_limit_generate (Per-player limit of queued blocks to generate) int 64 # Number of emerge threads to use. -# WARNING: Currently there are multiple bugs that may cause crashes when -# 'num_emerge_threads' is larger than 1. Until this warning is removed it is -# strongly recommended this value is set to the default '1'. # Value 0: # - Automatic selection. The number of emerge threads will be # - 'number of processors - 2', with a lower limit of 1. diff -Nru minetest-5.2.0/client/shaders/nodes_shader/opengl_vertex.glsl minetest-5.3.0/client/shaders/nodes_shader/opengl_vertex.glsl --- minetest-5.2.0/client/shaders/nodes_shader/opengl_vertex.glsl 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/client/shaders/nodes_shader/opengl_vertex.glsl 2020-07-09 21:13:20.000000000 +0000 @@ -101,8 +101,8 @@ float disp_x; float disp_z; -#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES) || \ - (MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS) +// OpenGL < 4.3 does not support continued preprocessor lines +#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES) || (MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS) vec4 pos2 = mWorld * gl_Vertex; float tOffset = (pos2.x + pos2.y) * 0.001 + pos2.z * 0.002; disp_x = (smoothTriangleWave(animationTimer * 23.0 + tOffset) + diff -Nru minetest-5.2.0/client/shaders/object_shader/opengl_fragment.glsl minetest-5.3.0/client/shaders/object_shader/opengl_fragment.glsl --- minetest-5.2.0/client/shaders/object_shader/opengl_fragment.glsl 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/client/shaders/object_shader/opengl_fragment.glsl 2020-07-09 21:13:20.000000000 +0000 @@ -25,6 +25,38 @@ const float fogStart = FOG_START; const float fogShadingParameter = 1 / ( 1 - fogStart); +#ifdef ENABLE_TONE_MAPPING + +/* Hable's UC2 Tone mapping parameters + A = 0.22; + B = 0.30; + C = 0.10; + D = 0.20; + E = 0.01; + F = 0.30; + W = 11.2; + equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F +*/ + +vec3 uncharted2Tonemap(vec3 x) +{ + return ((x * (0.22 * x + 0.03) + 0.002) / (x * (0.22 * x + 0.3) + 0.06)) - 0.03333; +} + +vec4 applyToneMapping(vec4 color) +{ + color = vec4(pow(color.rgb, vec3(2.2)), color.a); + const float gamma = 1.6; + const float exposureBias = 5.5; + color.rgb = uncharted2Tonemap(exposureBias * color.rgb); + // Precalculated white_scale from + //vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W)); + vec3 whiteScale = vec3(1.036015346); + color.rgb *= whiteScale; + return vec4(pow(color.rgb, vec3(1.0 / gamma)), color.a); +} +#endif + void get_texture_flags() { vec4 flags = texture2D(textureFlags, vec2(0.0, 0.0)); @@ -113,7 +145,14 @@ vec4 col = vec4(color.rgb, base.a); + col.rgb *= gl_Color.rgb; + col.rgb *= emissiveColor.rgb * vIDiff; + +#ifdef ENABLE_TONE_MAPPING + col = applyToneMapping(col); +#endif + // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?), // the fog will only be rendered correctly if the last operation before the // clamp() is an addition. Else, the clamp() seems to be ignored. diff -Nru minetest-5.2.0/client/shaders/object_shader/opengl_vertex.glsl minetest-5.3.0/client/shaders/object_shader/opengl_vertex.glsl --- minetest-5.2.0/client/shaders/object_shader/opengl_vertex.glsl 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/client/shaders/object_shader/opengl_vertex.glsl 2020-07-09 21:13:20.000000000 +0000 @@ -38,7 +38,16 @@ lightVec = sunPosition - worldPosition; eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; - vIDiff = directional_ambient(normalize(gl_Normal)); + +#if (MATERIAL_TYPE == TILE_MATERIAL_PLAIN) || (MATERIAL_TYPE == TILE_MATERIAL_PLAIN_ALPHA) + vIDiff = 1.0; +#else + // This is intentional comparison with zero without any margin. + // If normal is not equal to zero exactly, then we assume it's a valid, just not normalized vector + vIDiff = length(gl_Normal) == 0.0 + ? 1.0 + : directional_ambient(normalize(gl_Normal)); +#endif gl_FrontColor = gl_BackColor = gl_Color; } diff -Nru minetest-5.2.0/client/shaders/wielded_shader/opengl_fragment.glsl minetest-5.3.0/client/shaders/wielded_shader/opengl_fragment.glsl --- minetest-5.2.0/client/shaders/wielded_shader/opengl_fragment.glsl 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/client/shaders/wielded_shader/opengl_fragment.glsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,127 +0,0 @@ -uniform sampler2D baseTexture; -uniform sampler2D normalTexture; -uniform sampler2D textureFlags; - -uniform vec4 skyBgColor; -uniform float fogDistance; -uniform vec3 eyePosition; - -varying vec3 vPosition; -varying vec3 worldPosition; - -varying vec3 eyeVec; -varying vec3 lightVec; - -bool normalTexturePresent = false; -bool texTileableHorizontal = false; -bool texTileableVertical = false; -bool texSeamless = false; - -const float e = 2.718281828459; -const float BS = 10.0; -const float fogStart = FOG_START; -const float fogShadingParameter = 1 / ( 1 - fogStart); - -void get_texture_flags() -{ - vec4 flags = texture2D(textureFlags, vec2(0.0, 0.0)); - if (flags.r > 0.5) { - normalTexturePresent = true; - } - if (flags.g > 0.5) { - texTileableHorizontal = true; - } - if (flags.b > 0.5) { - texTileableVertical = true; - } - if (texTileableHorizontal && texTileableVertical) { - texSeamless = true; - } -} - -float intensity(vec3 color) -{ - return (color.r + color.g + color.b) / 3.0; -} - -float get_rgb_height(vec2 uv) -{ - if (texSeamless) { - return intensity(texture2D(baseTexture, uv).rgb); - } else { - return intensity(texture2D(baseTexture, clamp(uv, 0.0, 0.999)).rgb); - } -} - -vec4 get_normal_map(vec2 uv) -{ - vec4 bump = texture2D(normalTexture, uv).rgba; - bump.xyz = normalize(bump.xyz * 2.0 - 1.0); - return bump; -} - -void main(void) -{ - vec3 color; - vec4 bump; - vec2 uv = gl_TexCoord[0].st; - bool use_normalmap = false; - get_texture_flags(); - -#if USE_NORMALMAPS == 1 - if (normalTexturePresent) { - bump = get_normal_map(uv); - use_normalmap = true; - } -#endif - -#if GENERATE_NORMALMAPS == 1 - if (normalTexturePresent == false) { - float tl = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y + SAMPLE_STEP)); - float t = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y - SAMPLE_STEP)); - float tr = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y + SAMPLE_STEP)); - float r = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y)); - float br = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y - SAMPLE_STEP)); - float b = get_rgb_height(vec2(uv.x, uv.y - SAMPLE_STEP)); - float bl = get_rgb_height(vec2(uv.x -SAMPLE_STEP, uv.y - SAMPLE_STEP)); - float l = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y)); - float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); - float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); - bump = vec4(normalize(vec3 (dX, dY, NORMALMAPS_STRENGTH)), 1.0); - use_normalmap = true; - } -#endif - - vec4 base = texture2D(baseTexture, uv).rgba; - -#ifdef ENABLE_BUMPMAPPING - if (use_normalmap) { - vec3 L = normalize(lightVec); - vec3 E = normalize(eyeVec); - float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0), 1.0); - float diffuse = dot(-E,bump.xyz); - color = (diffuse + 0.1 * specular) * base.rgb; - } else { - color = base.rgb; - } -#else - color = base.rgb; -#endif - - vec4 col = vec4(color.rgb, base.a); - col *= gl_Color; - // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?), - // the fog will only be rendered correctly if the last operation before the - // clamp() is an addition. Else, the clamp() seems to be ignored. - // E.g. the following won't work: - // float clarity = clamp(fogShadingParameter - // * (fogDistance - length(eyeVec)) / fogDistance), 0.0, 1.0); - // As additions usually come for free following a multiplication, the new formula - // should be more efficient as well. - // Note: clarity = (1 - fogginess) - float clarity = clamp(fogShadingParameter - - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0); - col = mix(skyBgColor, col, clarity); - - gl_FragColor = vec4(col.rgb, base.a); -} diff -Nru minetest-5.2.0/client/shaders/wielded_shader/opengl_vertex.glsl minetest-5.3.0/client/shaders/wielded_shader/opengl_vertex.glsl --- minetest-5.2.0/client/shaders/wielded_shader/opengl_vertex.glsl 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/client/shaders/wielded_shader/opengl_vertex.glsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -uniform mat4 mWorldViewProj; -uniform mat4 mWorld; - -uniform vec3 eyePosition; -uniform float animationTimer; - -varying vec3 vPosition; -varying vec3 worldPosition; - -varying vec3 eyeVec; -varying vec3 lightVec; -varying vec3 tsEyeVec; -varying vec3 tsLightVec; - -const float e = 2.718281828459; -const float BS = 10.0; - -void main(void) -{ - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_Position = mWorldViewProj * gl_Vertex; - - vPosition = gl_Position.xyz; - worldPosition = (mWorld * gl_Vertex).xyz; - - vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); - - lightVec = sunPosition - worldPosition; - eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; - - gl_FrontColor = gl_BackColor = gl_Color; -} diff -Nru minetest-5.2.0/clientmods/preview/init.lua minetest-5.3.0/clientmods/preview/init.lua --- minetest-5.2.0/clientmods/preview/init.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/clientmods/preview/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -31,6 +31,7 @@ end) core.after(1, function() + print("armor: " .. dump(core.localplayer:get_armor_groups())) id = core.localplayer:hud_add({ hud_elem_type = "text", name = "example", @@ -78,7 +79,7 @@ return false end - local pos = vector.add(core.localplayer:get_pos(), core.camera:get_offset()) + local pos = core.camera:get_pos() local pos2 = vector.add(pos, vector.multiply(core.camera:get_look_dir(), 100)) local rc = core.raycast(pos, pos2) @@ -125,19 +126,6 @@ end, }) -core.register_chatcommand("colorize_test", { - func = function(param) - return true, core.colorize("red", param) - end, -}) - -core.register_chatcommand("test_node", { - func = function(param) - core.display_chat_message(dump(core.get_node({x=0, y=0, z=0}))) - core.display_chat_message(dump(core.get_node_or_nil({x=0, y=0, z=0}))) - end, -}) - local function preview_minimap() local minimap = core.ui.minimap if not minimap then @@ -157,7 +145,7 @@ core.after(2, function() print("[PREVIEW] loaded " .. modname .. " mod") modstorage:set_string("current_mod", modname) - print(modstorage:get_string("current_mod")) + assert(modstorage:get_string("current_mod") == modname) preview_minimap() end) @@ -184,30 +172,12 @@ core.register_on_punchnode(function(pos, node) print("The local player punched a node!") - local itemstack = core.get_wielded_item() - --[[ - -- getters - print(dump(itemstack:is_empty())) - print(dump(itemstack:get_name())) - print(dump(itemstack:get_count())) - print(dump(itemstack:get_wear())) - print(dump(itemstack:get_meta())) - print(dump(itemstack:get_metadata() - print(dump(itemstack:is_known())) - --print(dump(itemstack:get_definition())) - print(dump(itemstack:get_tool_capabilities())) - print(dump(itemstack:to_string())) - print(dump(itemstack:to_table())) - -- setters - print(dump(itemstack:set_name("default:dirt"))) - print(dump(itemstack:set_count("95"))) - print(dump(itemstack:set_wear(934))) - print(dump(itemstack:get_meta())) - print(dump(itemstack:get_metadata())) - --]] + local itemstack = core.localplayer:get_wielded_item() print(dump(itemstack:to_table())) print("pos:" .. dump(pos)) print("node:" .. dump(node)) + local meta = core.get_meta(pos) + print("punched meta: " .. (meta and dump(meta:to_table()) or "(missing)")) return false end) diff -Nru minetest-5.2.0/cmake/Modules/FindGettextLib.cmake minetest-5.3.0/cmake/Modules/FindGettextLib.cmake --- minetest-5.2.0/cmake/Modules/FindGettextLib.cmake 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/cmake/Modules/FindGettextLib.cmake 2020-07-09 21:13:20.000000000 +0000 @@ -55,10 +55,10 @@ include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(GetText DEFAULT_MSG ${GETTEXT_REQUIRED_VARS}) +find_package_handle_standard_args(GettextLib DEFAULT_MSG ${GETTEXT_REQUIRED_VARS}) -if(GETTEXT_FOUND) +if(GETTEXTLIB_FOUND) # BSD variants require special linkage as they don't use glibc if(${CMAKE_SYSTEM_NAME} MATCHES "BSD|DragonFly") set(GETTEXT_LIBRARY "intl") diff -Nru minetest-5.2.0/cmake/Modules/FindJson.cmake minetest-5.3.0/cmake/Modules/FindJson.cmake --- minetest-5.2.0/cmake/Modules/FindJson.cmake 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/cmake/Modules/FindJson.cmake 2020-07-09 21:13:20.000000000 +0000 @@ -11,14 +11,14 @@ find_path(JSON_INCLUDE_DIR json/allocator.h PATH_SUFFIXES jsoncpp) include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(JSONCPP DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR) + find_package_handle_standard_args(Json DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR) - if(JSONCPP_FOUND) + if(JSON_FOUND) message(STATUS "Using system JSONCPP library.") endif() endif() -if(NOT JSONCPP_FOUND) +if(NOT JSON_FOUND) message(STATUS "Using bundled JSONCPP library.") set(JSON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/jsoncpp) set(JSON_LIBRARY jsoncpp) diff -Nru minetest-5.2.0/cmake/Modules/FindLuaJIT.cmake minetest-5.3.0/cmake/Modules/FindLuaJIT.cmake --- minetest-5.2.0/cmake/Modules/FindLuaJIT.cmake 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/cmake/Modules/FindLuaJIT.cmake 2020-07-09 21:13:20.000000000 +0000 @@ -55,7 +55,7 @@ INCLUDE(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set LUAJIT_FOUND to TRUE if # all listed variables are TRUE -FIND_PACKAGE_HANDLE_STANDARD_ARGS(LuaJit +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LuaJIT REQUIRED_VARS LUA_LIBRARY LUA_INCLUDE_DIR VERSION_VAR LUA_VERSION_STRING) diff -Nru minetest-5.2.0/cmake/Modules/FindVorbis.cmake minetest-5.3.0/cmake/Modules/FindVorbis.cmake --- minetest-5.2.0/cmake/Modules/FindVorbis.cmake 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/cmake/Modules/FindVorbis.cmake 2020-07-09 21:13:20.000000000 +0000 @@ -20,13 +20,13 @@ # Handle the QUIETLY and REQUIRED arguments and set VORBIS_FOUND # to TRUE if all listed variables are TRUE. include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(VORBIS DEFAULT_MSG + find_package_handle_standard_args(Vorbis DEFAULT_MSG OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY) else(NOT GP2XWIZ) find_path(VORBIS_INCLUDE_DIR tremor/ivorbisfile.h) find_library(VORBIS_LIBRARY NAMES vorbis_dec) - find_package_handle_standard_args(VORBIS DEFAULT_MSG + find_package_handle_standard_args(Vorbis DEFAULT_MSG VORBIS_INCLUDE_DIR VORBIS_LIBRARY) endif(NOT GP2XWIZ) diff -Nru minetest-5.2.0/CMakeLists.txt minetest-5.3.0/CMakeLists.txt --- minetest-5.2.0/CMakeLists.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/CMakeLists.txt 2020-07-09 21:13:20.000000000 +0000 @@ -16,7 +16,7 @@ # Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing set(VERSION_MAJOR 5) -set(VERSION_MINOR 2) +set(VERSION_MINOR 3) set(VERSION_PATCH 0) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") @@ -49,6 +49,7 @@ set(BUILD_CLIENT TRUE CACHE BOOL "Build client") set(BUILD_SERVER FALSE CACHE BOOL "Build server") +set(BUILD_UNITTESTS TRUE CACHE BOOL "Build unittests") set(WARN_ALL TRUE CACHE BOOL "Enable -Wall for Release build") @@ -102,7 +103,7 @@ set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/share/applications") set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/metainfo") set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons") - set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/locale") + set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/locale") endif() endif() @@ -166,7 +167,7 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minetest_game" DESTINATION "${SHAREDIR}/games/" COMPONENT "SUBGAME_MINETEST_GAME" OPTIONAL PATTERN ".git*" EXCLUDE ) -install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minimal" DESTINATION "${SHAREDIR}/games/" +install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/devtest" DESTINATION "${SHAREDIR}/games/" COMPONENT "SUBGAME_MINIMAL" OPTIONAL PATTERN ".git*" EXCLUDE ) if(BUILD_CLIENT) @@ -253,8 +254,8 @@ ) cpack_add_component(SUBGAME_MINIMAL - DISPLAY_NAME "Minimal development test" - DESCRIPTION "A minimal subgame helping to develop the engine." + DISPLAY_NAME "Development Test" + DESCRIPTION "A minimal test game helping to develop the engine." DISABLED #DISABLED does not mean it is disabled, and is just not selected by default. GROUP "Subgames" ) @@ -325,4 +326,3 @@ COMMENT "Generating API documentation with Doxygen" VERBATIM ) endif() - diff -Nru minetest-5.2.0/debian/changelog minetest-5.3.0/debian/changelog --- minetest-5.2.0/debian/changelog 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/debian/changelog 2020-07-09 21:13:28.000000000 +0000 @@ -1,8 +1,8 @@ -minetest (5.2.0-ppa0~ubuntu18.04.1) bionic; urgency=low +minetest (5.3.0-ppa0~ubuntu18.04.1) bionic; urgency=low * Auto build. - -- rubenwardy Sun, 05 Apr 2020 17:47:10 +0000 + -- rubenwardy Thu, 09 Jul 2020 21:13:28 +0000 minetest (0.0-0) UNRELEASED; urgency=medium diff -Nru minetest-5.2.0/debian/git-build-recipe.manifest minetest-5.3.0/debian/git-build-recipe.manifest --- minetest-5.2.0/debian/git-build-recipe.manifest 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/debian/git-build-recipe.manifest 2020-07-09 21:13:28.000000000 +0000 @@ -1,4 +1,4 @@ -# git-build-recipe format 0.4 deb-version 5.2.0-ppa0 -lp:minetest-c55 git-commit:24147d99c00b3b7677a2c2f8f47e036a6371d03b +# git-build-recipe format 0.4 deb-version 5.3.0-ppa0 +lp:minetest-c55 git-commit:057f0b82c23d5ad4efe044fe0f0d8753eb3a8bcf nest packaging lp:~minetestdevs/minetest-c55/+git/packaging debian git-commit:0bc3635323bdd991ba507ff4d7fd7e8f97e210c8 -nest minetest_game lp:~minetestdevs/minetest-c55/+git/upstream_game games/minetest_game git-commit:8863527bb62c0cb3bf19d6d2acf6ecb817e61cc2 +nest minetest_game lp:~minetestdevs/minetest-c55/+git/upstream_game games/minetest_game git-commit:8c01a5b288ce50e2f9e4ba9df26296d814842f06 diff -Nru minetest-5.2.0/doc/client_lua_api.txt minetest-5.3.0/doc/client_lua_api.txt --- minetest-5.2.0/doc/client_lua_api.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/doc/client_lua_api.txt 2020-07-09 21:13:20.000000000 +0000 @@ -1,4 +1,4 @@ -Minetest Lua Client Modding API Reference 5.2.0 +Minetest Lua Client Modding API Reference 5.3.0 ================================================ * More information at * Developer Wiki: @@ -112,7 +112,7 @@ wants to register. Subsequent execution depends on minetest calling the registered callbacks. -**NOTE**: Client mods currently can't provide and textures, sounds or models by +**NOTE**: Client mods currently can't provide textures, sounds, or models by themselves. Any media referenced in function calls must already be loaded (provided by mods that exist on the server). @@ -734,6 +734,13 @@ * `spec` is a `SimpleSoundSpec` * `parameters` is a sound parameter table * `minetest.sound_stop(handle)` + * `handle` is a handle returned by `minetest.sound_play` +* `minetest.sound_fade(handle, step, gain)` + * `handle` is a handle returned by `minetest.sound_play` + * `step` determines how fast a sound will fade. + Negative step will lower the sound volume, positive step will increase + the sound volume. + * `gain` the target gain for the fade. ### Timing * `minetest.after(time, func, ...)` @@ -797,8 +804,6 @@ * get max available level for leveled node ### Player -* `minetest.get_wielded_item()` - * Returns the itemstack the local player is holding * `minetest.send_chat_message(message)` * Act as if `message` was typed by the player into the terminal. * `minetest.run_server_chatcommand(cmd, param)` @@ -962,7 +967,7 @@ * `get_camera_mode()` * Returns 0, 1, or 2 as described above * `get_fov()` - * Returns: + * Returns a table with X, Y, maximum and actual FOV in degrees: ```lua { @@ -999,6 +1004,10 @@ * returns player HP * `get_name()` * returns player name +* `get_wield_index()` + * returns the index of the wielded item +* `get_wielded_item()` + * returns the itemstack the player is holding * `is_attached()` * returns true if player is attached * `is_touching_ground()` @@ -1022,7 +1031,8 @@ jump = float, gravity = float, sneak = boolean, - sneak_glitch = boolean + sneak_glitch = boolean, + new_move = boolean, } ``` @@ -1074,8 +1084,26 @@ * returns last look horizontal angle * `get_last_look_vertical()`: * returns last look vertical angle -* `get_key_pressed()`: - * returns last key typed by the player +* `get_control()`: + * returns pressed player controls + +```lua + { + up = boolean, + down = boolean, + left = boolean, + right = boolean, + jump = boolean, + aux1 = boolean, + sneak = boolean, + zoom = boolean, + LMB = boolean, + RMB = boolean, + } +``` + +* `get_armor_groups()` + * returns a table with the armor group ratings * `hud_add(definition)` * add a HUD element described by HUD def, returns ID number on success and `nil` on failure. * See [`HUD definition`](#hud-definition-hud_add-hud_get) @@ -1388,12 +1416,35 @@ * `offset`: offset in pixels from position. ### `waypoint` + Displays distance to selected world position. * `name`: The name of the waypoint. * `text`: Distance suffix. Can be blank. -* `number:` An integer containing the RGB value of the color used to draw the text. +* `precision`: Waypoint precision, integer >= 0. Defaults to 10. + If set to 0, distance is not shown. Shown value is `floor(distance*precision)/precision`. + When the precision is an integer multiple of 10, there will be `log_10(precision)` digits after the decimal point. + `precision = 1000`, for example, will show 3 decimal places (eg: `0.999`). + `precision = 2` will show multiples of `0.5`; precision = 5 will show multiples of `0.2` and so on: + `precision = n` will show multiples of `1/n` +* `number:` An integer containing the RGB value of the color used to draw the + text. * `world_pos`: World position of the waypoint. +* `offset`: offset in pixels from position. +* `alignment`: The alignment of the waypoint. + +### `image_waypoint` + +Same as `image`, but does not accept a `position`; the position is instead determined by `world_pos`, the world position of the waypoint. + +* `scale`: The scale of the image, with 1 being the original texture size. + Only the X coordinate scale is used (positive values). + Negative values represent that percentage of the screen it + should take; e.g. `x=-100` means 100% (width). +* `text`: The name of the texture that is displayed. +* `alignment`: The alignment of the image. +* `world_pos`: World position of the waypoint. +* `offset`: offset in pixels from position. ### Particle definition (`add_particle`) diff -Nru minetest-5.2.0/doc/Doxyfile.in minetest-5.3.0/doc/Doxyfile.in --- minetest-5.2.0/doc/Doxyfile.in 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/doc/Doxyfile.in 2020-07-09 21:13:20.000000000 +0000 @@ -20,18 +20,10 @@ "USE_GETTEXT=1" # Input -RECURSIVE = NO +RECURSIVE = YES STRIP_FROM_PATH = @CMAKE_CURRENT_SOURCE_DIR@/src INPUT = @CMAKE_CURRENT_SOURCE_DIR@/doc/main_page.dox \ - @CMAKE_CURRENT_SOURCE_DIR@/src/ \ - @CMAKE_CURRENT_SOURCE_DIR@/src/client \ - @CMAKE_CURRENT_SOURCE_DIR@/src/network \ - @CMAKE_CURRENT_SOURCE_DIR@/src/util \ - @CMAKE_CURRENT_SOURCE_DIR@/src/script \ - @CMAKE_CURRENT_SOURCE_DIR@/src/script/common \ - @CMAKE_CURRENT_SOURCE_DIR@/src/script/cpp_api \ - @CMAKE_CURRENT_SOURCE_DIR@/src/script/lua_api \ - @CMAKE_CURRENT_SOURCE_DIR@/src/threading + @CMAKE_CURRENT_SOURCE_DIR@/src/ # Dot graphs HAVE_DOT = @DOXYGEN_DOT_FOUND@ diff -Nru minetest-5.2.0/doc/fst_api.txt minetest-5.3.0/doc/fst_api.txt --- minetest-5.2.0/doc/fst_api.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/doc/fst_api.txt 2020-07-09 21:13:20.000000000 +0000 @@ -101,6 +101,9 @@ ^ cbf_events: function to handle events function(dialog, event) +messagebox(name, message) +^ creates a message dialog + Class reference dialog: methods: @@ -113,13 +116,13 @@ ^ hide dialog - delete() ^ delete dialog from ui - + members: - data ^ variable data attached to this dialog - parent ^ parent component to return to on exit - + File: fst/buttonbar.lua ----------------------- diff -Nru minetest-5.2.0/doc/lua_api.txt minetest-5.3.0/doc/lua_api.txt --- minetest-5.2.0/doc/lua_api.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/doc/lua_api.txt 2020-07-09 21:13:20.000000000 +0000 @@ -64,9 +64,21 @@ * `game.conf`, with the following keys: * `name`: Required, human readable name e.g. `name = Minetest` * `description`: Short description to be shown in the content tab + * `allowed_mapgens = ` + e.g. `allowed_mapgens = v5,v6,flat` + Mapgens not in this list are removed from the list of mapgens for + the game. + If not specified, all mapgens are allowed. * `disallowed_mapgens = ` e.g. `disallowed_mapgens = v5,v6,flat` These mapgens are removed from the list of mapgens for the game. + When both `allowed_mapgens` and `disallowed_mapgens` are + specified, `allowed_mapgens` is applied before + `disallowed_mapgens`. + * `disallowed_mapgen_settings= ` + e.g. `disallowed_mapgen_settings = mgv5_spflags` + These settings are hidden for this game in the world creation + dialog and game start menu. * `minetest.conf`: Used to set default settings when running this game. * `settingtypes.txt`: @@ -889,6 +901,7 @@ * `player_damage`: Played when the local player takes damage (gain = 0.5) * `player_falling_damage`: Played when the local player takes damage by falling (gain = 0.5) + * `player_jump`: Played when the local player jumps * `default_dig_`: Default node digging sound (see node sound definition for details) @@ -1010,22 +1023,24 @@ * Values range 0 - 179. The value stored in `param2` is multiplied by two to get the actual rotation in degrees of the node. * `paramtype2 = "meshoptions"` - * Only valid for "plantlike" drawtype. The value of `param2` becomes a - bitfield which can be used to change how the client draws plantlike nodes. - * Bits 0, 1 and 2 form a mesh selector. - Currently the following meshes are choosable: + * Only valid for "plantlike" drawtype. `param2` encodes the shape and + optional modifiers of the "plant". `param2` is a bitfield. + * Bits 0 to 2 select the shape. + Use only one of the values below: * 0 = a "x" shaped plant (ordinary plant) * 1 = a "+" shaped plant (just rotated 45 degrees) * 2 = a "*" shaped plant with 3 faces instead of 2 * 3 = a "#" shaped plant with 4 faces instead of 2 * 4 = a "#" shaped plant with 4 faces that lean outwards * 5-7 are unused and reserved for future meshes. - * Bits 3 through 7 are optional flags that can be combined and give these - effects: - * bit 3 (0x08) - Makes the plant slightly vary placement horizontally - * bit 4 (0x10) - Makes the plant mesh 1.4x larger - * bit 5 (0x20) - Moves each face randomly a small bit down (1/8 max) - * bits 6-7 are reserved for future use. + * Bits 3 to 7 are used to enable any number of optional modifiers. + Just add the corresponding value(s) below to `param2`: + * 8 - Makes the plant slightly vary placement horizontally + * 16 - Makes the plant mesh 1.4x larger + * 32 - Moves each face randomly a small bit down (1/8 max) + * values 64 and 128 (bits 6-7) are reserved for future use. + * Example: `param2 = 0` selects a normal "x" shaped plant + * Example: `param2 = 17` selects a "+" shaped plant, 1.4x larger (1+16) * `paramtype2 = "color"` * `param2` tells which color is picked from the palette. The palette should have 256 pixels. @@ -1054,7 +1069,7 @@ There are a bunch of different looking node types. -Look for examples in `games/minimal` or `games/minetest_game`. +Look for examples in `games/devtest` or `games/minetest_game`. * `normal` * A node-sized cube. @@ -1278,9 +1293,9 @@ percentage of the screen, ranging in value from `0` to `1`. The name field is not yet used, but should contain a description of what the -HUD element represents. The direction field is the direction in which something -is drawn. +HUD element represents. +The `direction` field is the direction in which something is drawn. `0` draws from left to right, `1` draws from right to left, `2` draws from top to bottom, and `3` draws from bottom to top. @@ -1299,7 +1314,21 @@ The `z_index` field specifies the order of HUD elements from back to front. Lower z-index elements are displayed behind higher z-index elements. Elements with same z-index are displayed in an arbitrary order. Default 0. -Supports negative values. +Supports negative values. By convention, the following values are recommended: + +* -400: Graphical effects, such as vignette +* -300: Name tags, waypoints +* -200: Wieldhand +* -100: Things that block the player's view, e.g. masks +* 0: Default. For standard in-game HUD elements like crosshair, hotbar, + minimap, builtin statbars, etc. +* 100: Temporary text messages or notification icons +* 1000: Full-screen effects such as full-black screen or credits. + This includes effects that cover the entire screen +* Other: If your HUD element doesn't fit into any category, pick a number + between the suggested values + + Below are the specific uses for fields in each type; fields not listed for that type are ignored. @@ -1327,15 +1356,21 @@ text. Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on. * `alignment`: The alignment of the text. * `offset`: offset in pixels from position. +* `size`: size of the text. + The player-set font size is multiplied by size.x (y value isn't used). ### `statbar` -Displays a horizontal bar made up of half-images. +Displays a horizontal bar made up of half-images with an optional background. -* `text`: The name of the texture that is used. +* `text`: The name of the texture to use. +* `text2`: Optional texture name to enable a background / "off state" + texture (useful to visualize the maximal value). Both textures + must have the same size. * `number`: The number of half-textures that are displayed. If odd, will end with a vertically center-split texture. -* `direction` +* `item`: Same as `number` but for the "off state" texture +* `direction`: To which direction the images will extend to * `offset`: offset in pixels from position. * `size`: If used, will force full-image size to this value (override texture pack image size) @@ -1354,10 +1389,30 @@ * `name`: The name of the waypoint. * `text`: Distance suffix. Can be blank. +* `precision`: Waypoint precision, integer >= 0. Defaults to 10. + If set to 0, distance is not shown. Shown value is `floor(distance*precision)/precision`. + When the precision is an integer multiple of 10, there will be `log_10(precision)` digits after the decimal point. + `precision = 1000`, for example, will show 3 decimal places (eg: `0.999`). + `precision = 2` will show multiples of `0.5`; precision = 5 will show multiples of `0.2` and so on: + `precision = n` will show multiples of `1/n` * `number:` An integer containing the RGB value of the color used to draw the text. * `world_pos`: World position of the waypoint. +* `offset`: offset in pixels from position. +* `alignment`: The alignment of the waypoint. + +### `image_waypoint` +Same as `image`, but does not accept a `position`; the position is instead determined by `world_pos`, the world position of the waypoint. + +* `scale`: The scale of the image, with 1 being the original texture size. + Only the X coordinate scale is used (positive values). + Negative values represent that percentage of the screen it + should take; e.g. `x=-100` means 100% (width). +* `text`: The name of the texture that is displayed. +* `alignment`: The alignment of the image. +* `world_pos`: World position of the waypoint. +* `offset`: offset in pixels from position. @@ -1611,6 +1666,7 @@ * `2`: the node always gets the digging time 0.5 seconds (rail, sign) * `3`: the node always gets the digging time 0 seconds (torch) * `disable_jump`: Player (and possibly other things) cannot jump from node + or if their feet are in the node. Note: not supported for `new_move = false` * `fall_damage_add_percent`: damage speed = `speed * (1 + value/100)` * `falling_node`: if there is no walkable block under the node it will fall * `float`: the node will not fall through liquids @@ -2071,6 +2127,26 @@ * End of a container, following elements are no longer relative to this container. +### `scroll_container[,;,;;;]` + +* Start of a scroll_container block. All contained elements will ... + * take the scroll_container coordinate as position origin, + * be additionally moved by the current value of the scrollbar with the name + `scrollbar name` times `scroll factor` along the orientation `orientation` and + * be clipped to the rectangle defined by `X`, `Y`, `W` and `H`. +* `orientation`: possible values are `vertical` and `horizontal`. +* `scroll factor`: optional, defaults to `0.1`. +* Nesting is possible. +* Some elements might work a little different if they are in a scroll_container. +* Note: If you want the scroll_container to actually work, you also need to add a + scrollbar element with the specified name. Furthermore, it is highly recommended + to use a scrollbaroptions element on this scrollbar. + +### `scroll_container_end[]` + +* End of a scroll_container, following elements are no longer bound to this + container. + ### `list[;;,;,;]` * Show an inventory list if it has been sent to the client. Nothing will @@ -2178,12 +2254,12 @@ * 9-sliced background. See https://en.wikipedia.org/wiki/9-slice_scaling * Middle is a rect which defines the middle of the 9-slice. - * `x` - The middle will be x pixels from all sides. - * `x,y` - The middle will be x pixels from the horizontal and y from the vertical. - * `x,y,x2,y2` - The middle will start at x,y, and end at x2, y2. Negative x2 and y2 values - will be added to the width and height of the texture, allowing it to be used as the - distance from the far end. - * All numbers in middle are integers. + * `x` - The middle will be x pixels from all sides. + * `x,y` - The middle will be x pixels from the horizontal and y from the vertical. + * `x,y,x2,y2` - The middle will start at x,y, and end at x2, y2. Negative x2 and y2 values + will be added to the width and height of the texture, allowing it to be used as the + distance from the far end. + * All numbers in middle are integers. * Example for formspec 8x4 in 16x resolution: image shall be sized 8 times 16px times 4 times 16px * If `auto_clip` is `true`, the background is clipped to the formspec size @@ -2332,8 +2408,8 @@ * `name` fieldname data is transferred to Lua * `caption 1`...: name shown on top of tab * `current_tab`: index of selected tab 1... -* `transparent` (optional): show transparent -* `draw_border` (optional): draw border +* `transparent` (optional): if true, tabs are semi-transparent +* `draw_border` (optional): if true, draw a thin line at tab base ### `tabheader[,;;;,,...,;;;]` @@ -2498,16 +2574,28 @@ * `span=`: number of following columns to affect (default: infinite). -### `style[,,...;;;...]` +### `style[,;;;...]` -* Set the style for the named element(s) `name`. +* Set the style for the element(s) matching `selector` by name. +* `selector` can be one of: + * `` - An element name. Includes `*`, which represents every element. + * `:` - An element name, a colon, and one or more states. +* `state` is a list of states separated by the `+` character. + * If a state is provided, the style will only take effect when the element is in that state. + * All provided states must be active for the style to apply. * Note: this **must** be before the element is defined. * See [Styling Formspecs]. -### `style_type[,,...;;;...]` +### `style_type[,;;;...]` -* Sets the style for all elements of type(s) `type` which appear after this element. +* Set the style for the element(s) matching `selector` by type. +* `selector` can be one of: + * `` - An element type. Includes `*`, which represents every element. + * `:` - An element type, a colon, and one or more states. +* `state` is a list of states separated by the `+` character. + * If a state is provided, the style will only take effect when the element is in that state. + * All provided states must be active for the style to apply. * See [Styling Formspecs]. Migrating to Real Coordinates @@ -2550,23 +2638,34 @@ Formspec elements can be themed using the style elements: - style[,,...;;;...] - style_type[,,...;;;...] + style[,;;;...] + style[:,:;;;...] + style_type[,;;;...] + style_type[:,:;;;...] Where a prop is: property_name=property_value +For example: + + style_type[button;bgcolor=#006699] + style[world_delete;bgcolor=red;textcolor=yellow] + button[4,3.95;2.6,1;world_delete;Delete] + A name/type can optionally be a comma separated list of names/types, like so: world_delete,world_create,world_configure button,image_button -For example: +A `*` type can be used to select every element in the formspec. - style_type[button;bgcolor=#006699] - style[world_delete;bgcolor=red;textcolor=yellow] - button[4,3.95;2.6,1;world_delete;Delete] +Any name/type in the list can also be accompanied by a `+`-separated list of states, like so: + + world_delete:hovered+pressed + button:pressed + +States allow you to apply styles in response to changes in the element, instead of applying at all times. Setting a property to nothing will reset it to the default value. For example: @@ -2607,14 +2706,22 @@ * alpha - boolean, whether to draw alpha in bgimg. Default true. * bgcolor - color, sets button tint. * bgcolor_hovered - color when hovered. Defaults to a lighter bgcolor when not provided. + * This is deprecated, use states instead. * bgcolor_pressed - color when pressed. Defaults to a darker bgcolor when not provided. + * This is deprecated, use states instead. * bgimg - standard background image. Defaults to none. * bgimg_hovered - background image when hovered. Defaults to bgimg when not provided. + * This is deprecated, use states instead. * bgimg_middle - Makes the bgimg textures render in 9-sliced mode and defines the middle rect. - See background9[] documentation for more details + See background9[] documentation for more details. This property also pads the + button's content when set. * bgimg_pressed - background image when pressed. Defaults to bgimg when not provided. + * This is deprecated, use states instead. * border - boolean, draw border. Set to false to hide the bevelled button pane. Default true. + * content_offset - 2d vector, shifts the position of the button's content without resizing it. * noclip - boolean, set to true to allow the element to exceed formspec bounds. + * padding - rect, adds space between the edges of the button and the content. This value is + relative to bgimg_middle. * textcolor - color, default white. * checkbox * noclip - boolean, set to true to allow the element to exceed formspec bounds. @@ -2638,12 +2745,22 @@ * image_button (additional properties) * fgimg - standard image. Defaults to none. * fgimg_hovered - image when hovered. Defaults to fgimg when not provided. + * This is deprecated, use states instead. * fgimg_pressed - image when pressed. Defaults to fgimg when not provided. + * This is deprecated, use states instead. * NOTE: The parameters of any given image_button will take precedence over fgimg/fgimg_pressed * tabheader * noclip - boolean, set to true to allow the element to exceed formspec bounds. * textcolor - color. Default white. +### Valid States + +* *all elements* + * default - Equivalent to providing no states +* button, button_exit, image_button, item_image_button + * hovered - Active when the mouse is hovering over the element + * pressed - Active when the button is pressed + Markup Language --------------- @@ -2896,6 +3013,24 @@ * `vector.divide(v, x)`: * Returns a scaled vector or Schur quotient. +For the following functions `a` is an angle in radians and `r` is a rotation +vector ({x = , y = , z = }) where pitch, yaw and roll are +angles in radians. + +* `vector.rotate(v, r)`: + * Applies the rotation `r` to `v` and returns the result. + * `vector.rotate({x = 0, y = 0, z = 1}, r)` and + `vector.rotate({x = 0, y = 1, z = 0}, r)` return vectors pointing + forward and up relative to an entity's rotation `r`. +* `vector.rotate_around_axis(v1, v2, a)`: + * Returns `v1` rotated around axis `v2` by `a` radians according to + the right hand rule. +* `vector.dir_to_rotation(direction[, up])`: + * Returns a rotation vector for `direction` pointing forward using `up` + as the up vector. + * If `up` is omitted, the roll of the returned vector defaults to zero. + * Otherwise `direction` and `up` need to be vectors in a 90 degree angle to each other. + @@ -3096,8 +3231,22 @@ `minetest.translate`, but is in translation files. * `@n` acts as a literal newline as well. +Server side translations +------------------------ + +On some specific cases, server translation could be useful. For example, filter +a list on labels and send results to client. A method is supplied to achieve +that: + +`minetest.get_translated_string(lang_code, string)`: Translates `string` using +translations for `lang_code` language. It gives the same result as if the string +was translated by the client. +The `lang_code` to use for a given player can be retrieved from +the table returned by `minetest.get_player_information(name)`. +IMPORTANT: This functionality should only be used for sorting, filtering or similar purposes. +You do not need to use this to get translated strings to show up on the client. Perlin noise ============ @@ -3170,9 +3319,9 @@ preferable for this to be different from other seeds, but sometimes it is useful to be able to create identical noise patterns. -When used in mapgen this is actually a 'seed offset', it is added to the -'world seed' to create the seed used by the noise, to ensure the noise has a -different pattern in different worlds. +In some noise APIs the world seed is added to the seed specified in noise +parameters. This is done to make the resulting noise pattern vary in different +worlds, and be 'world-specific'. ### `octaves` @@ -4053,6 +4202,8 @@ area_store_persistent_ids = true, -- Whether minetest.find_path is functional (5.2.0) pathfinder_works = true, + -- Whether Collision info is available to an objects' on_step (5.3.0) + object_step_has_moveresult = true, } * `minetest.has_feature(arg)`: returns `boolean, missing_features` @@ -4064,16 +4215,18 @@ { address = "127.0.0.1", -- IP address of client ip_version = 4, -- IPv4 / IPv6 + connection_uptime = 200, -- seconds since client connected + protocol_version = 32, -- protocol version used by client + formspec_version = 2, -- supported formspec version + lang_code = "fr" -- Language code used for translation + -- the following keys can be missing if no stats have been collected yet min_rtt = 0.01, -- minimum round trip time max_rtt = 0.2, -- maximum round trip time avg_rtt = 0.02, -- average round trip time min_jitter = 0.01, -- minimum packet time jitter max_jitter = 0.5, -- maximum packet time jitter avg_jitter = 0.03, -- average packet time jitter - connection_uptime = 200, -- seconds since client connected - protocol_version = 32, -- protocol version used by client - formspec_version = 2, -- supported formspec version - -- following information is available on debug build only!!! + -- the following information is available in a debug build only!!! -- DO NOT USE IN MODS --ser_vers = 26, -- serialization version used by client --major = 0, -- major version number @@ -4246,7 +4399,7 @@ * Called after generating a piece of world. Modifying nodes inside the area is a bit faster than usually. * `minetest.register_on_newplayer(function(ObjectRef))` - * Called after a new player has been created + * Called when a new player enters the world for the first time * `minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage))` * Called when a player is punched * Note: This callback is invoked even if the punched player is dead. @@ -4287,19 +4440,23 @@ * Called _before_ repositioning of player occurs * return true in func to disable regular player placement * `minetest.register_on_prejoinplayer(function(name, ip))` - * Called before a player joins the game - * If it returns a string, the player is disconnected with that string as + * Called when a client connects to the server, prior to authentication + * If it returns a string, the client is disconnected with that string as reason. -* `minetest.register_on_joinplayer(function(ObjectRef))` +* `minetest.register_on_joinplayer(function(ObjectRef, last_login))` * Called when a player joins the game + * `last_login`: The timestamp of the previous login, or nil if player is new * `minetest.register_on_leaveplayer(function(ObjectRef, timed_out))` * Called when a player leaves the game * `timed_out`: True for timeout, false for other reasons. +* `minetest.register_on_authplayer(function(name, ip, is_success))` + * Called when a client attempts to log into an account. + * `name`: The name of the account being authenticated. + * `ip`: The IP address of the client + * `is_success`: Whether the client was successfully authenticated + * For newly registered accounts, `is_success` will always be true * `minetest.register_on_auth_fail(function(name, ip))` - * Called when a client attempts to log into an account but supplies the - wrong password. - * `ip`: The IP address of the client. - * `name`: The account the client attempted to log into. + * Deprecated: use `minetest.register_on_authplayer(name, ip, is_success)` instead. * `minetest.register_on_cheat(function(ObjectRef, cheat))` * Called when a player cheats * `cheat`: `{type=}`, where `` is one of: @@ -4362,7 +4519,7 @@ * The same as before, except that it is called before the player crafts, to make craft prediction, and it should not change anything. * `minetest.register_allow_player_inventory_action(function(player, action, inventory, inventory_info))` - * Determinates how much of a stack may be taken, put or moved to a + * Determines how much of a stack may be taken, put or moved to a player inventory. * `player` (type `ObjectRef`) is the player who modified the inventory `inventory` (type `InvRef`). @@ -4569,8 +4726,11 @@ * Return value: Table with all node positions with a node air above * Area volume is limited to 4,096,000 nodes * `minetest.get_perlin(noiseparams)` + * Return world-specific perlin noise. + * The actual seed used is the noiseparams seed plus the world seed. * `minetest.get_perlin(seeddiff, octaves, persistence, spread)` - * Return world-specific perlin noise (`int(worldseed)+seeddiff`) + * Deprecated: use `minetest.get_perlin(noiseparams)` instead. + * Return world-specific perlin noise. * `minetest.get_voxel_manip([pos1, pos2])` * Return voxel manipulator object. * Loads the manipulator from the map if positions are passed. @@ -4751,7 +4911,7 @@ * `minetest.add_node_level(pos, level)` * increase level of leveled node by level, default `level` equals `1` * if `totallevel > maxlevel`, returns rest (`total-max`) - * can be negative for decreasing + * `level` must be between -127 and 127 * `minetest.fix_light(pos1, pos2)`: returns `true`/`false` * resets the light in a cuboid-shaped part of the map and removes lighting bugs. @@ -5063,6 +5223,20 @@ * Returns a code (0: successful, 1: no such player, 2: player is connected) * `minetest.remove_player_auth(name)`: remove player authentication data * Returns boolean indicating success (false if player nonexistant) +* `minetest.dynamic_add_media(filepath)` + * Adds the file at the given path to the media sent to clients by the server + on startup and also pushes this file to already connected clients. + The file must be a supported image, sound or model format. It must not be + modified, deleted, moved or renamed after calling this function. + The list of dynamically added media is not persisted. + * Returns boolean indicating success (duplicate files count as error) + * The media will be ready to use (in e.g. entity textures, sound_play) + immediately after calling this function. + Old clients that lack support for this feature will not see the media + unless they reconnect to the server. + * Since media transferred this way does not use client caching or HTTP + transfers, dynamic media should not be used with big files or performance + will suffer. Bans ---- @@ -5318,7 +5492,7 @@ * Example: `minetest.rgba(10, 20, 30, 40)`, returns `"#0A141E28"` * `minetest.encode_base64(string)`: returns string encoded in base64 * Encodes a string in base64. -* `minetest.decode_base64(string)`: returns string +* `minetest.decode_base64(string)`: returns string or nil for invalid base64 * Decodes a string encoded in base64. * `minetest.is_protected(pos, name)`: returns boolean * Returning `true` restricts the player `name` from modifying (i.e. digging, @@ -5340,6 +5514,13 @@ * `minetest.record_protection_violation(pos, name)` * This function calls functions registered with `minetest.register_on_protection_violation`. +* `minetest.is_creative_enabled(name)`: returns boolean + * Returning `true` means that Creative Mode is enabled for player `name`. + * `name` will be `""` for non-players or if the player is unknown. + * This function should be overridden by Creative Mode-related mods to + implement a per-player Creative Mode. + * By default, this function returns `true` if the setting + `creative_mode` is `true` and `false` otherwise. * `minetest.is_area_protected(pos1, pos2, player_name, interval)` * Returns the position of the first node that `player_name` may not modify in the specified cuboid between `pos1` and `pos2`. @@ -5403,8 +5584,8 @@ insecure functions if the calling mod has been listed as trusted in the `secure.trusted_mods` setting or security is disabled, otherwise returns `nil`. - * Only works at init time and must be called from the mod's main scope (not - from a function). + * Only works at init time and must be called from the mod's main scope + (ie: the init.lua of the mod, not from another Lua file or within a function). * **DO NOT ALLOW ANY OTHER MODS TO ACCESS THE RETURNED ENVIRONMENT, STORE IT IN A LOCAL VARIABLE!** @@ -5897,15 +6078,18 @@ * max: bubbles bar is not shown * See [Object properties] for more information * Is limited to range 0 ... 65535 (2^16 - 1) -* `set_fov(fov, is_multiplier)`: Sets player's FOV +* `set_fov(fov, is_multiplier, transition_time)`: Sets player's FOV * `fov`: FOV value. * `is_multiplier`: Set to `true` if the FOV value is a multiplier. Defaults to `false`. - * Set to 0 to clear FOV override. -* `get_fov()`: - * Returns player's FOV override in degrees, and a boolean depending on whether - the value is a multiplier. - * Returns 0 as first value if player's FOV hasn't been overridden. + * `transition_time`: If defined, enables smooth FOV transition. + Interpreted as the time (in seconds) to reach target FOV. + If set to 0, FOV change is instantaneous. Defaults to 0. + * Set `fov` to 0 to clear FOV override. +* `get_fov()`: Returns the following: + * Server-sent FOV value. Returns 0 if an FOV override doesn't exist. + * Boolean indicating whether the FOV value is a multiplier. + * Time (in seconds) taken for the FOV transition. Set by `set_fov`. * `set_attribute(attribute, value)`: DEPRECATED, use get_meta() instead * Sets an extra attribute with value on player. * `value` must be a string, or a number which will be converted to a @@ -5928,13 +6112,14 @@ * `get_formspec_prepend(formspec)`: returns a formspec string. * `get_player_control()`: returns table with player pressed keys * The table consists of fields with boolean value representing the pressed - keys, the fields are jump, right, left, LMB, RMB, sneak, aux1, down, up. + keys, the fields are jump, right, left, LMB, RMB, sneak, aux1, down, up, zoom. * example: `{jump=false, right=true, left=false, LMB=false, RMB=false, - sneak=true, aux1=false, down=false, up=false}` + sneak=true, aux1=false, down=false, up=false, zoom=false}` + * The `zoom` field is available since 5.3 * `get_player_control_bits()`: returns integer with bit packed player pressed keys. * bit nr/meaning: 0/up, 1/down, 2/left, 3/right, 4/jump, 5/aux1, 6/sneak, - 7/LMB, 8/RMB + 7/LMB, 8/RMB, 9/zoom (zoom available since 5.3) * `set_physics_override(override_table)` * `override_table` is a table with the following fields: * `speed`: multiplier to default walking speed value (default: `1`) @@ -5992,7 +6177,7 @@ * `sky_color`: A table containing the following values, alpha is ignored: * `day_sky`: ColorSpec, for the top half of the `"regular"` sky during the day. (default: `#8cbafa`) - * `day_horizon`: ColorSpec, for the bottom half of the + * `day_horizon`: ColorSpec, for the bottom half of the `"regular"` sky during the day. (default: `#9bc1f0`) * `dawn_sky`: ColorSpec, for the top half of the `"regular"` sky during dawn/sunset. (default: `#b4bafa`) @@ -6010,7 +6195,7 @@ sky during the night. (default: `#4090ff`) The resulting sky color will be a dark version of the ColorSpec. Warning: The darkening of the ColorSpec is subject to change. - * `indoors`: ColorSpec, for when you're either indoors or + * `indoors`: ColorSpec, for when you're either indoors or underground. Only applies to the `"regular"` sky. (default: `#646464`) * `fog_sun_tint`: ColorSpec, changes the fog tinting for the sun @@ -6054,7 +6239,7 @@ * `parameters` is a table with the following optional fields: * `visible`: Boolean for whether the stars are visible. (default: `true`) - * `count`: Integer number to set the number of stars in + * `count`: Integer number to set the number of stars in the skybox. Only applies to `"skybox"` and `"regular"` sky types. (default: `1000`) * `star_color`: ColorSpec, sets the colors of the stars, @@ -6127,10 +6312,15 @@ ------------- A perlin noise generator. -It can be created via `PerlinNoise(seed, octaves, persistence, spread)` -or `PerlinNoise(noiseparams)`. -Alternatively with `minetest.get_perlin(seeddiff, octaves, persistence, spread)` -or `minetest.get_perlin(noiseparams)`. +It can be created via `PerlinNoise()` or `minetest.get_perlin()`. +For `minetest.get_perlin()`, the actual seed used is the noiseparams seed +plus the world seed, to create world-specific noise. + +`PerlinNoise(noiseparams)` +`PerlinNoise(seed, octaves, persistence, spread)` (Deprecated). + +`minetest.get_perlin(noiseparams)` +`minetest.get_perlin(seeddiff, octaves, persistence, spread)` (Deprecated). ### Methods @@ -6144,6 +6334,8 @@ It can be created via `PerlinNoiseMap(noiseparams, size)` or `minetest.get_perlin_map(noiseparams, size)`. +For `minetest.get_perlin_map()`, the actual seed used is the noiseparams seed +plus the world seed, to create world-specific noise. Format of `size` is `{x=dimx, y=dimy, z=dimz}`. The `z` component is omitted for 2D noise, and it must be must be larger than 1 for 3D noise (otherwise @@ -6416,6 +6608,7 @@ automatic_rotate = 0, -- Set constant rotation in radians per second, positive or negative. + -- Object rotates along the local Y-axis, and works with set_rotation. -- Set to 0 to disable constant rotation. stepheight = 0, @@ -6454,6 +6647,12 @@ -- deleted when the block gets unloaded. -- The get_staticdata() callback is never called then. -- Defaults to 'true'. + + damage_texture_modifier = "^[brighten", + -- Texture modifier to be applied for a short duration when object is hit + + shaded = true, + -- Setting this to 'false' disables diffuse lighting of entity } Entity definition @@ -6474,7 +6673,10 @@ on_activate = function(self, staticdata, dtime_s), - on_step = function(self, dtime), + on_step = function(self, dtime, moveresult), + -- Called every server step + -- dtime: Elapsed time + -- moveresult: Table with collision info (only available if physical=true) on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir), @@ -6489,6 +6691,25 @@ -- for more info) by using a '_' prefix } +Collision info passed to `on_step`: + + { + touching_ground = boolean, + collides = boolean, + standing_on_object = boolean, + collisions = { + { + type = string, -- "node" or "object", + axis = string, -- "x", "y" or "z" + node_pos = vector, -- if type is "node" + object = ObjectRef, -- if type is "object" + old_velocity = vector, + new_velocity = vector, + }, + ... + } + } + ABM (ActiveBlockModifier) definition ------------------------------------ @@ -6655,6 +6876,8 @@ wield_scale = {x = 1, y = 1, z = 1}, + -- The default value of 99 may be configured by + -- users using the setting "default_stack_max" stack_max = 99, range = 4.0, @@ -6760,7 +6983,7 @@ visual_scale = 1.0, -- Supported for drawtypes "plantlike", "signlike", "torchlike", - -- "firelike", "mesh". + -- "firelike", "mesh", "nodebox", "allfaces". -- For plantlike and firelike, the image will start at the bottom of the -- node. For torchlike, the image will start at the surface to which the -- node "attaches". For the other drawtypes the image will be centered @@ -6843,11 +7066,15 @@ -- If true, a new liquid source can be created by placing two or more -- sources nearby - leveled = 16, + leveled = 0, -- Only valid for "nodebox" drawtype with 'type = "leveled"'. -- Allows defining the nodebox height without using param2. -- The nodebox height is 'leveled' / 64 nodes. - -- The maximum value of 'leveled' is 127. + -- The maximum value of 'leveled' is `leveled_max`. + + leveled_max = 127, + -- Maximum value for `leveled` (0-127), enforced in + -- `minetest.set_node_level` and `minetest.add_node_level`. liquid_range = 8, -- Number of flowing nodes around source (max. 8) @@ -7020,6 +7247,7 @@ -- node is deleted from the world or the drops are added. This is -- generally the result of either the node being dug or an attached node -- becoming detached. + -- oldmeta is the NodeMetaRef of the oldnode before deletion. -- drops is a table of ItemStacks, so any metadata to be preserved can -- be added directly to one or more of the dropped items. See -- "ItemStackMetaRef". @@ -7044,10 +7272,14 @@ on_punch = function(pos, node, puncher, pointed_thing), -- default: minetest.node_punch + -- Called when puncher (an ObjectRef) punches the node at pos. -- By default calls minetest.register_on_punchnode callbacks. on_rightclick = function(pos, node, clicker, itemstack, pointed_thing), -- default: nil + -- Called when clicker (an ObjectRef) "rightclicks" + -- ("rightclick" here stands for the placement key) while pointing at + -- the node at pos with 'node' being the node table. -- itemstack will hold clicker's wielded item. -- Shall return the leftover itemstack. -- Note: pointed_thing can be nil, if a mod calls this function. @@ -7265,6 +7497,10 @@ Used by `minetest.register_biome`. +The maximum number of biomes that can be used is 65535. However, using an +excessive number of biomes will slow down map generation. Depending on desired +performance and computing power the practical limit is much lower. + { name = "tundra", @@ -7612,6 +7848,8 @@ text = "", + text2 = "", + number = 2, item = 3, @@ -7647,6 +7885,8 @@ size = 1, -- Scales the visual size of the particle texture. + -- If `node` is set, size can be set to 0 to spawn a randomly-sized + -- particle (just like actual node dig particles). collisiondetection = false, -- If true collides with `walkable` nodes and, depending on the @@ -7665,6 +7905,7 @@ -- If true faces player using y axis only texture = "image.png", + -- The texture of the particle playername = "singleplayer", -- Optional, if specified spawns particle only on the player's client @@ -7675,6 +7916,17 @@ glow = 0 -- Optional, specify particle self-luminescence in darkness. -- Values 0-14. + + node = {name = "ignore", param2 = 0}, + -- Optional, if specified the particle will have the same appearance as + -- node dig particles for the given node. + -- `texture` and `animation` will be ignored if this is set. + + node_tile = 0, + -- Optional, only valid in combination with `node` + -- If set to a valid number 1-6, specifies the tile from which the + -- particle texture is picked. + -- Otherwise, the default behavior is used. (currently: any random tile) } @@ -7704,7 +7956,9 @@ maxsize = 1, -- The particles' properties are random values between the min and max -- values. - -- pos, velocity, acceleration, expirationtime, size + -- applies to: pos, velocity, acceleration, expirationtime, size + -- If `node` is set, min and maxsize can be set to 0 to spawn + -- randomly-sized particles (just like actual node dig particles). collisiondetection = false, -- If true collide with `walkable` nodes and, depending on the @@ -7727,6 +7981,7 @@ -- If true face player using y axis only texture = "image.png", + -- The texture of the particle playername = "singleplayer", -- Optional, if specified spawns particles only on the player's client @@ -7737,6 +7992,17 @@ glow = 0 -- Optional, specify particle self-luminescence in darkness. -- Values 0-14. + + node = {name = "ignore", param2 = 0}, + -- Optional, if specified the particles will have the same appearance as + -- node dig particles for the given node. + -- `texture` and `animation` will be ignored if this is set. + + node_tile = 0, + -- Optional, only valid in combination with `node` + -- If set to a valid number 1-6, specifies the tile from which the + -- particle texture is picked. + -- Otherwise, the default behavior is used. (currently: any random tile) } `HTTPRequest` definition diff -Nru minetest-5.2.0/doc/menu_lua_api.txt minetest-5.3.0/doc/menu_lua_api.txt --- minetest-5.2.0/doc/menu_lua_api.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/doc/menu_lua_api.txt 2020-07-09 21:13:20.000000000 +0000 @@ -1,36 +1,55 @@ -Minetest Lua Mainmenu API Reference 5.2.0 +Minetest Lua Mainmenu API Reference 5.3.0 ========================================= Introduction ------------- + 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.txt + Callbacks --------- -core.buttonhandler(fields): called when a button is pressed. + +core.button_handler(fields): called when a button is pressed. ^ fields = {name1 = value1, name2 = value2, ...} core.event_handler(event) ^ event: "MenuQuit", "KeyEnter", "ExitButton" or "EditBoxEnter" + Gamedata -------- + The "gamedata" table is read when calling core.start(). It should contain: { - playername = , - password = , - address = , - port = , - selected_world = , -- 0 for client mode - singleplayer = , + playername = , + password = , + address = , + port = , + selected_world = , -- 0 for client mode + singleplayer = , } + Functions --------- + core.start() core.close() +core.get_min_supp_proto() +^ returns the minimum supported network protocol version +core.get_max_supp_proto() +^ returns the maximum supported network protocol version +core.open_url(url) +^ opens the URL in a web browser, returns false on failure. +^ Must begin with http:// or https:// +core.get_version() (possible in async calls) +^ returns current core version + + +Filesystem +---------- -Filesystem: core.get_builtin_path() ^ returns path to builtin root core.create_dir(absolute_path) (possible in async calls) @@ -48,12 +67,6 @@ ^ zipfile to extract ^ destination folder to extract to ^ returns true/false -core.download_file(url,target) (possible in async calls) -^ url to download -^ target to store to -^ returns true/false -core.get_version() (possible in async calls) -^ returns current core version core.sound_play(spec, looped) -> handle ^ spec = SimpleSoundSpec (see lua-api.txt) ^ looped = bool @@ -67,7 +80,82 @@ registered in the core (possible in async calls) core.get_cache_path() -> path of cache -Formspec: + +HTTP Requests +------------- + +* core.download_file(url, target) (possible in async calls) + * url to download, and target to store to + * returns true/false +* `minetest.get_http_api()` (possible in async calls) + * returns `HTTPApiTable` containing http functions. + * The returned table contains the functions `fetch_sync`, `fetch_async` and + `fetch_async_get` described below. + * Function only exists if minetest server was built with cURL support. +* `HTTPApiTable.fetch_sync(HTTPRequest req)`: returns HTTPRequestResult + * Performs given request synchronously +* `HTTPApiTable.fetch_async(HTTPRequest req)`: returns handle + * Performs given request asynchronously and returns handle for + `HTTPApiTable.fetch_async_get` +* `HTTPApiTable.fetch_async_get(handle)`: returns HTTPRequestResult + * Return response data for given asynchronous HTTP request + +### `HTTPRequest` definition + +Used by `HTTPApiTable.fetch` and `HTTPApiTable.fetch_async`. + + { + url = "http://example.org", + + timeout = 10, + -- Timeout for connection in seconds. Default is 3 seconds. + + post_data = "Raw POST request data string" OR {field1 = "data1", field2 = "data2"}, + -- Optional, if specified a POST request with post_data is performed. + -- Accepts both a string and a table. If a table is specified, encodes + -- table as x-www-form-urlencoded key-value pairs. + -- If post_data is not specified, a GET request is performed instead. + + user_agent = "ExampleUserAgent", + -- Optional, if specified replaces the default minetest user agent with + -- given string + + extra_headers = { "Accept-Language: en-us", "Accept-Charset: utf-8" }, + -- Optional, if specified adds additional headers to the HTTP request. + -- You must make sure that the header strings follow HTTP specification + -- ("Key: Value"). + + multipart = boolean + -- Optional, if true performs a multipart HTTP request. + -- Default is false. + } + +### `HTTPRequestResult` definition + +Passed to `HTTPApiTable.fetch` callback. Returned by +`HTTPApiTable.fetch_async_get`. + + { + completed = true, + -- If true, the request has finished (either succeeded, failed or timed + -- out) + + succeeded = true, + -- If true, the request was successful + + timeout = false, + -- If true, the request timed out + + code = 200, + -- HTTP status code + + data = "response" + } + + +Formspec +-------- + core.update_formspec(formspec) core.get_table_index(tablename) -> index ^ can also handle textlists @@ -82,7 +170,10 @@ core.set_formspec_prepend(formspec) ^ string to be added to every mainmenu formspec, to be used for theming. -GUI: + +GUI +--- + core.set_background(type, texturepath,[tile],[minsize]) ^ type: "background", "overlay", "header" or "footer" ^ tile: tile the image instead of scaling (background only) @@ -102,83 +193,96 @@ ^ returns nil or selected file/folder core.get_screen_info() ^ returns { - density = , - display_width = , - display_height = , - window_width = , - window_height = - } + density = , + display_width = , + display_height = , + window_width = , + window_height = + } + -### Content and Packages +Content and Packages +-------------------- Content - an installed mod, modpack, game, or texture pack (txt) Package - content which is downloadable from the content db, may or may not be installed. * core.get_modpath() (possible in async calls) - * returns path to global modpath + * returns path to global modpath * core.get_clientmodpath() (possible in async calls) - * returns path to global client-side modpath + * returns path to global client-side modpath * core.get_gamepath() (possible in async calls) - * returns path to global gamepath + * returns path to global gamepath * core.get_texturepath() (possible in async calls) - * returns path to default textures + * returns path to default textures * core.get_game(index) - * returns: + * returns: - { - id = , - path = , - gamemods_path = , - name = , - menuicon_path = , - author = "author", - DEPRECATED: - addon_mods_paths = {[1] = ,}, - } + { + id = , + path = , + gamemods_path = , + name = , + menuicon_path = , + author = "author", + DEPRECATED: + addon_mods_paths = {[1] = ,}, + } * core.get_games() -> table of all games in upper format (possible in async calls) * core.get_content_info(path) - * returns + * returns - { - name = "name of content", - type = "mod" or "modpack" or "game" or "txp", - description = "description", - author = "author", - path = "path/to/content", - depends = {"mod", "names"}, -- mods only - optional_depends = {"mod", "names"}, -- mods only - } + { + name = "name of content", + type = "mod" or "modpack" or "game" or "txp", + description = "description", + author = "author", + path = "path/to/content", + depends = {"mod", "names"}, -- mods only + optional_depends = {"mod", "names"}, -- mods only + } -Favorites: +Favorites +--------- + core.get_favorites(location) -> list of favorites (possible in async calls) ^ location: "local" or "online" ^ returns { - [1] = { - clients = , - clients_max = , - version = , - password = , - creative = , - damage = , - pvp = , - description = , - name = , - address =
, - port = - }, + [1] = { + clients = , + clients_max = , + version = , + password = , + creative = , + damage = , + pvp = , + description = , + name = , + address =
, + port = + clients_list = + mods = + }, + ... } core.delete_favorite(id, location) -> success -Logging: + +Logging +------- + core.debug(line) (possible in async calls) ^ Always printed to stderr and logfile (print() is redirected here) core.log(line) (possible in async calls) core.log(loglevel, line) (possible in async calls) ^ loglevel one of "error", "action", "info", "verbose" -Settings: + +Settings +-------- + core.settings:set(name, value) core.settings:get(name) -> string or nil (possible in async calls) core.settings:set_bool(name, value) @@ -188,19 +292,25 @@ For a complete list of methods of the Settings object see [lua_api.txt](https://github.com/minetest/minetest/blob/master/doc/lua_api.txt) -Worlds: + +Worlds +------ + core.get_worlds() -> list of worlds (possible in async calls) ^ returns { - [1] = { - path = , - name = , - gameid = , - }, + [1] = { + path = , + name = , + gameid = , + }, } core.create_world(worldname, gameid) core.delete_world(index) -Helpers: + +Helpers +------- + core.get_us_time() ^ returns time with microsecond precision core.gettext(string) -> string @@ -225,13 +335,10 @@ minetest.decode_base64(string) (possible in async calls) ^ Decodes a string encoded in base64. -Version compat: -core.get_min_supp_proto() -^ returns the minimum supported network protocol version -core.get_max_supp_proto() -^ returns the maximum supported network protocol version -Async: +Async +----- + core.handle_async(async_job,parameters,finished) ^ execute a function asynchronously ^ async_job is a function receiving one parameter and returning one parameter @@ -242,11 +349,13 @@ Limitations of Async operations -No access to global lua variables, don't even try -Limited set of available functions - e.g. No access to functions modifying menu like core.start,core.close, - core.show_path_select_dialog + e.g. No access to functions modifying menu like core.start,core.close, + core.show_path_select_dialog + Background music ---------------- + The main menu supports background music. It looks for a `main_menu` sound in `$USER_PATH/sounds`. The same naming conventions as for normal sounds apply. diff -Nru minetest-5.2.0/doc/minetest.6 minetest-5.3.0/doc/minetest.6 --- minetest-5.2.0/doc/minetest.6 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/doc/minetest.6 2020-07-09 21:13:20.000000000 +0000 @@ -105,12 +105,12 @@ leveldb, redis, postgresql, and dummy. .TP .B \-\-migrate-auth -Migrate from current auth backend to another. Possible values are sqlite3 and -files. +Migrate from current auth backend to another. Possible values are sqlite3, +leveldb, and files. .TP .B \-\-migrate-players Migrate from current players backend to another. Possible values are sqlite3, -postgresql, dummy, and files. +leveldb, postgresql, dummy, and files. .TP .B \-\-terminal Display an interactive terminal over ncurses during execution. diff -Nru minetest-5.2.0/doc/mkdocs/lua_highlight.patch minetest-5.3.0/doc/mkdocs/lua_highlight.patch --- minetest-5.2.0/doc/mkdocs/lua_highlight.patch 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/doc/mkdocs/lua_highlight.patch 2020-07-09 21:13:20.000000000 +0000 @@ -1,4 +1,4 @@ -@@ -77,7 +77,7 @@ +@@ -75,7 +75,7 @@ css_class="codehilite", lang=None, style='default', noclasses=False, tab_length=4, hl_lines=None, use_pygments=True): self.src = src @@ -7,13 +7,3 @@ self.linenums = linenums self.guess_lang = guess_lang self.css_class = css_class -@@ -119,7 +119,8 @@ - cssclass=self.css_class, - style=self.style, - noclasses=self.noclasses, -- hl_lines=self.hl_lines) -+ hl_lines=self.hl_lines, -+ wrapcode=True) - return highlight(self.src, lexer, formatter) - else: - # just escape and build markup usable by JS highlighting libs diff -Nru minetest-5.2.0/doc/README.android minetest-5.3.0/doc/README.android --- minetest-5.2.0/doc/README.android 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/doc/README.android 2020-07-09 21:13:20.000000000 +0000 @@ -1,6 +1,5 @@ -Minetest Android port -===================== -Date: 2014 06 28 +Minetest: Android version +========================= Controls -------- @@ -40,25 +39,6 @@ main menu is too big or small on your device, try changing this value. -Known issues ------------- -Not all issues are fixed by now: - -* Unable to exit from volume menu -- don't use the volume menu, use Android's - volume controls instead. -* 512 MB RAM seems to be inadequate -- this depends on the server you join. - Try to play on more lightweight servers. - -Versioning ----------- -Android version numbers are 4 digits instead of Minetest's 3 digits. The last -number of Android's version represents the Android internal version code. This -version code is strictly incremental. It's incremented for each official -Minetest Android build. - -E.g. prerelease Minetest Android builds have been 0.4.9.3, while the first -official version most likely will be 0.4.10.4 - Requirements ------------ @@ -69,9 +49,9 @@ version that was tested at the time this README was drafted; newer/older versions may or may not work. -* android SDK (api-26) -* android NDK (r17c) -* wget (1.13.4) +* Android SDK 29 +* Android NDK r21 +* Android Studio 3 [optional] Additionally, you'll need to have an Internet connection available on the build system, as the Android build will download some source packages. @@ -79,16 +59,15 @@ Build ----- -Debug build: -* Enter "build/android" subdirectory -* Execute "make" -* Answer the questions about where SDK and NDK are located on your filesystem -* Wait for build to finish - -After the build is finished, the resulting apk can be fond in -build/android/bin/. It will be called Minetest-debug.apk - -Release build: +The new build system Minetest Android is fully functional and is designed to +speed up and simplify the work, as well as adding the possibility of +cross-platform build. +You can use `./gradlew assemblerelease` or `./gradlew assembledebug` from the +command line or use Android Studio and click the build button. + +When using gradlew, the newest NDK will be downloaded and installed +automatically. Or you can create a `local.properties` file and specify +`sdk.dir` and `ndk.dir` yourself. * In order to make a release build you'll have to have a keystore setup to sign the resulting apk package. How this is done is not part of this README. There @@ -97,32 +76,6 @@ * Once your keystore is setup, enter build/android subdirectory and create a new file "ant.properties" there. Add following lines to that file: - + > key.store= > key.alias=Minetest - -* Execute "make release" -* Enter your keystore as well as your Mintest key password once asked. Be - careful it's shown on console in clear text! -* The result can be found at "bin/Minetest-release.apk" - -Other things that may be nice to know ------------- -* The environment for Android development tools is saved within Android build - build folder. If you want direct access to it do: - - > make envpaths - > . and_env - - After you've done this you'll have your path and path variables set correct - to use adb and all other Android development tools - -* You can build a single dependency by calling make and the dependency's name, - e.g.: - - > make irrlicht - -* You can completely cleanup a dependency by calling make and the "clean" target, - e.g.: - - > make clean_irrlicht diff -Nru minetest-5.2.0/doc/texture_packs.txt minetest-5.3.0/doc/texture_packs.txt --- minetest-5.2.0/doc/texture_packs.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/doc/texture_packs.txt 2020-07-09 21:13:20.000000000 +0000 @@ -64,6 +64,8 @@ * `bubble.png`: the bubble texture when the player is drowning (default size: 12×12) +* `bubble_gone.png`: like `bubble.png`, but denotes lack of breath + (transparent by default, same size as bubble.png) * `crack_anylength.png`: node overlay texture when digging @@ -76,6 +78,8 @@ * `heart.png`: used to display the health points of the player (default size: 12×12) +* `heart_gone.png`: like `heart.png`, but denotes lack of health points + (transparent by default, same size as heart.png) * `minimap_mask_round.png`: round minimap mask, white gets replaced by the map * `minimap_mask_square.png`: mask used for the square minimap @@ -145,34 +149,51 @@ Texture Overrides ----------------- -You can override the textures of a node from a texture pack using -texture overrides. To do this, create a file in a texture pack -called override.txt +You can override the textures of nodes and items from a +texture pack using texture overrides. To do this, create one or +more files in a texture pack called override.txt Each line in an override.txt file is a rule. It consists of - nodename face-selector texture + itemname target texture For example, default:dirt_with_grass sides default_stone.png -You can use ^ operators as usual: +or + + default:sword_steel inventory my_steel_sword.png + +You can list multiple targets on one line as a comma-separated list: + + default:tree top,bottom my_special_tree.png + +You can use texture modifiers, as usual: default:dirt_with_grass sides default_stone.png^[brighten -Here are face selectors you can choose from: +Finally, if a line is empty or starts with '#' it will be considered +a comment and not read as a rule. You can use this to better organize +your override.txt files. + +Here are targets you can choose from: -| face-selector | behavior | +| target | behavior | |---------------|---------------------------------------------------| -| left | x- | -| right | x+ | -| front | z- | -| back | z+ | -| top | y+ | -| bottom | y- | -| sides | x-, x+, z-, z+ | +| left | x- face | +| right | x+ face | +| front | z- face | +| back | z+ face | +| top | y+ face | +| bottom | y- face | +| sides | x-, x+, z-, z+ faces | | all | All faces. You can also use '*' instead of 'all'. | +| inventory | The inventory texture | +| wield | The texture used when held by the player | + +Nodes support all targets, but other items only support 'inventory' +and 'wield' Designing leaves textures for the leaves rendering options ---------------------------------------------------------- diff -Nru minetest-5.2.0/Dockerfile minetest-5.3.0/Dockerfile --- minetest-5.2.0/Dockerfile 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/Dockerfile 2020-07-09 21:13:20.000000000 +0000 @@ -1,32 +1,59 @@ -FROM debian:stretch +FROM alpine:3.11 -USER root -RUN apt-get update -y && \ - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev \ - libsqlite3-dev libcurl4-gnutls-dev zlib1g-dev libgmp-dev libjsoncpp-dev git +ENV MINETEST_GAME_VERSION master -COPY . /usr/src/minetest - -RUN mkdir -p /usr/src/minetest/cmakebuild && cd /usr/src/minetest/cmakebuild && \ - cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE \ +COPY .git /usr/src/minetest/.git +COPY CMakeLists.txt /usr/src/minetest/CMakeLists.txt +COPY README.md /usr/src/minetest/README.md +COPY minetest.conf.example /usr/src/minetest/minetest.conf.example +COPY builtin /usr/src/minetest/builtin +COPY cmake /usr/src/minetest/cmake +COPY doc /usr/src/minetest/doc +COPY fonts /usr/src/minetest/fonts +COPY lib /usr/src/minetest/lib +COPY misc /usr/src/minetest/misc +COPY po /usr/src/minetest/po +COPY src /usr/src/minetest/src +COPY textures /usr/src/minetest/textures + +WORKDIR /usr/src/minetest + +RUN apk add --no-cache git build-base irrlicht-dev cmake bzip2-dev libpng-dev \ + jpeg-dev libxxf86vm-dev mesa-dev sqlite-dev libogg-dev \ + libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev \ + gmp-dev jsoncpp-dev postgresql-dev ca-certificates && \ + git clone --depth=1 -b ${MINETEST_GAME_VERSION} https://github.com/minetest/minetest_game.git ./games/minetest_game && \ + rm -fr ./games/minetest_game/.git + +WORKDIR /usr/src/ +RUN git clone --recursive https://github.com/jupp0r/prometheus-cpp/ && \ + mkdir prometheus-cpp/build && \ + cd prometheus-cpp/build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_BUILD_TYPE=Release \ + -DENABLE_TESTING=0 && \ + make -j2 && \ + make install + +WORKDIR /usr/src/minetest +RUN mkdir build && \ + cd build && \ + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SERVER=TRUE \ - -DBUILD_CLIENT=FALSE \ - -DENABLE_SYSTEM_JSONCPP=1 \ - .. && \ - make -j2 && \ - rm -Rf ../games/minetest_game && git clone --depth 1 https://github.com/minetest/minetest_game ../games/minetest_game && \ - rm -Rf ../games/minetest_game/.git && \ - make install - -FROM debian:stretch - -USER root -RUN groupadd minetest && useradd -m -g minetest -d /var/lib/minetest minetest && \ - apt-get update -y && \ - apt-get -y install libcurl3-gnutls libjsoncpp1 liblua5.1-0 libluajit-5.1-2 libpq5 libsqlite3-0 \ - libstdc++6 zlib1g libc6 && \ - apt-get clean && rm -rf /var/cache/apt/archives/* && \ - rm -rf /var/lib/apt/lists/* + -DENABLE_PROMETHEUS=TRUE \ + -DBUILD_UNITTESTS=FALSE \ + -DBUILD_CLIENT=FALSE && \ + make -j2 && \ + make install + +FROM alpine:3.11 + +RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc libpq && \ + adduser -D minetest --uid 30000 -h /var/lib/minetest && \ + chown -R minetest:minetest /var/lib/minetest WORKDIR /var/lib/minetest @@ -34,8 +61,8 @@ COPY --from=0 /usr/local/bin/minetestserver /usr/local/bin/minetestserver COPY --from=0 /usr/local/share/doc/minetest/minetest.conf.example /etc/minetest/minetest.conf -USER minetest +USER minetest:minetest -EXPOSE 30000/udp +EXPOSE 30000/udp 30000/tcp CMD ["/usr/local/bin/minetestserver", "--config", "/etc/minetest/minetest.conf"] diff -Nru minetest-5.2.0/games/devtest/game.conf minetest-5.3.0/games/devtest/game.conf --- minetest-5.2.0/games/devtest/game.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/game.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = Development Test +description = Testing environment to help with testing the engine features of Minetest. It can also be helpful in mod development. diff -Nru minetest-5.2.0/games/devtest/LICENSE.txt minetest-5.3.0/games/devtest/LICENSE.txt --- minetest-5.2.0/games/devtest/LICENSE.txt 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/LICENSE.txt 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,4 @@ +License information for Development Test +---------------------------------------- + +The same license as for Minetest applies. Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/menu/background.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/menu/background.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/menu/header.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/menu/header.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/menu/icon.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/menu/icon.png differ diff -Nru minetest-5.2.0/games/devtest/mods/basenodes/init.lua minetest-5.3.0/games/devtest/mods/basenodes/init.lua --- minetest-5.2.0/games/devtest/mods/basenodes/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/basenodes/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,334 @@ +local WATER_ALPHA = 160 +local WATER_VISC = 1 +local LAVA_VISC = 7 + +-- +-- Node definitions +-- + +-- Register nodes + +minetest.register_node("basenodes:stone", { + description = "Stone", + tiles = {"default_stone.png"}, + groups = {cracky=3}, +}) + +minetest.register_node("basenodes:desert_stone", { + description = "Desert Stone", + tiles = {"default_desert_stone.png"}, + groups = {cracky=3}, +}) + +minetest.register_node("basenodes:dirt_with_grass", { + description = "Dirt with Grass", + tiles ={"default_grass.png", + -- a little dot on the bottom to distinguish it from dirt + "default_dirt.png^basenodes_dirt_with_grass_bottom.png", + {name = "default_dirt.png^default_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly=3, soil=1}, +}) + +minetest.register_node("basenodes:dirt_with_snow", { + description = "Dirt with Snow", + tiles ={"basenodes_dirt_with_snow.png", + -- a little dot on the bottom to distinguish it from dirt + "default_dirt.png^basenodes_dirt_with_snow_bottom.png", + {name = "default_dirt.png^default_snow_side.png", + tileable_vertical = false}}, + groups = {crumbly=3, soil=1}, +}) + +minetest.register_node("basenodes:dirt", { + description = "Dirt", + tiles ={"default_dirt.png"}, + groups = {crumbly=3, soil=1}, +}) + +minetest.register_node("basenodes:sand", { + description = "Sand", + tiles ={"default_sand.png"}, + groups = {crumbly=3}, +}) + +minetest.register_node("basenodes:desert_sand", { + description = "Desert Sand", + tiles ={"default_desert_sand.png"}, + groups = {crumbly=3}, +}) + +minetest.register_node("basenodes:gravel", { + description = "Gravel", + tiles ={"default_gravel.png"}, + groups = {crumbly=2}, +}) + +minetest.register_node("basenodes:junglegrass", { + description = "Jungle Grass", + drawtype = "plantlike", + tiles ={"default_junglegrass.png"}, + inventory_image = "default_junglegrass.png", + wield_image = "default_junglegrass.png", + paramtype = "light", + walkable = false, + groups = {snappy=3}, +}) + +minetest.register_node("basenodes:tree", { + description = "Normal Tree Trunk", + tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, + is_ground_content = false, + groups = {choppy=2,oddly_breakable_by_hand=1}, +}) + +minetest.register_node("basenodes:leaves", { + description = "Normal Leaves", + drawtype = "allfaces_optional", + tiles = {"default_leaves.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy=3}, +}) + +minetest.register_node("basenodes:jungletree", { + description = "Jungle Tree Trunk", + tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"}, + is_ground_content = false, + groups = {choppy=2,oddly_breakable_by_hand=1}, +}) + +minetest.register_node("basenodes:jungleleaves", { + description = "Jungle Leaves", + drawtype = "allfaces_optional", + tiles = {"default_jungleleaves.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy=3}, +}) + +minetest.register_node("basenodes:pine_tree", { + description = "Pine Tree Trunk", + tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png", "default_pine_tree.png"}, + is_ground_content = false, + groups = {choppy=2,oddly_breakable_by_hand=1}, +}) + +minetest.register_node("basenodes:pine_needles", { + description = "Pine Needles", + drawtype = "allfaces_optional", + tiles = {"default_pine_needles.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy=3}, +}) + +minetest.register_node("basenodes:water_source", { + description = "Water Source", + drawtype = "liquid", + tiles = {"default_water.png"}, + special_tiles = { + {name = "default_water.png", backface_culling = false}, + {name = "default_water.png", backface_culling = true}, + }, + alpha = WATER_ALPHA, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "basenodes:water_flowing", + liquid_alternative_source = "basenodes:water_source", + liquid_viscosity = WATER_VISC, + post_effect_color = {a = 64, r = 100, g = 100, b = 200}, + groups = {water = 3, liquid = 3}, +}) + +minetest.register_node("basenodes:water_flowing", { + description = "Flowing Water", + drawtype = "flowingliquid", + tiles = {"default_water_flowing.png"}, + special_tiles = { + {name = "default_water_flowing.png", backface_culling = false}, + {name = "default_water_flowing.png", backface_culling = false}, + }, + alpha = WATER_ALPHA, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "basenodes:water_flowing", + liquid_alternative_source = "basenodes:water_source", + liquid_viscosity = WATER_VISC, + post_effect_color = {a = 64, r = 100, g = 100, b = 200}, + groups = {water = 3, liquid = 3}, +}) + +minetest.register_node("basenodes:river_water_source", { + description = "River Water Source", + drawtype = "liquid", + tiles = { "default_river_water.png" }, + special_tiles = { + {name = "default_river_water.png", backface_culling = false}, + {name = "default_river_water.png", backface_culling = true}, + }, + alpha = WATER_ALPHA, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "basenodes:river_water_flowing", + liquid_alternative_source = "basenodes:river_water_source", + liquid_viscosity = 1, + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a = 103, r = 30, g = 76, b = 90}, + groups = {water = 3, liquid = 3, }, +}) + +minetest.register_node("basenodes:river_water_flowing", { + description = "Flowing River Water", + drawtype = "flowingliquid", + tiles = {"default_river_water_flowing.png"}, + special_tiles = { + {name = "default_river_water_flowing.png", backface_culling = false}, + {name = "default_river_water_flowing.png", backface_culling = false}, + }, + alpha = WATER_ALPHA, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "basenodes:river_water_flowing", + liquid_alternative_source = "basenodes:river_water_source", + liquid_viscosity = 1, + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a = 103, r = 30, g = 76, b = 90}, + groups = {water = 3, liquid = 3, }, +}) + +minetest.register_node("basenodes:lava_flowing", { + description = "Flowing Lava", + drawtype = "flowingliquid", + tiles = {"default_lava_flowing.png"}, + special_tiles = { + {name="default_lava_flowing.png", backface_culling = false}, + {name="default_lava_flowing.png", backface_culling = false}, + }, + paramtype = "light", + light_source = minetest.LIGHT_MAX, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drowning = 1, + damage_per_second = 4, + liquidtype = "flowing", + liquid_alternative_flowing = "basenodes:lava_flowing", + liquid_alternative_source = "basenodes:lava_source", + liquid_viscosity = LAVA_VISC, + post_effect_color = {a=192, r=255, g=64, b=0}, + groups = {lava=3, liquid=1}, +}) + +minetest.register_node("basenodes:lava_source", { + description = "Lava Source", + drawtype = "liquid", + tiles = { "default_lava.png" }, + special_tiles = { + {name = "default_lava.png", backface_culling = false}, + {name = "default_lava.png", backface_culling = true}, + }, + paramtype = "light", + light_source = minetest.LIGHT_MAX, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drowning = 1, + damage_per_second = 4, + liquidtype = "source", + liquid_alternative_flowing = "basenodes:lava_flowing", + liquid_alternative_source = "basenodes:lava_source", + liquid_viscosity = LAVA_VISC, + post_effect_color = {a=192, r=255, g=64, b=0}, + groups = {lava=3, liquid=1}, +}) + +minetest.register_node("basenodes:cobble", { + description = "Cobblestone", + tiles ={"default_cobble.png"}, + is_ground_content = false, + groups = {cracky=3}, +}) + +minetest.register_node("basenodes:mossycobble", { + description = "Mossy Cobblestone", + tiles ={"default_mossycobble.png"}, + is_ground_content = false, + groups = {cracky=3}, +}) + +minetest.register_node("basenodes:apple", { + description = "Apple", + drawtype = "plantlike", + tiles ={"default_apple.png"}, + inventory_image = "default_apple.png", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + walkable = false, + groups = {dig_immediate=3}, + + -- Make eatable because why not? + on_use = minetest.item_eat(2), +}) + +minetest.register_node("basenodes:ice", { + description = "Ice", + tiles ={"default_ice.png"}, + groups = {cracky=3}, +}) + +-- The snow nodes intentionally have different tints to make them more +-- distinguishable +minetest.register_node("basenodes:snow", { + description = "Snow Sheet", + tiles = {"basenodes_snow_sheet.png"}, + groups = {crumbly=3}, + walkable = false, + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + }, +}) + +minetest.register_node("basenodes:snowblock", { + description = "Snow Block", + tiles ={"default_snow.png"}, + groups = {crumbly=3}, +}) + + diff -Nru minetest-5.2.0/games/devtest/mods/basenodes/mod.conf minetest-5.3.0/games/devtest/mods/basenodes/mod.conf --- minetest-5.2.0/games/devtest/mods/basenodes/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/basenodes/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = basenodes +description = Contains basic nodes for mapgen Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/basenodes_dirt_with_grass_bottom.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/basenodes_dirt_with_grass_bottom.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow_bottom.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow_bottom.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/basenodes_snow_sheet.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/basenodes_snow_sheet.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_apple.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_apple.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_cobble.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_cobble.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_desert_sand.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_desert_sand.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_desert_stone.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_desert_stone.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_dirt.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_dirt.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_grass.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_grass.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_grass_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_grass_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_gravel.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_gravel.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_ice.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_ice.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_junglegrass.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_junglegrass.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_jungleleaves.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_jungleleaves.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_jungletree.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_jungletree.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_jungletree_top.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_jungletree_top.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_lava_flowing.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_lava_flowing.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_lava.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_lava.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_leaves.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_leaves.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_mossycobble.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_mossycobble.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_pine_needles.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_pine_needles.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_pine_tree.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_pine_tree.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_pine_tree_top.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_pine_tree_top.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_river_water_flowing.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_river_water_flowing.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_river_water.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_river_water.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_sand.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_sand.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_snow.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_snow.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_snow_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_snow_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_stone.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_stone.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_tree.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_tree.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_tree_top.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_tree_top.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_water_flowing.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_water_flowing.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basenodes/textures/default_water.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basenodes/textures/default_water.png differ diff -Nru minetest-5.2.0/games/devtest/mods/basetools/init.lua minetest-5.3.0/games/devtest/mods/basetools/init.lua --- minetest-5.2.0/games/devtest/mods/basetools/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/basetools/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,296 @@ +-- +-- Tool definitions +-- + +--[[ TOOLS SUMMARY: + +Tool types: + +* Hand: basic tool/weapon (just for convenience, not optimized for testing) +* Pickaxe: dig cracky +* Axe: dig choppy +* Shovel: dig crumbly +* Shears: dig snappy +* Sword: deal damage +* Dagger: deal damage, but faster + +Tool materials: + +* Dirt: dig nodes of rating 3, one use only +* Wood: dig nodes of rating 3 +* Stone: dig nodes of rating 3 or 2 +* Steel: dig nodes of rating 3, 2 or 1 +* Mese: dig "everything" instantly +]] + +-- The hand +minetest.register_item(":", { + type = "none", + wield_image = "wieldhand.png", + wield_scale = {x=1,y=1,z=2.5}, + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level = 0, + groupcaps = { + crumbly = {times={[3]=1.50}, uses=0, maxlevel=0}, + snappy = {times={[3]=1.50}, uses=0, maxlevel=0}, + oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=2.00}, uses=0, maxlevel=0}, + }, + damage_groups = {fleshy=1}, + } +}) + +-- Mese Pickaxe: special tool that digs "everything" instantly +minetest.register_tool("basetools:pick_mese", { + description = "Mese Pickaxe", + inventory_image = "basetools_mesepick.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=3, + groupcaps={ + cracky={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255}, + crumbly={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255}, + snappy={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255}, + choppy={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255}, + dig_immediate={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255}, + }, + damage_groups = {fleshy=100}, + }, +}) + + +-- +-- Pickaxes: Dig cracky +-- + +-- This should break after only 1 use +minetest.register_tool("basetools:pick_dirt", { + description = "Dirt Pickaxe", + inventory_image = "basetools_dirtpick.png", + tool_capabilities = { + max_drop_level=0, + groupcaps={ + cracky={times={[3]=2.00}, uses=1, maxlevel=0} + }, + }, +}) + +minetest.register_tool("basetools:pick_wood", { + description = "Wooden Pickaxe", + inventory_image = "basetools_woodpick.png", + tool_capabilities = { + max_drop_level=0, + groupcaps={ + cracky={times={[3]=2.00}, uses=30, maxlevel=0} + }, + }, +}) +minetest.register_tool("basetools:pick_stone", { + description = "Stone Pickaxe", + inventory_image = "basetools_stonepick.png", + tool_capabilities = { + max_drop_level=0, + groupcaps={ + cracky={times={[2]=1.20, [3]=0.80}, uses=60, maxlevel=0} + }, + }, +}) +minetest.register_tool("basetools:pick_steel", { + description = "Steel Pickaxe", + inventory_image = "basetools_steelpick.png", + tool_capabilities = { + max_drop_level=1, + groupcaps={ + cracky={times={[1]=4.00, [2]=1.60, [3]=1.00}, uses=90, maxlevel=0} + }, + }, +}) +minetest.register_tool("basetools:pick_steel_l1", { + description = "Steel Pickaxe Level 1", + inventory_image = "basetools_steelpick_l1.png", + tool_capabilities = { + max_drop_level=1, + groupcaps={ + cracky={times={[1]=4.00, [2]=1.60, [3]=1.00}, uses=90, maxlevel=1} + }, + }, +}) +minetest.register_tool("basetools:pick_steel_l2", { + description = "Steel Pickaxe Level 2", + inventory_image = "basetools_steelpick_l2.png", + tool_capabilities = { + max_drop_level=1, + groupcaps={ + cracky={times={[1]=4.00, [2]=1.60, [3]=1.00}, uses=90, maxlevel=2} + }, + }, +}) + +-- +-- Shovels (dig crumbly) +-- + +minetest.register_tool("basetools:shovel_wood", { + description = "Wooden Shovel", + inventory_image = "basetools_woodshovel.png", + tool_capabilities = { + max_drop_level=0, + groupcaps={ + crumbly={times={[3]=0.50}, uses=30, maxlevel=0} + }, + }, +}) +minetest.register_tool("basetools:shovel_stone", { + description = "Stone Shovel", + inventory_image = "basetools_stoneshovel.png", + tool_capabilities = { + max_drop_level=0, + groupcaps={ + crumbly={times={[2]=0.50, [3]=0.30}, uses=60, maxlevel=0} + }, + }, +}) +minetest.register_tool("basetools:shovel_steel", { + description = "Steel Shovel", + inventory_image = "basetools_steelshovel.png", + tool_capabilities = { + max_drop_level=1, + groupcaps={ + crumbly={times={[1]=1.00, [2]=0.70, [3]=0.60}, uses=90, maxlevel=0} + }, + }, +}) + +-- +-- Axes (dig choppy) +-- + +minetest.register_tool("basetools:axe_wood", { + description = "Wooden Axe", + inventory_image = "basetools_woodaxe.png", + tool_capabilities = { + max_drop_level=0, + groupcaps={ + choppy={times={[3]=0.80}, uses=30, maxlevel=0}, + }, + }, +}) +minetest.register_tool("basetools:axe_stone", { + description = "Stone Axe", + inventory_image = "basetools_stoneaxe.png", + tool_capabilities = { + max_drop_level=0, + groupcaps={ + choppy={times={[2]=1.00, [3]=0.60}, uses=60, maxlevel=0}, + }, + }, +}) +minetest.register_tool("basetools:axe_steel", { + description = "Steel Axe", + inventory_image = "basetools_steelaxe.png", + tool_capabilities = { + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.00, [2]=0.80, [3]=0.40}, uses=90, maxlevel=0}, + }, + }, +}) + +-- +-- Shears (dig snappy) +-- + +minetest.register_tool("basetools:shears_wood", { + description = "Wooden Shears", + inventory_image = "basetools_woodshears.png", + tool_capabilities = { + max_drop_level=0, + groupcaps={ + snappy={times={[3]=1.00}, uses=30, maxlevel=0}, + }, + }, +}) +minetest.register_tool("basetools:shears_stone", { + description = "Stone Shears", + inventory_image = "basetools_stoneshears.png", + tool_capabilities = { + max_drop_level=0, + groupcaps={ + snappy={times={[2]=1.00, [3]=0.50}, uses=60, maxlevel=0}, + }, + }, +}) +minetest.register_tool("basetools:shears_steel", { + description = "Steel Shears", + inventory_image = "basetools_steelshears.png", + tool_capabilities = { + max_drop_level=1, + groupcaps={ + snappy={times={[1]=1.00, [2]=0.50, [3]=0.25}, uses=90, maxlevel=0}, + }, + }, +}) + +-- +-- Swords (deal damage) +-- + +minetest.register_tool("basetools:sword_wood", { + description = "Wooden Sword", + inventory_image = "basetools_woodsword.png", + tool_capabilities = { + full_punch_interval = 1.0, + damage_groups = {fleshy=2}, + } +}) +minetest.register_tool("basetools:sword_stone", { + description = "Stone Sword", + inventory_image = "basetools_stonesword.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=0, + damage_groups = {fleshy=4}, + } +}) +minetest.register_tool("basetools:sword_steel", { + description = "Steel Sword", + inventory_image = "basetools_steelsword.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + damage_groups = {fleshy=6}, + } +}) + +-- Fire/Ice sword: Deal damage to non-fleshy damage groups +minetest.register_tool("basetools:sword_fire", { + description = "Fire Sword", + inventory_image = "basetools_firesword.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=0, + damage_groups = {icy=6}, + } +}) +minetest.register_tool("basetools:sword_ice", { + description = "Ice Sword", + inventory_image = "basetools_icesword.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=0, + damage_groups = {firy=6}, + } +}) + +-- +-- Dagger: Low damage, fast punch interval +-- +minetest.register_tool("basetools:dagger_steel", { + description = "Steel Dagger", + inventory_image = "basetools_steeldagger.png", + tool_capabilities = { + full_punch_interval = 0.5, + max_drop_level=0, + damage_groups = {fleshy=2}, + } +}) diff -Nru minetest-5.2.0/games/devtest/mods/basetools/mod.conf minetest-5.3.0/games/devtest/mods/basetools/mod.conf --- minetest-5.2.0/games/devtest/mods/basetools/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/basetools/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = basetools +description = Contains basic digging tools Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_dirtpick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_dirtpick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_firesword.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_firesword.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_icesword.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_icesword.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_mesepick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_mesepick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_steelaxe.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_steelaxe.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_steeldagger.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_steeldagger.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_steelpick_l1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_steelpick_l1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_steelpick_l2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_steelpick_l2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_steelpick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_steelpick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_steelshears.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_steelshears.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_steelshovel.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_steelshovel.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_steelsword.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_steelsword.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_stoneaxe.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_stoneaxe.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_stonepick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_stonepick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_stoneshears.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_stoneshears.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_stoneshovel.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_stoneshovel.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_stonesword.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_stonesword.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_woodaxe.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_woodaxe.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_woodpick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_woodpick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_woodshears.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_woodshears.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_woodshovel.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_woodshovel.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/basetools/textures/basetools_woodsword.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/basetools/textures/basetools_woodsword.png differ diff -Nru minetest-5.2.0/games/devtest/mods/bucket/init.lua minetest-5.3.0/games/devtest/mods/bucket/init.lua --- minetest-5.2.0/games/devtest/mods/bucket/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/bucket/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,26 @@ +-- Bucket: Punch liquid source or flowing liquid to collect it + +minetest.register_tool("bucket:bucket", { + description = "Bucket", + inventory_image = "bucket.png", + stack_max = 1, + liquids_pointable = true, + groups = { disable_repair = 1 }, + on_use = function(itemstack, user, pointed_thing) + -- Must be pointing to node + if pointed_thing.type ~= "node" then + return + end + -- Check if pointing to a liquid + local n = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[n.name] + if def ~= nil and (def.liquidtype == "source" or def.liquidtype == "flowing") then + minetest.add_node(pointed_thing.under, {name="air"}) + local inv = user:get_inventory() + if inv then + inv:add_item("main", ItemStack(n.name)) + end + end + end, +}) + diff -Nru minetest-5.2.0/games/devtest/mods/bucket/mod.conf minetest-5.3.0/games/devtest/mods/bucket/mod.conf --- minetest-5.2.0/games/devtest/mods/bucket/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/bucket/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = bucket +description = Minimal bucket to pick up liquids Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/bucket/textures/bucket_lava.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/bucket/textures/bucket_lava.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/bucket/textures/bucket.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/bucket/textures/bucket.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/bucket/textures/bucket_water.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/bucket/textures/bucket_water.png differ diff -Nru minetest-5.2.0/games/devtest/mods/chest/init.lua minetest-5.3.0/games/devtest/mods/chest/init.lua --- minetest-5.2.0/games/devtest/mods/chest/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/chest/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,27 @@ +minetest.register_node("chest:chest", { + description = "Chest", + tiles ={"chest_chest.png^[sheet:2x2:0,0", "chest_chest.png^[sheet:2x2:0,0", + "chest_chest.png^[sheet:2x2:1,0", "chest_chest.png^[sheet:2x2:1,0", + "chest_chest.png^[sheet:2x2:1,0", "chest_chest.png^[sheet:2x2:0,1"}, + paramtype2 = "facedir", + groups = {dig_immediate=2,choppy=3}, + is_ground_content = false, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", + "size[8,9]".. + "list[current_name;main;0,0;8,4;]".. + "list[current_player;main;0,5;8,4;]" .. + "listring[]") + meta:set_string("infotext", "Chest") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, +}) + + diff -Nru minetest-5.2.0/games/devtest/mods/chest/mod.conf minetest-5.3.0/games/devtest/mods/chest/mod.conf --- minetest-5.2.0/games/devtest/mods/chest/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/chest/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = chest +description = A simple chest to store items Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/chest/textures/chest_chest.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/chest/textures/chest_chest.png differ diff -Nru minetest-5.2.0/games/devtest/mods/chest_of_everything/init.lua minetest-5.3.0/games/devtest/mods/chest_of_everything/init.lua --- minetest-5.2.0/games/devtest/mods/chest_of_everything/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/chest_of_everything/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,135 @@ +local F = minetest.formspec_escape + +-- Create a detached inventory +local inv_everything = minetest.create_detached_inventory("everything", { + allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) + return 0 + end, + allow_put = function(inv, listname, index, stack, player) + return 0 + end, + allow_take = function(inv, listname, index, stack, player) + return -1 + end, +}) +local inv_trash = minetest.create_detached_inventory("trash", { + allow_take = function(inv, listname, index, stack, player) + return 0 + end, + allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) + return 0 + end, + on_put = function(inv, listname, index, stack, player) + inv:set_list("main", {}) + end, +}) +inv_trash:set_size("main", 1) + +local max_page = 1 + +local function get_chest_formspec(page) + local start = 0 + (page-1)*32 + return "size[8,9]".. + "list[detached:everything;main;0,0;8,4;"..start.."]".. + "list[current_player;main;0,5;8,4;]" .. + "label[6,4;Trash:]" .. + "list[detached:trash;main;7,4;1,1]" .. + "button[0,4;1,1;chest_of_everything_prev;"..F("<").."]".. + "button[1,4;1,1;chest_of_everything_next;"..F(">").."]".. + "label[2,4;"..F("Page: "..page).."]".. + "listring[detached:everything;main]".. + "listring[current_player;main]".. + "listring[detached:trash;main]" +end + +minetest.register_node("chest_of_everything:chest", { + description = "Chest of Everything", + tiles ={"chest_of_everything_chest.png^[sheet:2x2:0,0", "chest_of_everything_chest.png^[sheet:2x2:0,0", + "chest_of_everything_chest.png^[sheet:2x2:1,0", "chest_of_everything_chest.png^[sheet:2x2:1,0", + "chest_of_everything_chest.png^[sheet:2x2:1,0", "chest_of_everything_chest.png^[sheet:2x2:0,1"}, + paramtype2 = "facedir", + groups = {dig_immediate=2,choppy=3}, + is_ground_content = false, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Chest of Everything") + meta:set_int("page", 1) + meta:set_string("formspec", get_chest_formspec(1)) + end, + on_receive_fields = function(pos, formname, fields, sender) + if formname == "" then + local meta = minetest.get_meta(pos) + local page = meta:get_int("page") + if fields.chest_of_everything_prev then + page = page - 1 + elseif fields.chest_of_everything_next then + page = page + 1 + end + if page < 1 then + page = 1 + end + if page > max_page then + page = max_page + end + meta:set_int("page", page) + meta:set_string("formspec", get_chest_formspec(page)) + end + end, +}) + +minetest.register_on_mods_loaded(function() + local items = {} + for itemstring,_ in pairs(minetest.registered_items) do + if itemstring ~= "" and itemstring ~= "unknown" and itemstring ~= "ignore" then + table.insert(items, itemstring) + end + end + --[[ Sort items in this order: + * Chest of Everything + * Test tools + * Other tools + * Craftitems + * Other items + * Dummy items ]] + local function compare(item1, item2) + local def1 = minetest.registered_items[item1] + local def2 = minetest.registered_items[item2] + local tool1 = def1.type == "tool" + local tool2 = def2.type == "tool" + local testtool1 = minetest.get_item_group(item1, "testtool") == 1 + local testtool2 = minetest.get_item_group(item2, "testtool") == 1 + local dummy1 = minetest.get_item_group(item1, "dummy") == 1 + local dummy2 = minetest.get_item_group(item2, "dummy") == 1 + local craftitem1 = def1.type == "craft" + local craftitem2 = def2.type == "craft" + if item1 == "chest_of_everything:chest" then + return true + elseif item2 == "chest_of_everything:chest" then + return false + elseif dummy1 and not dummy2 then + return false + elseif not dummy1 and dummy2 then + return true + elseif testtool1 and not testtool2 then + return true + elseif not testtool1 and testtool2 then + return false + elseif tool1 and not tool2 then + return true + elseif not tool1 and tool2 then + return false + elseif craftitem1 and not craftitem2 then + return true + elseif not craftitem1 and craftitem2 then + return false + else + return item1 < item2 + end + end + table.sort(items, compare) + inv_everything:set_size("main", #items) + max_page = math.ceil(#items / 32) + for i=1, #items do + inv_everything:add_item("main", items[i]) + end +end) diff -Nru minetest-5.2.0/games/devtest/mods/chest_of_everything/mod.conf minetest-5.3.0/games/devtest/mods/chest_of_everything/mod.conf --- minetest-5.2.0/games/devtest/mods/chest_of_everything/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/chest_of_everything/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = chest_of_everything +description = Adds the chest of everything from which you can take all items Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/chest_of_everything/textures/chest_of_everything_chest.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/chest_of_everything/textures/chest_of_everything_chest.png differ diff -Nru minetest-5.2.0/games/devtest/mods/dignodes/init.lua minetest-5.3.0/games/devtest/mods/dignodes/init.lua --- minetest-5.2.0/games/devtest/mods/dignodes/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/dignodes/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,37 @@ +local groups = { + "cracky", "dig_immediate" +} + +-- Register dig nodes with 1 digging group, a rating between 1-3 and a level between 0-2 +for g=1, #groups do + local gr = groups[g] + for r=1, 3 do + for l=0, 2 do + if not (gr=="dig_immediate" and (l>0 or r==1)) then + local d + if l > 0 then + d = string.format("Dig Test Node: %s=%d, level=%d", gr, r, l) + else + d = string.format("Dig Test Node: %s=%d", gr, r) + end + local tile = "dignodes_"..gr..".png^dignodes_rating"..r..".png" + if l==1 then + tile = tile .. "^[colorize:#FFFF00:127" + elseif l==2 then + tile = tile .. "^[colorize:#FF0000:127" + end + minetest.register_node("dignodes:"..gr.."_"..r.."_"..l, { + description = d, + tiles = { tile }, + groups = { [gr] = r, level = l }, + }) + end + end + end +end + +-- Node without any digging groups +minetest.register_node("dignodes:none", { + description = "Dig Test Node: groupless", + tiles = {"dignodes_none.png"}, +}) diff -Nru minetest-5.2.0/games/devtest/mods/dignodes/mod.conf minetest-5.3.0/games/devtest/mods/dignodes/mod.conf --- minetest-5.2.0/games/devtest/mods/dignodes/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/dignodes/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = dignodes +description = Nodes with different digging groups Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/dignodes/textures/dignodes_choppy.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/dignodes/textures/dignodes_choppy.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/dignodes/textures/dignodes_cracky.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/dignodes/textures/dignodes_cracky.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/dignodes/textures/dignodes_crumbly.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/dignodes/textures/dignodes_crumbly.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/dignodes/textures/dignodes_dig_immediate.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/dignodes/textures/dignodes_dig_immediate.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/dignodes/textures/dignodes_none.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/dignodes/textures/dignodes_none.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/dignodes/textures/dignodes_rating1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/dignodes/textures/dignodes_rating1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/dignodes/textures/dignodes_rating2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/dignodes/textures/dignodes_rating2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/dignodes/textures/dignodes_rating3.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/dignodes/textures/dignodes_rating3.png differ diff -Nru minetest-5.2.0/games/devtest/mods/experimental/commands.lua minetest-5.3.0/games/devtest/mods/experimental/commands.lua --- minetest-5.2.0/games/devtest/mods/experimental/commands.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/experimental/commands.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,216 @@ +minetest.register_chatcommand("test_inv", { + params = "", + description = "Test: Modify player's inventory formspec", + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player then + return false, "No player." + end + player:set_inventory_formspec( + "size[13,7.5]".. + "image[6,0.6;1,2;player.png]".. + "list[current_player;main;5,3.5;8,4;]".. + "list[current_player;craft;8,0;3,3;]".. + "list[current_player;craftpreview;12,1;1,1;]".. + "list[detached:test_inventory;main;0,0;4,6;0]".. + "button[0.5,7;2,1;button1;Button 1]".. + "button_exit[2.5,7;2,1;button2;Exit Button]") + return true, "Done." + end, +}) + +minetest.register_chatcommand("test_bulk_set_node", { + params = "", + description = "Test: Bulk-set 9×9×9 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 = {} + local ppos = player:get_pos() + local i = 1 + for x=2,10 do + for y=2,10 do + for z=2,10 do + pos_list[i] = {x=ppos.x + x,y = ppos.y + y,z = ppos.z + z} + i = i + 1 + end + end + end + minetest.bulk_set_node(pos_list, {name = "mapgen_stone"}) + return true, "Done." + end, +}) + +minetest.register_chatcommand("bench_bulk_set_node", { + params = "", + description = "Benchmark: Bulk-set 99×99×99 stone nodes", + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player then + return false, "No player." + end + local pos_list = {} + local ppos = player:get_pos() + local i = 1 + for x=2,100 do + for y=2,100 do + for z=2,100 do + pos_list[i] = {x=ppos.x + x,y = ppos.y + y,z = ppos.z + z} + i = i + 1 + end + end + end + + minetest.chat_send_player(name, "Benchmarking minetest.bulk_set_node. Warming up ..."); + + -- warm up with stone to prevent having different callbacks + -- due to different node topology + minetest.bulk_set_node(pos_list, {name = "mapgen_stone"}) + + minetest.chat_send_player(name, "Warming up finished, now benchmarking ..."); + + local start_time = minetest.get_us_time() + for i=1,#pos_list do + minetest.set_node(pos_list[i], {name = "mapgen_stone"}) + end + local middle_time = minetest.get_us_time() + minetest.bulk_set_node(pos_list, {name = "mapgen_stone"}) + local end_time = minetest.get_us_time() + local msg = string.format("Benchmark results: minetest.set_node loop: %.2f ms; minetest.bulk_set_node: %.2f ms", + ((middle_time - start_time)) / 1000, + ((end_time - middle_time)) / 1000 + ) + return true, msg + end, +}) + +local function advance_pos(pos, start_pos, advance_z) + if advance_z then + pos.z = pos.z + 2 + pos.x = start_pos.x + else + pos.x = pos.x + 2 + end + if pos.x > 30900 or pos.x - start_pos.x > 46 then + pos.x = start_pos.x + pos.z = pos.z + 2 + end + if pos.z > 30900 then + -- We ran out of space! Aborting + aborted = true + return false + end + return pos +end + +local function place_nodes(param) + local nodes = param.nodes + local name = param.name + local pos = param.pos + local start_pos = param.start_pos + table.sort(nodes) + minetest.chat_send_player(name, "Placing nodes …") + local nodes_placed = 0 + local aborted = false + for n=1, #nodes do + local itemstring = nodes[n] + local def = minetest.registered_nodes[itemstring] + local p2_max = 0 + if param.param ~= "no_param2" then + -- Also test the param2 values of the nodes + -- ... but we only use permissible param2 values + if def.paramtype2 == "wallmounted" then + p2_max = 5 + elseif def.paramtype2 == "facedir" then + p2_max = 23 + elseif def.paramtype2 == "glasslikeliquidlevel" then + p2_max = 63 + elseif def.paramtype2 == "meshoptions" and def.drawtype == "plantlike" then + p2_max = 63 + elseif def.paramtype2 == "leveled" then + p2_max = 127 + elseif def.paramtype2 == "degrotate" and def.drawtype == "plantlike" then + p2_max = 179 + elseif def.paramtype2 == "colorfacedir" or + def.paramtype2 == "colorwallmounted" or + def.paramtype2 == "color" then + p2_max = 255 + end + end + for p2 = 0, p2_max do + -- Skip undefined param2 values + if not ((def.paramtype2 == "meshoptions" and p2 % 8 > 4) or + (def.paramtype2 == "colorwallmounted" and p2 % 8 > 5) or + (def.paramtype2 == "colorfacedir" and p2 % 32 > 23)) then + + minetest.set_node(pos, { name = itemstring, param2 = p2 }) + nodes_placed = nodes_placed + 1 + pos = advance_pos(pos, start_pos) + if not pos then + aborted = true + break + end + end + end + if aborted then + break + end + end + if aborted then + minetest.chat_send_player(name, "Not all nodes could be placed, please move further away from the world boundary. Nodes placed: "..nodes_placed) + end + minetest.chat_send_player(name, "Nodes placed: "..nodes_placed..".") +end + +local function after_emerge(blockpos, action, calls_remaining, param) + if calls_remaining == 0 then + place_nodes(param) + end +end + +minetest.register_chatcommand("test_place_nodes", { + params = "[ no_param2 ]", + description = "Test: Place all non-experimental nodes and optionally their permissible param2 variants", + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player then + return false, "No player." + end + local pos = vector.floor(player:get_pos()) + pos.x = math.ceil(pos.x + 3) + pos.z = math.ceil(pos.z + 3) + pos.y = math.ceil(pos.y + 1) + local start_pos = table.copy(pos) + if pos.x > 30800 then + return false, "Too close to world boundary (+X). Please move to X < 30800." + end + if pos.z > 30800 then + return false, "Too close to world boundary (+Z). Please move to Z < 30800." + end + + local aborted = false + local nodes = {} + local emerge_estimate = 0 + for itemstring, def in pairs(minetest.registered_nodes) do + if itemstring ~= "ignore" and string.sub(itemstring, 1, 13) ~= "experimental:" then + table.insert(nodes, itemstring) + if def.paramtype2 == 0 then + emerge_estimate = emerge_estimate + 1 + else + emerge_estimate = emerge_estimate + 255 + end + end + end + -- Emerge area to make sure that all nodes are being placed. + -- Note we will emerge much more than we need to (overestimation), + -- the estimation code could be improved performance-wise … + local length = 16 + math.ceil(emerge_estimate / 24) * 2 + minetest.emerge_area(start_pos, + { x = start_pos.x + 46, y = start_pos.y, z = start_pos.z + length }, + after_emerge, { nodes = nodes, name = name, pos = pos, start_pos = start_pos, param = param }) + return true, "Emerging area …" + end, +}) + diff -Nru minetest-5.2.0/games/devtest/mods/experimental/detached.lua minetest-5.3.0/games/devtest/mods/experimental/detached.lua --- minetest-5.2.0/games/devtest/mods/experimental/detached.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/experimental/detached.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,29 @@ +-- Create a detached inventory +local inv = minetest.create_detached_inventory("test_inventory", { + allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) + experimental.print_to_everything("allow move asked") + return count -- Allow all + end, + allow_put = function(inv, listname, index, stack, player) + experimental.print_to_everything("allow put asked") + return 1 -- Allow only 1 + end, + allow_take = function(inv, listname, index, stack, player) + experimental.print_to_everything("allow take asked") + return 4 -- Allow 4 at max + end, + on_move = function(inv, from_list, from_index, to_list, to_index, count, player) + experimental.print_to_everything(player:get_player_name().." moved items") + end, + on_put = function(inv, listname, index, stack, player) + experimental.print_to_everything(player:get_player_name().." put items") + end, + on_take = function(inv, listname, index, stack, player) + experimental.print_to_everything(player:get_player_name().." took items") + end, +}) +inv:set_size("main", 4*6) +inv:add_item("main", "experimental:callback_node") +inv:add_item("main", "experimental:particle_spawner") + + diff -Nru minetest-5.2.0/games/devtest/mods/experimental/init.lua minetest-5.3.0/games/devtest/mods/experimental/init.lua --- minetest-5.2.0/games/devtest/mods/experimental/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/experimental/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,23 @@ +-- +-- Experimental things +-- + +experimental = {} + +dofile(minetest.get_modpath("experimental").."/detached.lua") +dofile(minetest.get_modpath("experimental").."/items.lua") +dofile(minetest.get_modpath("experimental").."/commands.lua") + +function experimental.print_to_everything(msg) + minetest.log("action", msg) + minetest.chat_send_all(msg) +end + +minetest.log("info", "[experimental] modname="..dump(minetest.get_current_modname())) +minetest.log("info", "[experimental] modpath="..dump(minetest.get_modpath("experimental"))) +minetest.log("info", "[experimental] worldpath="..dump(minetest.get_worldpath())) + + +minetest.register_on_mods_loaded(function() + minetest.log("action", "[experimental] on_mods_loaded()") +end) diff -Nru minetest-5.2.0/games/devtest/mods/experimental/items.lua minetest-5.3.0/games/devtest/mods/experimental/items.lua --- minetest-5.2.0/games/devtest/mods/experimental/items.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/experimental/items.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,103 @@ +minetest.register_node("experimental:callback_node", { + description = "Callback Test Node (construct/destruct/timer)", + tiles = {"experimental_callback_node.png"}, + groups = {dig_immediate=3}, + -- This was known to cause a bug in minetest.item_place_node() when used + -- via minetest.place_node(), causing a placer with no position + paramtype2 = "facedir", + drop = "", + + on_construct = function(pos) + experimental.print_to_everything("experimental:callback_node:on_construct("..minetest.pos_to_string(pos)..")") + local meta = minetest.get_meta(pos) + meta:set_string("mine", "test") + local timer = minetest.get_node_timer(pos) + timer:start(4, 3) + end, + + after_place_node = function(pos, placer) + experimental.print_to_everything("experimental:callback_node:after_place_node("..minetest.pos_to_string(pos)..")") + local meta = minetest.get_meta(pos) + if meta:get_string("mine") == "test" then + experimental.print_to_everything("correct metadata found") + else + experimental.print_to_everything("incorrect metadata found") + end + end, + + on_destruct = function(pos) + experimental.print_to_everything("experimental:callback_node:on_destruct("..minetest.pos_to_string(pos)..")") + end, + + after_destruct = function(pos) + experimental.print_to_everything("experimental:callback_node:after_destruct("..minetest.pos_to_string(pos)..")") + end, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + experimental.print_to_everything("experimental:callback_node:after_dig_node("..minetest.pos_to_string(pos)..")") + end, + + on_timer = function(pos, elapsed) + experimental.print_to_everything("on_timer(): elapsed="..dump(elapsed)) + return true + end, +}) + +minetest.register_tool("experimental:privatizer", { + description = "Node Meta Privatizer", + inventory_image = "experimental_tester_tool_1.png", + groups = { testtool = 1, disable_repair = 1 }, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type == "node" then + local node = minetest.get_node(pointed_thing.under) + if node.name == "chest:chest" then + local p = pointed_thing.under + minetest.log("action", "Privatizer used at "..minetest.pos_to_string(p)) + minetest.get_meta(p):mark_as_private({"infotext", "formspec"}) + if user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), "Chest metadata (infotext, formspec) set private!") + end + return + end + end + if user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), "Privatizer can only be used on chest!") + end + end, +}) + +minetest.register_tool("experimental:particle_spawner", { + description = "Particle Spawner", + inventory_image = "experimental_tester_tool_1.png^[invert:g", + groups = { testtool = 1, disable_repair = 1 }, + on_use = function(itemstack, user, pointed_thing) + local pos = minetest.get_pointed_thing_position(pointed_thing, true) + if pos == nil then + if user then + pos = user:get_pos() + end + end + pos = vector.add(pos, {x=0, y=0.5, z=0}) + local tex, anim + if math.random(0, 1) == 0 then + tex = "experimental_particle_sheet.png" + anim = {type="sheet_2d", frames_w=3, frames_h=2, frame_length=0.5} + else + tex = "experimental_particle_vertical.png" + anim = {type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3} + end + + minetest.add_particle({ + pos = pos, + velocity = {x=0, y=0, z=0}, + acceleration = {x=0, y=0.04, z=0}, + expirationtime = 6, + collisiondetection = true, + texture = tex, + animation = anim, + size = 4, + glow = math.random(0, 5), + }) + end, +}) + diff -Nru minetest-5.2.0/games/devtest/mods/experimental/mod.conf minetest-5.3.0/games/devtest/mods/experimental/mod.conf --- minetest-5.2.0/games/devtest/mods/experimental/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/experimental/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = experimental +description = Chaotic mod containing unstructured tests for testing out engine features. The features in this mod should be moved to other mods. Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/experimental/textures/experimental_callback_node.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/experimental/textures/experimental_callback_node.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/experimental/textures/experimental_particle_sheet.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/experimental/textures/experimental_particle_sheet.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/experimental/textures/experimental_particle_vertical.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/experimental/textures/experimental_particle_vertical.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/experimental/textures/experimental_tester_tool_1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/experimental/textures/experimental_tester_tool_1.png differ diff -Nru minetest-5.2.0/games/devtest/mods/give_initial_stuff/init.lua minetest-5.3.0/games/devtest/mods/give_initial_stuff/init.lua --- minetest-5.2.0/games/devtest/mods/give_initial_stuff/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/give_initial_stuff/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,37 @@ +local give_if_not_gotten_already = function(inv, list, item) + if not inv:contains_item(list, item) then + inv:add_item(list, item) + end +end + +local give_initial_stuff = function(player) + local inv = player:get_inventory() + give_if_not_gotten_already(inv, "main", "basetools:pick_mese") + give_if_not_gotten_already(inv, "main", "basetools:axe_steel") + give_if_not_gotten_already(inv, "main", "basetools:shovel_steel") + give_if_not_gotten_already(inv, "main", "bucket:bucket") + give_if_not_gotten_already(inv, "main", "testnodes:light14") + give_if_not_gotten_already(inv, "main", "chest_of_everything:chest") + minetest.log("action", "[give_initial_stuff] Giving initial stuff to "..player:get_player_name()) +end + +minetest.register_on_newplayer(function(player) + if minetest.settings:get_bool("give_initial_stuff", true) then + give_initial_stuff(player) + end +end) + +minetest.register_chatcommand("stuff", { + params = "", + privs = { give = true }, + description = "Give yourself initial items", + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player or not player:is_player() then + return false, "No player." + end + give_initial_stuff(player) + return true + end, +}) + diff -Nru minetest-5.2.0/games/devtest/mods/give_initial_stuff/mod.conf minetest-5.3.0/games/devtest/mods/give_initial_stuff/mod.conf --- minetest-5.2.0/games/devtest/mods/give_initial_stuff/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/give_initial_stuff/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,3 @@ +name = give_initial_stuff +description = Gives items to players on join +depends = basetools, bucket, chest_of_everything, testnodes diff -Nru minetest-5.2.0/games/devtest/mods/initial_message/init.lua minetest-5.3.0/games/devtest/mods/initial_message/init.lua --- minetest-5.2.0/games/devtest/mods/initial_message/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/initial_message/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,9 @@ +minetest.register_on_joinplayer(function(player) + local cb = function(player) + if not player or not player:is_player() then + return + end + minetest.chat_send_player(player:get_player_name(), "This is the \"Development Test\" [devtest], meant only for testing and development. Use Minetest Game for the real thing.") + end + minetest.after(2.0, cb, player) +end) diff -Nru minetest-5.2.0/games/devtest/mods/initial_message/mod.conf minetest-5.3.0/games/devtest/mods/initial_message/mod.conf --- minetest-5.2.0/games/devtest/mods/initial_message/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/initial_message/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = initial_message +description = Show message to joining players explaining what this testing game is about diff -Nru minetest-5.2.0/games/devtest/mods/mapgen/init.lua minetest-5.3.0/games/devtest/mods/mapgen/init.lua --- minetest-5.2.0/games/devtest/mods/mapgen/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/mapgen/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,104 @@ +-- +-- Aliases for map generator outputs +-- + +-- ESSENTIAL node aliases +-- Basic nodes +minetest.register_alias("mapgen_stone", "basenodes:stone") +minetest.register_alias("mapgen_water_source", "basenodes:water_source") +minetest.register_alias("mapgen_river_water_source", "basenodes:river_water_source") + +-- Additional essential aliases for v6 +minetest.register_alias("mapgen_lava_source", "basenodes:lava_source") +minetest.register_alias("mapgen_dirt", "basenodes:dirt") +minetest.register_alias("mapgen_dirt_with_grass", "basenodes:dirt_with_grass") +minetest.register_alias("mapgen_sand", "basenodes:sand") +minetest.register_alias("mapgen_tree", "basenodes:tree") +minetest.register_alias("mapgen_leaves", "basenodes:leaves") +minetest.register_alias("mapgen_apple", "basenodes:apple") + +-- Essential alias for dungeons +minetest.register_alias("mapgen_cobble", "basenodes:cobble") + +-- Optional aliases for v6 (they all have fallback values in the engine) +if minetest.settings:get_bool("devtest_v6_mapgen_aliases", false) then + minetest.register_alias("mapgen_gravel", "basenodes:gravel") + minetest.register_alias("mapgen_desert_stone", "basenodes:desert_stone") + minetest.register_alias("mapgen_desert_sand", "basenodes:desert_sand") + minetest.register_alias("mapgen_dirt_with_snow", "basenodes:dirt_with_snow") + minetest.register_alias("mapgen_snowblock", "basenodes:snowblock") + minetest.register_alias("mapgen_snow", "basenodes:snow") + minetest.register_alias("mapgen_ice", "basenodes:ice") + minetest.register_alias("mapgen_junglegrass", "basenodes:junglegrass") + minetest.register_alias("mapgen_jungletree", "basenodes:jungletree") + minetest.register_alias("mapgen_jungleleaves", "basenodes:jungleleaves") + minetest.register_alias("mapgen_pine_tree", "basenodes:pine_tree") + minetest.register_alias("mapgen_pine_needles", "basenodes:pine_needles") +end +-- Optional alias for mossycobble (should fall back to cobble) +if minetest.settings:get_bool("devtest_dungeon_mossycobble", false) then + minetest.register_alias("mapgen_mossycobble", "basenodes:mossycobble") +end +-- Optional aliases for dungeon stairs (should fall back to full nodes) +if minetest.settings:get_bool("devtest_dungeon_stairs", false) then + minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") + if minetest.settings:get_bool("devtest_v6_mapgen_aliases", false) then + minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone") + end +end + +-- +-- Register biomes for biome API +-- + +minetest.clear_registered_biomes() +minetest.clear_registered_decorations() + +if minetest.settings:get_bool("devtest_register_biomes", true) then + minetest.register_biome({ + name = "mapgen:grassland", + node_top = "basenodes:dirt_with_grass", + depth_top = 1, + node_filler = "basenodes:dirt", + depth_filler = 1, + node_riverbed = "basenodes:sand", + depth_riverbed = 2, + node_dungeon = "basenodes:cobble", + node_dungeon_alt = "basenodes:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 4, + heat_point = 50, + humidity_point = 50, + }) + + minetest.register_biome({ + name = "mapgen:grassland_ocean", + node_top = "basenodes:sand", + depth_top = 1, + node_filler = "basenodes:sand", + depth_filler = 3, + node_riverbed = "basenodes:sand", + depth_riverbed = 2, + node_cave_liquid = "basenodes:water_source", + node_dungeon = "basenodes:cobble", + node_dungeon_alt = "basenodes:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 3, + y_min = -255, + heat_point = 50, + humidity_point = 50, + }) + + minetest.register_biome({ + name = "mapgen:grassland_under", + node_cave_liquid = {"basenodes:water_source", "basenodes:lava_source"}, + node_dungeon = "basenodes:cobble", + node_dungeon_alt = "basenodes:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 50, + humidity_point = 50, + }) +end diff -Nru minetest-5.2.0/games/devtest/mods/mapgen/mod.conf minetest-5.3.0/games/devtest/mods/mapgen/mod.conf --- minetest-5.2.0/games/devtest/mods/mapgen/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/mapgen/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,3 @@ +name = mapgen +description = Minimal map generator +depends = basenodes diff -Nru minetest-5.2.0/games/devtest/mods/modchannels/init.lua minetest-5.3.0/games/devtest/mods/modchannels/init.lua --- minetest-5.2.0/games/devtest/mods/modchannels/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/modchannels/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,14 @@ +-- +-- Mod channels experimental handlers +-- +local mod_channel = minetest.mod_channel_join("experimental_preview") + +minetest.register_on_modchannel_message(function(channel, sender, message) + minetest.log("action", "[modchannels] Server received message `" .. message + .. "` on channel `" .. channel .. "` from sender `" .. sender .. "`") + + if mod_channel:is_writeable() then + mod_channel:send_all("experimental answers to preview") + mod_channel:leave() + end +end) diff -Nru minetest-5.2.0/games/devtest/mods/modchannels/mod.conf minetest-5.3.0/games/devtest/mods/modchannels/mod.conf --- minetest-5.2.0/games/devtest/mods/modchannels/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/modchannels/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = modchannels +description = Add experimental mod channel handlers diff -Nru minetest-5.2.0/games/devtest/mods/soundstuff/init.lua minetest-5.3.0/games/devtest/mods/soundstuff/init.lua --- minetest-5.2.0/games/devtest/mods/soundstuff/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/soundstuff/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,170 @@ +local simple_nodes = { + footstep = { "Footstep Sound Node", "soundstuff_node_footstep.png" }, + dig = { "Dig Sound Node", "soundstuff_node_dig.png" }, + dug = { "Dug Sound Node", "soundstuff_node_dug.png" }, + place = { "Place Sound Node", "soundstuff_node_place.png" }, + place_failed = { "Place Failed Sound Node", "soundstuff_node_place_failed.png" }, +} + +for k,v in pairs(simple_nodes) do + minetest.register_node("soundstuff:"..k, { + description = v[1], + tiles = {"soundstuff_node_sound.png","soundstuff_node_sound.png",v[2]}, + groups = {dig_immediate=2}, + sounds = { + [k] = { name = "soundstuff_mono", gain = 1.0 }, + } + }) +end + +minetest.register_node("soundstuff:place_failed_attached", { + description = "Attached Place Failed Sound Node", + tiles = {"soundstuff_node_sound.png", "soundstuff_node_sound.png", "soundstuff_node_place_failed.png"}, + groups = {dig_immediate=2, attached_node=1}, + drawtype = "nodebox", + paramtype = "light", + node_box = { type = "fixed", fixed = { + { -7/16, -7/16, -7/16, 7/16, 7/16, 7/16 }, + { -0.5, -0.5, -0.5, 0.5, -7/16, 0.5 }, + }}, + sounds = { + place_failed = { name = "soundstuff_mono", gain = 1.0 }, + }, +}) + +minetest.register_node("soundstuff:fall", { + description = "Fall Sound Node", + tiles = {"soundstuff_node_sound.png", "soundstuff_node_sound.png", "soundstuff_node_fall.png"}, + groups = {dig_immediate=2, falling_node=1}, + sounds = { + fall = { name = "soundstuff_mono", gain = 1.0 }, + } +}) + +minetest.register_node("soundstuff:fall_attached", { + description = "Attached Fall Sound Node", + tiles = {"soundstuff_node_sound.png", "soundstuff_node_sound.png", "soundstuff_node_fall.png"}, + groups = {dig_immediate=2, attached_node=1}, + drawtype = "nodebox", + paramtype = "light", + node_box = { type = "fixed", fixed = { + { -7/16, -7/16, -7/16, 7/16, 7/16, 7/16 }, + { -0.5, -0.5, -0.5, 0.5, -7/16, 0.5 }, + }}, + sounds = { + fall = { name = "soundstuff_mono", gain = 1.0 }, + } +}) + +minetest.register_node("soundstuff:footstep_liquid", { + description = "Liquid Footstep Sound Node", + drawtype = "liquid", + tiles = { + "soundstuff_node_sound.png^[colorize:#0000FF:127", + }, + special_tiles = { + {name = "soundstuff_node_sound.png^[colorize:#0000FF:127", backface_culling = false}, + {name = "soundstuff_node_sound.png^[colorize:#0000FF:127", backface_culling = true}, + }, + liquids_pointable = true, + liquidtype = "source", + liquid_alternative_flowing = "soundstuff:footstep_liquid", + liquid_alternative_source = "soundstuff:footstep_liquid", + liquid_renewable = false, + liquid_range = 0, + liquid_viscosity = 0, + alpha = 190, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + post_effect_color = {a = 64, r = 0, g = 0, b = 200}, + sounds = { + footstep = { name = "soundstuff_mono", gain = 1.0 }, + } +}) + +minetest.register_node("soundstuff:footstep_climbable", { + description = "Climbable Footstep Sound Node", + drawtype = "allfaces", + tiles = { + "soundstuff_node_climbable.png", + }, + alpha = 120, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + climbable = true, + is_ground_content = false, + groups = { dig_immediate = 2 }, + sounds = { + footstep = { name = "soundstuff_mono", gain = 1.0 }, + } +}) + + + +minetest.register_craftitem("soundstuff:eat", { + description = "Eat Sound Item", + inventory_image = "soundstuff_eat.png", + on_use = minetest.item_eat(0), + sound = { + eat = { name = "soundstuff_mono", gain = 1.0 }, + } +}) + +minetest.register_tool("soundstuff:breaks", { + description = "Break Sound Tool", + inventory_image = "soundstuff_node_dug.png", + sound = { + breaks = { name = "soundstuff_mono", gain = 1.0 }, + }, + tool_capabilities = { + max_drop_level=0, + groupcaps={ + cracky={times={[2]=2.00, [3]=1.20}, uses=1, maxlevel=0}, + choppy={times={[2]=2.00, [3]=1.20}, uses=1, maxlevel=0}, + snappy={times={[2]=2.00, [3]=1.20}, uses=1, maxlevel=0}, + crumbly={times={[2]=2.00, [3]=1.20}, uses=1, maxlevel=0}, + }, + }, +}) + +-- Plays sound repeatedly +minetest.register_node("soundstuff:positional", { + description = "Positional Sound Node", + on_construct = function(pos) + local timer = minetest.get_node_timer(pos) + timer:start(0) + end, + on_timer = function(pos, elapsed) + local node = minetest.get_node(pos) + local dist = node.param2 + if dist == 0 then + dist = nil + end + minetest.sound_play("soundstuff_mono", { pos = pos, max_hear_distance = dist }) + local timer = minetest.get_node_timer(pos) + timer:start(0.7) + end, + on_rightclick = function(pos, node, clicker) + node.param2 = (node.param2 + 1) % 64 + minetest.set_node(pos, node) + if clicker and clicker:is_player() then + local dist = node.param2 + local diststr + if dist == 0 then + diststr = "" + else + diststr = tostring(dist) + end + minetest.chat_send_player(clicker:get_player_name(), "max_hear_distance = " .. diststr) + end + end, + + groups = { dig_immediate = 2 }, + tiles = { "soundstuff_node_sound.png" }, +}) + diff -Nru minetest-5.2.0/games/devtest/mods/soundstuff/mod.conf minetest-5.3.0/games/devtest/mods/soundstuff/mod.conf --- minetest-5.2.0/games/devtest/mods/soundstuff/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/soundstuff/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = soundstuff +description = Example items and nodes for testing sound effects Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/sounds/soundstuff_mono.ogg and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/sounds/soundstuff_mono.ogg differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/textures/soundstuff_eat.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/textures/soundstuff_eat.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/textures/soundstuff_node_blank.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/textures/soundstuff_node_blank.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/textures/soundstuff_node_climbable.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/textures/soundstuff_node_climbable.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/textures/soundstuff_node_dig.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/textures/soundstuff_node_dig.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/textures/soundstuff_node_dug.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/textures/soundstuff_node_dug.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/textures/soundstuff_node_fall.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/textures/soundstuff_node_fall.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/textures/soundstuff_node_footstep.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/textures/soundstuff_node_footstep.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/textures/soundstuff_node_place_failed.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/textures/soundstuff_node_place_failed.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/textures/soundstuff_node_place.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/textures/soundstuff_node_place.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/soundstuff/textures/soundstuff_node_sound.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/soundstuff/textures/soundstuff_node_sound.png differ diff -Nru minetest-5.2.0/games/devtest/mods/stairs/init.lua minetest-5.3.0/games/devtest/mods/stairs/init.lua --- minetest-5.2.0/games/devtest/mods/stairs/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/stairs/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,65 @@ +stairs = {} + +-- Node will be called stairs:stair_ +function stairs.register_stair(subname, recipeitem, groups, images, description) + minetest.register_node(":stairs:stair_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = true, + groups = groups, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.5, 0.5}, + }, + }, + }) +end + +-- Node will be called stairs:slab_ +function stairs.register_slab(subname, recipeitem, groups, images, description) + minetest.register_node(":stairs:slab_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = images, + paramtype = "light", + is_ground_content = true, + groups = groups, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + }) +end + +-- Nodes will be called stairs:{stair,slab}_ +function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab) + stairs.register_stair(subname, recipeitem, groups, images, desc_stair) + stairs.register_slab(subname, recipeitem, groups, images, desc_slab) +end + +stairs.register_stair_and_slab("stone", "basenodes:stone", + {cracky=3}, + {"default_stone.png"}, + "Stone Stair", + "Stone Slab") + +stairs.register_stair_and_slab("desert_stone", "basenodes:desert_stone", + {cracky=3}, + {"default_desert_stone.png"}, + "Desert Stone Stair", + "Desert Stone Slab") + +stairs.register_stair_and_slab("cobble", "basenodes:cobble", + {cracky=3}, + {"default_cobble.png"}, + "Cobblestone Stair", + "Cobblestone Slab") diff -Nru minetest-5.2.0/games/devtest/mods/stairs/mod.conf minetest-5.3.0/games/devtest/mods/stairs/mod.conf --- minetest-5.2.0/games/devtest/mods/stairs/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/stairs/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,3 @@ +name = stairs +description = Adds stairs and slabs +depends = basenodes diff -Nru minetest-5.2.0/games/devtest/mods/testentities/armor.lua minetest-5.3.0/games/devtest/mods/testentities/armor.lua --- minetest-5.2.0/games/devtest/mods/testentities/armor.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testentities/armor.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,41 @@ +-- Armorball: Test entity for testing armor groups +-- Rightclick to change armor group + +local phasearmor = { + [0]={icy=100}, + [1]={firy=100}, + [2]={fleshy=100}, + [3]={immortal=1}, + [4]={punch_operable=1}, +} + +minetest.register_entity("testentities:armorball", { + initial_properties = { + hp_max = 20, + physical = false, + collisionbox = {-0.4,-0.4,-0.4, 0.4,0.4,0.4}, + visual = "sprite", + visual_size = {x=1, y=1}, + textures = {"testentities_armorball.png"}, + spritediv = {x=1, y=5}, + initial_sprite_basepos = {x=0, y=0}, + }, + + _phase = 2, + + on_activate = function(self, staticdata) + minetest.log("action", "[testentities] armorball.on_activate") + self.object:set_armor_groups(phasearmor[self._phase]) + self.object:set_sprite({x=0, y=self._phase}) + end, + + on_rightclick = function(self, clicker) + -- Change armor group and sprite + self._phase = self._phase + 1 + if self._phase >= 5 then + self._phase = 0 + end + self.object:set_sprite({x=0, y=self._phase}) + self.object:set_armor_groups(phasearmor[self._phase]) + end, +}) diff -Nru minetest-5.2.0/games/devtest/mods/testentities/callbacks.lua minetest-5.3.0/games/devtest/mods/testentities/callbacks.lua --- minetest-5.2.0/games/devtest/mods/testentities/callbacks.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testentities/callbacks.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,75 @@ +-- Entities that test their callbacks + +local message = function(msg) + minetest.log("action", msg) + minetest.chat_send_all(msg) +end + +local get_object_name = function(obj) + local name = "" + if obj then + if obj:is_player() then + name = obj:get_player_name() + else + name = "" + end + end + return name +end + +local spos = function(self) + return minetest.pos_to_string(vector.round(self.object:get_pos())) +end + +-- Callback test entity (all callbacks except on_step) +minetest.register_entity("testentities:callback", { + initial_properties = { + visual = "upright_sprite", + textures = { "testentities_callback.png" }, + }, + + on_activate = function(self, staticdata, dtime_s) + message("Callback entity: on_activate! pos="..spos(self).."; dtime_s="..dtime_s) + end, + on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage) + local name = get_object_name(puncher) + message( + "Callback entity: on_punch! ".. + "pos="..spos(self).."; puncher="..name.."; ".. + "time_from_last_punch="..time_from_last_punch.."; ".. + "tool_capabilities="..tostring(dump(tool_capabilities)).."; ".. + "dir="..tostring(dump(dir)).."; damage="..damage) + end, + on_rightclick = function(self, clicker) + local name = get_object_name(clicker) + message("Callback entity: on_rightclick! pos="..spos(self).."; clicker="..name) + end, + on_death = function(self, killer) + local name = get_object_name(killer) + message("Callback entity: on_death! pos="..spos(self).."; killer="..name) + end, + on_attach_child = function(self, child) + local name = get_object_name(child) + message("Callback entity: on_attach_child! pos="..spos(self).."; child="..name) + end, + on_detach_child = function(self, child) + local name = get_object_name(child) + message("Callback entity: on_detach_child! pos="..spos(self).."; child="..name) + end, + on_detach = function(self, parent) + local name = get_object_name(parent) + message("Callback entity: on_detach! pos="..spos(self).."; parent="..name) + end, + get_staticdata = function(self) + message("Callback entity: get_staticdata! pos="..spos(self)) + end, +}) + +-- Only test on_step callback +minetest.register_entity("testentities:callback_step", { + visual = "upright_sprite", + textures = { "testentities_callback_step.png" }, + on_step = function(self, dtime) + message("on_step callback entity: on_step! pos="..spos(self).."; dtime="..dtime) + end, +}) diff -Nru minetest-5.2.0/games/devtest/mods/testentities/init.lua minetest-5.3.0/games/devtest/mods/testentities/init.lua --- minetest-5.2.0/games/devtest/mods/testentities/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testentities/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,3 @@ +dofile(minetest.get_modpath("testentities").."/visuals.lua") +dofile(minetest.get_modpath("testentities").."/armor.lua") +dofile(minetest.get_modpath("testentities").."/callbacks.lua") diff -Nru minetest-5.2.0/games/devtest/mods/testentities/mod.conf minetest-5.3.0/games/devtest/mods/testentities/mod.conf --- minetest-5.2.0/games/devtest/mods/testentities/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testentities/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = testentities +description = Example entities for testing Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_armorball.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_armorball.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_callback.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_callback.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_callback_step.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_callback_step.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_cube1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_cube1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_cube2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_cube2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_cube3.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_cube3.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_cube4.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_cube4.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_cube5.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_cube5.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_cube6.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_cube6.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_dungeon_master.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_dungeon_master.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_sprite.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_sprite.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_upright_sprite1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_upright_sprite1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testentities/textures/testentities_upright_sprite2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testentities/textures/testentities_upright_sprite2.png differ diff -Nru minetest-5.2.0/games/devtest/mods/testentities/visuals.lua minetest-5.3.0/games/devtest/mods/testentities/visuals.lua --- minetest-5.2.0/games/devtest/mods/testentities/visuals.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testentities/visuals.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,84 @@ +-- Minimal test entities to test visuals + +minetest.register_entity("testentities:sprite", { + initial_properties = { + visual = "sprite", + textures = { "testentities_sprite.png" }, + }, +}) + +minetest.register_entity("testentities:upright_sprite", { + initial_properties = { + visual = "upright_sprite", + textures = { + "testentities_upright_sprite1.png", + "testentities_upright_sprite2.png", + }, + }, +}) + +minetest.register_entity("testentities:cube", { + initial_properties = { + visual = "cube", + textures = { + "testentities_cube1.png", + "testentities_cube2.png", + "testentities_cube3.png", + "testentities_cube4.png", + "testentities_cube5.png", + "testentities_cube6.png", + }, + }, +}) + +minetest.register_entity("testentities:item", { + initial_properties = { + visual = "item", + wield_item = "testnodes:normal", + }, +}) + +minetest.register_entity("testentities:wielditem", { + initial_properties = { + visual = "wielditem", + wield_item = "testnodes:normal", + }, +}) + +minetest.register_entity("testentities:mesh", { + initial_properties = { + visual = "mesh", + mesh = "testnodes_pyramid.obj", + textures = { + "testnodes_mesh_stripes2.png" + }, + }, +}) + +minetest.register_entity("testentities:mesh_unshaded", { + initial_properties = { + visual = "mesh", + mesh = "testnodes_pyramid.obj", + textures = { + "testnodes_mesh_stripes2.png" + }, + shaded = false, + }, +}) + +-- Advanced visual tests + +-- A test entity for testing animated and yaw-modulated sprites +minetest.register_entity("testentities:yawsprite", { + initial_properties = { + selectionbox = {-0.3, -0.5, -0.3, 0.3, 0.3, 0.3}, + visual = "sprite", + visual_size = {x=0.6666, y=1}, + textures = {"testentities_dungeon_master.png^[makealpha:128,0,0^[makealpha:128,128,0"}, + spritediv = {x=6, y=5}, + initial_sprite_basepos = {x=0, y=0}, + }, + on_activate = function(self, staticdata) + self.object:set_sprite({x=0, y=0}, 1, 0, true) + end, +}) diff -Nru minetest-5.2.0/games/devtest/mods/testfood/init.lua minetest-5.3.0/games/devtest/mods/testfood/init.lua --- minetest-5.2.0/games/devtest/mods/testfood/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testfood/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,24 @@ +local S = minetest.get_translator("testfood") + +minetest.register_craftitem("testfood:good1", { + description = S("Good Food (+1)"), + inventory_image = "testfood_good.png", + on_use = minetest.item_eat(1), +}) +minetest.register_craftitem("testfood:good5", { + description = S("Good Food (+5)"), + inventory_image = "testfood_good2.png", + on_use = minetest.item_eat(5), +}) + +minetest.register_craftitem("testfood:bad1", { + description = S("Bad Food (-1)"), + inventory_image = "testfood_bad.png", + on_use = minetest.item_eat(-1), +}) +minetest.register_craftitem("testfood:bad5", { + description = S("Bad Food (-5)"), + inventory_image = "testfood_bad2.png", + on_use = minetest.item_eat(-5), +}) + diff -Nru minetest-5.2.0/games/devtest/mods/testfood/mod.conf minetest-5.3.0/games/devtest/mods/testfood/mod.conf --- minetest-5.2.0/games/devtest/mods/testfood/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testfood/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = testfood +description = For testing food items Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testfood/textures/testfood_bad2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testfood/textures/testfood_bad2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testfood/textures/testfood_bad.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testfood/textures/testfood_bad.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testfood/textures/testfood_good2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testfood/textures/testfood_good2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testfood/textures/testfood_good.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testfood/textures/testfood_good.png differ diff -Nru minetest-5.2.0/games/devtest/mods/testformspec/callbacks.lua minetest-5.3.0/games/devtest/mods/testformspec/callbacks.lua --- minetest-5.2.0/games/devtest/mods/testformspec/callbacks.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testformspec/callbacks.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,51 @@ +local callback_test = 0 + +local out = function(player, formname, fields, number) + local snum = "" + if number then + snum = " "..number + end + local msg = "Formspec callback"..snum..": player="..player:get_player_name()..", formname=\""..tostring(formname).."\", fields="..dump(fields) + minetest.chat_send_player(player:get_player_name(), msg) + minetest.log("action", msg) +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if callback_test == 1 then + out(player, formname, fields) + elseif callback_test == 2 then + out(player, formname, fields, 1) + end +end) +minetest.register_on_player_receive_fields(function(player, formname, fields) + if callback_test == 2 then + out(player, formname, fields, 2) + return true -- Disable the first callback + end +end) +minetest.register_on_player_receive_fields(function(player, formname, fields) + if callback_test == 2 then + out(player, formname, fields, 3) + end +end) + +minetest.register_chatcommand("test_formspec_callbacks", { + params = "[ 0 | 1 | 2 ]", + description = "Test: Change formspec callbacks testing mode", + func = function(name, param) + local mode = tonumber(param) + if not mode then + callback_test = (callback_test + 1 % 3) + else + callback_test = mode + end + if callback_test == 1 then + minetest.chat_send_player(name, "Formspec callback test mode 1 enabled: Logging only") + elseif callback_test == 2 then + minetest.chat_send_player(name, "Formspec callback test mode 2 enabled: Three callbacks, disable pre-registered callbacks") + else + callback_test = 0 + minetest.chat_send_player(name, "Formspec callback test disabled!") + end + end +}) diff -Nru minetest-5.2.0/games/devtest/mods/testformspec/dummy_items.lua minetest-5.3.0/games/devtest/mods/testformspec/dummy_items.lua --- minetest-5.2.0/games/devtest/mods/testformspec/dummy_items.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testformspec/dummy_items.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,14 @@ +-- This code adds dummy items that are supposed to be used in formspecs +-- for testing item_image formspec elements. + +minetest.register_node("testformspec:node", { + description = "Formspec Test Node", + tiles = { "testformspec_node.png" }, + groups = { dig_immediate = 3, dummy = 1 }, +}) + +minetest.register_craftitem("testformspec:item", { + description = "Formspec Test Item", + inventory_image = "testformspec_item.png", + groups = { dummy = 1 }, +}) diff -Nru minetest-5.2.0/games/devtest/mods/testformspec/formspec.lua minetest-5.3.0/games/devtest/mods/testformspec/formspec.lua --- minetest-5.2.0/games/devtest/mods/testformspec/formspec.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testformspec/formspec.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,381 @@ +local color = minetest.colorize + +local clip_fs = [[ + style_type[label,button,image_button,item_image_button, + tabheader,scrollbar,table,animated_image + ,field,textarea,checkbox,dropdown;noclip=%c] + + label[0,0;A clipping test] + button[0,1;3,0.8;clip_button;A clipping test] + image_button[0,2;3,0.8;testformspec_button_image.png;clip_image_button;A clipping test] + item_image_button[0,3;3,0.8;testformspec:item;clip_item_image_button;A clipping test] + tabheader[0,4.7;3,0.63;clip_tabheader;Clip,Test,Text,Tabs;1;false;false] + field[0,5;3,0.8;clip_field;Title;] + textarea[0,6;3,1;clip_textarea;Title;] + checkbox[0,7.5;clip_checkbox;This is a test;true] + dropdown[0,8;3,0.8;clip_dropdown;Select An Item,One,Two,Three,Four,Five;1] + scrollbar[0,9;3,0.8;horizontal;clip_scrollbar;3] + tablecolumns[text;text] + table[0,10;3,1;clip_table;one,two,three,four;1] + animated_image[-0.5,11;4.5,1;clip_animated_image;testformspec_animation.png;4;100] +]] + +local tabheaders_fs = [[ + tabheader[0,0;10,0.63;tabs_opaque;Opaque,Without,Border;1;false;false] + tabheader[0,1;10,0.63;tabs_opaque_border;Opaque,With,Border;1;false;true] + tabheader[0,2;10,0.63;tabs_transparent;Transparent,Without,Border;1;true;false] + tabheader[0,3;10,0.63;tabs_transparent_border;Transparent,With,Border;1;true;true] + tabheader[0,4;tabs_default;Default,Tabs;1] + tabheader[0,6;10,0.5;tabs_size1;Height=0.5;1;false;false] + tabheader[2,6;10,0.75;tabs_size1;Height=0.75;1;false;false] + tabheader[4,6;10,1;tabs_size2;Height=1;1;false;false] + tabheader[6,6;10,1.25;tabs_size2;Height=1.25;1;false;false] + tabheader[8,6;10,1.5;tabs_size2;Height=1.5;1;false;false] +]] + +local hypertext_basic = [[ +Normal test +This is a normal text. + +style test + + . + + +Tag test +normal +mono +bold +italic +underlined +big +bigger +left +
center
+right +justify. Here comes a blind text: Lorem testum dolor sit amet consecutor celeron fiftifahivus e shadoninia e smalus jokus anrus relsocutoti rubenwardus. Erasputinus hara holisti dominus wusi. Grumarinsti erltusmuate ol fortitusti fla flo, blani burki e sfani fahif. Ultae ratii, e megus gigae don anonimus. Grinus dimondus krockus e nore. Endus finalus nowus comus endus o blindus tekstus. + +Custom tag test + + + + + +color=green +Action: color=green +Action: hovercolor=yellow +size=24 +font=mono +color=green font=mono size=24 + +action test +action + +img test +Normal: + +width=48 height=48: + +float=left: + +float=right: + + +item test +Normal: + +width=48 height=48 + +angle=30,0,0: + +angle=0,30,0: + +angle=0,0,30: + +rotate=yes: + +rotate=100,0,0: + +rotate=0,100,0: + +rotate=0,0,100: + +rotate=50,75,100: + +angle=-30,-45,90 rotate=100,150,-50: +]] + +local hypertext_global = [[ + +This is a test of the global tag. The parameters are: +background=gray margin=20 valign=bottom halign=right color=pink hovercolor=purple size=12 font=mono +action]] + +local hypertext_fs = "hypertext[0,0;11,9;hypertext;"..minetest.formspec_escape(hypertext_basic).."]".. + "hypertext[0,9.5;11,2.5;hypertext;"..minetest.formspec_escape(hypertext_global).."]" + +local style_fs = [[ + style[one_btn1;bgcolor=red;textcolor=yellow;bgcolor_hovered=orange; + bgcolor_pressed=purple] + button[0,0;2.5,0.8;one_btn1;Button] + + style[one_btn2;border=false;textcolor=cyan] ]].. + "button[0,1.05;2.5,0.8;one_btn2;Text " .. color("#FF0", "Yellow") .. [[] + + style[one_btn3;bgimg=testformspec_button_image.png;bgimg_hovered=testformspec_hovered.png; + bgimg_pressed=testformspec_pressed.png] + button[0,2.1;1,1;one_btn3;Border] + + style[one_btn4;bgimg=testformspec_button_image.png;bgimg_hovered=testformspec_hovered.png; + bgimg_pressed=testformspec_pressed.png;border=false] + button[1.25,2.1;1,1;one_btn4;NoBor] + + style[one_btn5;bgimg=testformspec_button_image.png;bgimg_hovered=testformspec_hovered.png; + bgimg_pressed=testformspec_pressed.png;border=false;alpha=false] + button[0,3.35;1,1;one_btn5;Alph] + + style[one_btn6;border=true] + image_button[0,4.6;1,1;testformspec_button_image.png;one_btn6;Border] + + style[one_btn7;border=false] + image_button[1.25,4.6;1,1;testformspec_button_image.png;one_btn7;NoBor] + + style[one_btn8;border=false] + image_button[0,5.85;1,1;testformspec_button_image.png;one_btn8;Border;false;true;testformspec_pressed.png] + + style[one_btn9;border=true] + image_button[1.25,5.85;1,1;testformspec_button_image.png;one_btn9;NoBor;false;false;testformspec_pressed.png] + + style[one_btn10;alpha=false] + image_button[0,7.1;1,1;testformspec_button_image.png;one_btn10;NoAlpha] + + style[one_btn11;alpha=true] + image_button[1.25,7.1;1,1;testformspec_button_image.png;one_btn11;Alpha] + + style[one_btn12;border=true] + item_image_button[0,8.35;1,1;testformspec:item;one_btn12;Border] + + style[one_btn13;border=false] + item_image_button[1.25,8.35;1,1;testformspec:item;one_btn13;NoBor] + + style[one_btn14;border=false;bgimg=testformspec_bg.png;fgimg=testformspec_button_image.png] + style[one_btn14:hovered;bgimg=testformspec_bg_hovered.png;fgimg=testformspec_hovered.png;textcolor=yellow] + style[one_btn14:pressed;bgimg=testformspec_bg_pressed.png;fgimg=testformspec_pressed.png;textcolor=blue] + style[one_btn14:hovered+pressed;textcolor=purple] + image_button[0,9.6;1,1;testformspec_button_image.png;one_btn14;Bg] + + style[one_btn15;border=false;bgimg=testformspec_bg.png;bgimg_hovered=testformspec_bg_hovered.png;bgimg_pressed=testformspec_bg_pressed.png] + item_image_button[1.25,9.6;1,1;testformspec:item;one_btn15;Bg] + + style[one_btn16;border=false;bgimg=testformspec_bg_9slice.png;bgimg_hovered=testformspec_bg_9slice_hovered.png;bgimg_pressed=testformspec_bg_9slice_pressed.png;bgimg_middle=4,6] + button[2.5,9.6;2,1;one_btn16;9-Slice Bg] + + + + container[2.75,0] + + style[one_tb1;textcolor=Yellow] + tabheader[0,3;2.5,0.63;one_tb1;Yellow,Text,Tabs;1;false;false] + + style[one_f1;textcolor=yellow] + field[0,4.25;2.5,0.8;one_f1;Field One;Yellow Text] + + style[one_f2;border=false;textcolor=cyan] + field[0,5.75;2.5,0.8;one_f2;Field Two;Borderless Cyan Text] + + style[one_f3;textcolor=yellow] + textarea[0,7.025;2.5,0.8;one_f3;Label;]] .. + minetest.formspec_escape("Yellow Text\nLine two") .. [[ ] + + style[one_f4;border=false;textcolor=cyan] + textarea[0,8.324999999999999;2.5,0.8;one_f4;Label;]] .. + minetest.formspec_escape("Borderless Cyan Text\nLine two") .. [[ ] + + container_end[] +]] + +local scroll_fs = + "button[8.5,1;4,1;outside;Outside of container]".. + "box[1,1;8,6;#00aa]".. + "scroll_container[1,1;8,6;scrbar;vertical]".. + "button[0,1;1,1;lorem;Lorem]".. + "button[0,10;1,1;ipsum;Ipsum]".. + "pwdfield[2,2;1,1;lorem2;Lorem]".. + "list[current_player;main;4,4;1,5;]".. + "box[2,5;3,2;#ffff00]".. + "image[1,10;3,2;testformspec_item.png]".. + "image[3,1;testformspec_item.png]".. + "item_image[2,6;3,2;testformspec:node]".. + "label[2,15;bla Bli\nfoo bar]".. + "item_image_button[2,3;1,1;testformspec:node;itemimagebutton;ItemImageButton]".. + "tooltip[0,11;3,2;Buz;#f00;#000]".. + "box[0,11;3,2;#00ff00]".. + "hypertext[3,13;3,3;;" .. hypertext_basic .. "]" .. + "container[0,18]".. + "box[1,2;3,2;#0a0a]".. + "scroll_container[1,2;3,2;scrbar2;horizontal;0.06]".. + "button[0,0;6,1;butnest;Nest]".. + "label[10,0.5;nest]".. + "scroll_container_end[]".. + "scrollbar[1,0;3.5,0.3;horizontal;scrbar2;0]".. + "container_end[]".. + "dropdown[0,6;2;hmdrpdwn;apple,bulb;1]".. + "image_button[0,4;2,2;testformspec_button_image.png;imagebutton;bbbbtt;false;true;testformspec_pressed.png]".. + "box[1,22.5;4,1;#a00a]".. + "scroll_container_end[]".. + "scrollbaroptions[max=170]".. -- lowest seen pos is: 0.1*170+6=23 (factor*max+height) + "scrollbar[7.5,0;0.3,4;vertical;scrbar;0]".. + "scrollbar[8,0;0.3,4;vertical;scrbarhmmm;0]".. + "dropdown[0,6;2;hmdrpdwnnn;Outside,of,container;1]" + +--style_type[label;textcolor=green] +--label[0,0;Green] +--style_type[label;textcolor=blue] +--label[0,1;Blue] +--style_type[label;textcolor=;border=true] +--label[1.2,0;Border] +--style_type[label;border=true;bgcolor=red] +--label[1.2,1;Background] +--style_type[label;border=;bgcolor=] +--label[0.75,2;Reset] + + +local pages = { + -- Real Coordinates + [[ + formspec_version[3] + size[12,13] + image_button[0,0;1,1;logo.png;rc_image_button_1x1;1x1] + image_button[1,0;2,2;logo.png;rc_image_button_2x2;2x2] + button[0,2;1,1;rc_button_1x1;1x1] + button[1,2;2,2;rc_button_2x2;2x2] + item_image[0,4;1,1;air] + item_image[1,4;2,2;air] + item_image_button[0,6;1,1;testformspec:node;rc_item_image_button_1x1;1x1] + item_image_button[1,6;2,2;testformspec:node;rc_item_image_button_2x2;2x2] + field[3,.5;3,.5;rc_field;Field;text] + pwdfield[6,.5;3,1;rc_pwdfield;Password Field] + field[3,1;3,1;;Read-Only Field;text] + textarea[3,2;3,.5;rc_textarea_small;Textarea;text] + textarea[6,2;3,2;rc_textarea_big;Textarea;text\nmore text] + textarea[3,3;3,1;;Read-Only Textarea;text\nmore text] + textlist[3,4;3,2;rc_textlist;Textlist,Perfect Coordinates;1;false] + tableoptions[highlight=#ABCDEF75;background=#00000055;border=false] + table[6,4;3,2;rc_table;Table,Cool Stuff,Foo,Bar;2] + dropdown[3,6;3,1;rc_dropdown_small;This,is,a,dropdown;1] + dropdown[6,6;3,2;rc_dropdown_big;I,am,a,bigger,dropdown;5] + image[0,8;3,2;ignore.png] + box[3,7;3,1;#00A3FF] + checkbox[3,8;rc_checkbox_1;Check me!;false] + checkbox[3,9;rc_checkbox_2;Uncheck me now!;true] + scrollbar[0,11.5;11.5,.5;horizontal;rc_scrollbar_horizontal;500] + scrollbar[11.5,0;.5,11.5;vertical;rc_scrollbar_vertical;0] + list[current_player;main;6,8;3,2;1] + button[9,0;2.5,1;rc_empty_button_1;] + button[9,1;2.5,1;rc_empty_button_2;] + button[9,2;2.5,1;rc_empty_button_3;] ]].. + "label[9,0.5;This is a label.\nLine\nLine\nLine\nEnd]".. + [[button[9,3;1,1;rc_empty_button_4;] + vertlabel[9,4;VERT] + label[10,3;HORIZ] + tabheader[8,0;6,0.65;rc_tabheader;Tab 1,Tab 2,Tab 3,Secrets;1;false;false] + ]], + -- Style + + "formspec_version[3]size[12,13]" .. + ("label[0.375,0.375;Styled - %s %s]"):format( + color("#F00", "red text"), + color("#77FF00CC", "green text")) .. + "label[6.375,0.375;Unstyled]" .. + "box[0,0.75;12,0.1;#999]" .. + "box[6,0.85;0.1,11.15;#999]" .. + "container[0.375,1.225]" .. + style_fs .. + "container_end[]container[6.375,1.225]" .. + style_fs:gsub("one_", "two_"):gsub("style%[[^%]]+%]", ""):gsub("style_type%[[^%]]+%]", "") .. + "container_end[]", + + -- Noclip + "formspec_version[3]size[12,13]" .. + "label[0.1,0.5;Clip]" .. + "container[-2.5,1]" .. clip_fs:gsub("%%c", "false") .. "container_end[]" .. + "label[11,0.5;Noclip]" .. + "container[11.5,1]" .. clip_fs:gsub("%%c", "true") .. "container_end[]", + + -- Hypertext + "size[12,13]real_coordinates[true]" .. + "container[0.5,0.5]" .. hypertext_fs .. "container_end[]", + + -- Tabheaders + "size[12,13]real_coordinates[true]" .. + "container[0.5,1.5]" .. tabheaders_fs .. "container_end[]", + + -- Animation + [[ + formspec_version[3] + size[12,13] + animated_image[0.5,0.5;1,1;;testformspec_animation.png;4;100] + animated_image[0.5,1.75;1,1;;testformspec_animation.jpg;4;100] + animated_image[1.75,0.5;1,1;;testformspec_animation.png;100;100] + animated_image[3,0.5;1,1;ani_img_1;testformspec_animation.png;4;1000] + button[4.25,0.5;1,1;ani_btn_1;Current +Number] + animated_image[3,1.75;1,1;ani_img_2;testformspec_animation.png;4;1000;2] + button[4.25,1.75;1,1;ani_btn_2;Current +Number] + animated_image[3,3;1,1;;testformspec_animation.png;4;0] + animated_image[3,4.25;1,1;;testformspec_animation.png;4;0;3] + animated_image[5.5,0.5;5,2;;testformspec_animation.png;4;100] + animated_image[5.5,2.75;5,2;;testformspec_animation.jpg;4;100] + ]], + + -- Scroll containers + "formspec_version[3]size[12,13]" .. + scroll_fs, +} + +local function show_test_formspec(pname, page_id) + page_id = page_id or 2 + + local fs = pages[page_id] .. "tabheader[0,0;8,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Anim,ScrollC;" .. page_id .. ";false;false]" + + minetest.show_formspec(pname, "testformspec:formspec", fs) +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "testformspec:formspec" then + return false + end + + + if fields.maintabs then + show_test_formspec(player:get_player_name(), tonumber(fields.maintabs)) + return true + end + + if fields.ani_img_1 and fields.ani_btn_1 then + minetest.chat_send_player(player:get_player_name(), "ani_img_1 = " .. tostring(fields.ani_img_1)) + return true + elseif fields.ani_img_2 and fields.ani_btn_2 then + minetest.chat_send_player(player:get_player_name(), "ani_img_2 = " .. tostring(fields.ani_img_2)) + return true + end + + if fields.hypertext then + minetest.chat_send_player(player:get_player_name(), "Hypertext action received: " .. tostring(fields.hypertext)) + return true + end +end) + +minetest.register_chatcommand("test_formspec", { + params = "", + description = "Open the test formspec", + func = function(name) + if not minetest.get_player_by_name(name) then + return false, "You need to be online!" + end + + show_test_formspec(name) + return true + end, +}) diff -Nru minetest-5.2.0/games/devtest/mods/testformspec/init.lua minetest-5.3.0/games/devtest/mods/testformspec/init.lua --- minetest-5.2.0/games/devtest/mods/testformspec/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testformspec/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,3 @@ +dofile(minetest.get_modpath("testformspec").."/dummy_items.lua") +dofile(minetest.get_modpath("testformspec").."/formspec.lua") +dofile(minetest.get_modpath("testformspec").."/callbacks.lua") diff -Nru minetest-5.2.0/games/devtest/mods/testformspec/mod.conf minetest-5.3.0/games/devtest/mods/testformspec/mod.conf --- minetest-5.2.0/games/devtest/mods/testformspec/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testformspec/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = testformspec +description = Contains an example formspec to test all the features of formspecs Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_animation.jpg and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_animation.jpg differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_animation.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_animation.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_bg_9slice_hovered.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_bg_9slice_hovered.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_bg_9slice.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_bg_9slice.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_bg_9slice_pressed.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_bg_9slice_pressed.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_bg_hovered.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_bg_hovered.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_bg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_bg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_bg_pressed.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_bg_pressed.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_button_image.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_button_image.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_hovered.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_hovered.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_item.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_item.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_node.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_node.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testformspec/textures/testformspec_pressed.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testformspec/textures/testformspec_pressed.png differ diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/drawtypes.lua minetest-5.3.0/games/devtest/mods/testnodes/drawtypes.lua --- minetest-5.2.0/games/devtest/mods/testnodes/drawtypes.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/drawtypes.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,528 @@ +--[[ Drawtype Test: This file tests out and provides examples for +all drawtypes in Minetest. It is attempted to keep the node +definitions as simple and minimal as possible to keep +side-effects to a minimum. + +How to read the node definitions: +There are two parts which are separated by 2 newlines: +The first part contains the things that are more or less essential +for defining the drawtype (except description, which is +at the top for readability). +The second part (after the 2 newlines) contains stuff that are +unrelated to the drawtype, stuff that is mostly there to make +testing this node easier and more convenient. +]] + +local S = minetest.get_translator("testnodes") + +-- If set to true, will show an inventory image for nodes that have no inventory image as of Minetest 5.1.0. +-- This is due to . +-- This is only added to make the items more visible to avoid confusion, but you will no longer see +-- the default inventory images for these items. When you want to test the default inventory image of drawtypes, +-- this should be turned off. +-- TODO: Remove support for fallback inventory image as soon #9209 is fixed. +local SHOW_FALLBACK_IMAGE = minetest.settings:get_bool("testnodes_show_fallback_image", false) + +local fallback_image = function(img) + if SHOW_FALLBACK_IMAGE then + return img + else + return nil + end +end + +-- A regular cube +minetest.register_node("testnodes:normal", { + description = S("Normal Drawtype Test Node"), + drawtype = "normal", + tiles = { "testnodes_normal.png" }, + + groups = { dig_immediate = 3 }, +}) + +-- Standard glasslike node +minetest.register_node("testnodes:glasslike", { + description = S("Glasslike Drawtype Test Node"), + drawtype = "glasslike", + paramtype = "light", + tiles = { "testnodes_glasslike.png" }, + + groups = { dig_immediate = 3 }, +}) + +-- Glasslike framed with the two textures (normal and "detail") +minetest.register_node("testnodes:glasslike_framed", { + description = S("Glasslike Framed Drawtype Test Node"), + drawtype = "glasslike_framed", + paramtype = "light", + tiles = { + "testnodes_glasslike_framed.png", + "testnodes_glasslike_detail.png", + }, + + + sunlight_propagates = true, + groups = { dig_immediate = 3 }, +}) + +-- Like the one above, but without the "detail" texture (texture 2). +-- This node was added to see how the engine behaves when the "detail" texture +-- is missing. +minetest.register_node("testnodes:glasslike_framed_no_detail", { + description = S("Glasslike Framed without Detail Drawtype Test Node"), + drawtype = "glasslike_framed", + paramtype = "light", + tiles = { "testnodes_glasslike_framed2.png" }, + + + sunlight_propagates = true, + groups = { dig_immediate = 3 }, +}) + + +minetest.register_node("testnodes:glasslike_framed_optional", { + description = S("Glasslike Framed Optional Drawtype Test Node"), + drawtype = "glasslike_framed_optional", + paramtype = "light", + tiles = { + "testnodes_glasslike_framed_optional.png", + "testnodes_glasslike_detail.png", + }, + + + sunlight_propagates = true, + groups = { dig_immediate = 3 }, +}) + + + +minetest.register_node("testnodes:allfaces", { + description = S("Allfaces Drawtype Test Node"), + drawtype = "allfaces", + paramtype = "light", + tiles = { "testnodes_allfaces.png" }, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:allfaces_optional", { + description = S("Allfaces Optional Drawtype Test Node"), + drawtype = "allfaces_optional", + paramtype = "light", + tiles = { "testnodes_allfaces_optional.png" }, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:allfaces_optional_waving", { + description = S("Waving Allfaces Optional Drawtype Test Node"), + drawtype = "allfaces_optional", + paramtype = "light", + tiles = { "testnodes_allfaces_optional.png^[brighten" }, + waving = 2, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:firelike", { + description = S("Firelike Drawtype Test Node"), + drawtype = "firelike", + paramtype = "light", + tiles = { "testnodes_firelike.png" }, + + + walkable = false, + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:fencelike", { + description = S("Fencelike Drawtype Test Node"), + drawtype = "fencelike", + paramtype = "light", + tiles = { "testnodes_fencelike.png" }, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:torchlike", { + description = S("Wallmounted Torchlike Drawtype Test Node"), + drawtype = "torchlike", + paramtype = "light", + paramtype2 = "wallmounted", + tiles = { + "testnodes_torchlike_floor.png", + "testnodes_torchlike_ceiling.png", + "testnodes_torchlike_wall.png", + }, + + + walkable = false, + sunlight_propagates = true, + groups = { dig_immediate = 3 }, + inventory_image = fallback_image("testnodes_torchlike_floor.png"), +}) + +minetest.register_node("testnodes:signlike", { + description = S("Wallmounted Signlike Drawtype Test Node"), + drawtype = "signlike", + paramtype = "light", + paramtype2 = "wallmounted", + tiles = { "testnodes_signlike.png" }, + + + walkable = false, + groups = { dig_immediate = 3 }, + sunlight_propagates = true, + inventory_image = fallback_image("testnodes_signlike.png"), +}) + +minetest.register_node("testnodes:plantlike", { + description = S("Plantlike Drawtype Test Node"), + drawtype = "plantlike", + paramtype = "light", + tiles = { "testnodes_plantlike.png" }, + + + walkable = false, + sunlight_propagates = true, + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:plantlike_waving", { + description = S("Waving Plantlike Drawtype Test Node"), + drawtype = "plantlike", + paramtype = "light", + tiles = { "testnodes_plantlike_waving.png" }, + waving = 1, + + + walkable = false, + sunlight_propagates = true, + groups = { dig_immediate = 3 }, +}) + + + +-- param2 will rotate +minetest.register_node("testnodes:plantlike_degrotate", { + description = S("Degrotate Plantlike Drawtype Test Node"), + drawtype = "plantlike", + paramtype = "light", + paramtype2 = "degrotate", + tiles = { "testnodes_plantlike_degrotate.png" }, + + + walkable = false, + sunlight_propagates = true, + groups = { dig_immediate = 3 }, +}) + +-- param2 will change height +minetest.register_node("testnodes:plantlike_leveled", { + description = S("Leveled Plantlike Drawtype Test Node"), + drawtype = "plantlike", + paramtype = "light", + paramtype2 = "leveled", + tiles = { + { name = "testnodes_plantlike_leveled.png", tileable_vertical = true }, + }, + + + -- We set a default param2 here only for convenience, to make the "plant" visible after placement + place_param2 = 8, + walkable = false, + sunlight_propagates = true, + groups = { dig_immediate = 3 }, +}) + +-- param2 changes shape +minetest.register_node("testnodes:plantlike_meshoptions", { + description = S("Meshoptions Plantlike Drawtype Test Node"), + drawtype = "plantlike", + paramtype = "light", + paramtype2 = "meshoptions", + tiles = { "testnodes_plantlike_meshoptions.png" }, + + + walkable = false, + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:plantlike_rooted", { + description = S("Rooted Plantlike Drawtype Test Node"), + drawtype = "plantlike_rooted", + paramtype = "light", + tiles = { "testnodes_plantlike_rooted_base.png" }, + special_tiles = { "testnodes_plantlike_rooted.png" }, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:plantlike_rooted_waving", { + description = S("Waving Rooted Plantlike Drawtype Test Node"), + drawtype = "plantlike_rooted", + paramtype = "light", + tiles = { + "testnodes_plantlike_rooted_base.png", + "testnodes_plantlike_rooted_base.png", + "testnodes_plantlike_rooted_base_side_waving.png", + }, + special_tiles = { "testnodes_plantlike_rooted_waving.png" }, + waving = 1, + + groups = { dig_immediate = 3 }, +}) + +-- param2 changes height +minetest.register_node("testnodes:plantlike_rooted_leveled", { + description = S("Leveled Rooted Plantlike Drawtype Test Node"), + drawtype = "plantlike_rooted", + paramtype = "light", + paramtype2 = "leveled", + tiles = { + "testnodes_plantlike_rooted_base.png", + "testnodes_plantlike_rooted_base.png", + "testnodes_plantlike_rooted_base_side_leveled.png", + }, + special_tiles = { + { name = "testnodes_plantlike_rooted_leveled.png", tileable_vertical = true }, + }, + + + -- We set a default param2 here only for convenience, to make the "plant" visible after placement + place_param2 = 8, + groups = { dig_immediate = 3 }, +}) + +-- param2 changes shape +minetest.register_node("testnodes:plantlike_rooted_meshoptions", { + description = S("Meshoptions Rooted Plantlike Drawtype Test Node"), + drawtype = "plantlike_rooted", + paramtype = "light", + paramtype2 = "meshoptions", + tiles = { + "testnodes_plantlike_rooted_base.png", + "testnodes_plantlike_rooted_base.png", + "testnodes_plantlike_rooted_base_side_meshoptions.png", + }, + special_tiles = { + "testnodes_plantlike_rooted_meshoptions.png", + }, + + groups = { dig_immediate = 3 }, +}) + +-- param2 changes rotation +minetest.register_node("testnodes:plantlike_rooted_degrotate", { + description = S("Degrotate Rooted Plantlike Drawtype Test Node"), + drawtype = "plantlike_rooted", + paramtype = "light", + paramtype2 = "degrotate", + tiles = { + "testnodes_plantlike_rooted_base.png", + "testnodes_plantlike_rooted_base.png", + "testnodes_plantlike_rooted_base_side_degrotate.png", + }, + special_tiles = { + "testnodes_plantlike_rooted_degrotate.png", + }, + + groups = { dig_immediate = 3 }, +}) + +-- Demonstrative liquid nodes, source and flowing form. +minetest.register_node("testnodes:liquid", { + description = S("Source Liquid Drawtype Test Node"), + drawtype = "liquid", + paramtype = "light", + tiles = { + "testnodes_liquidsource.png", + }, + special_tiles = { + {name="testnodes_liquidsource.png", backface_culling=false}, + {name="testnodes_liquidsource.png", backface_culling=true}, + }, + use_texture_alpha = true, + + + walkable = false, + liquidtype = "source", + liquid_range = 1, + liquid_viscosity = 0, + liquid_alternative_flowing = "testnodes:liquid_flowing", + liquid_alternative_source = "testnodes:liquid", + groups = { dig_immediate = 3 }, +}) +minetest.register_node("testnodes:liquid_flowing", { + description = S("Flowing Liquid Drawtype Test Node"), + drawtype = "flowingliquid", + paramtype = "light", + paramtype2 = "flowingliquid", + tiles = { + "testnodes_liquidflowing.png", + }, + special_tiles = { + {name="testnodes_liquidflowing.png", backface_culling=false}, + {name="testnodes_liquidflowing.png", backface_culling=false}, + }, + use_texture_alpha = true, + + + walkable = false, + liquidtype = "flowing", + liquid_range = 1, + liquid_viscosity = 0, + liquid_alternative_flowing = "testnodes:liquid_flowing", + liquid_alternative_source = "testnodes:liquid", + groups = { dig_immediate = 3 }, +}) +minetest.register_node("testnodes:liquid_waving", { + description = S("Waving Source Liquid Drawtype Test Node"), + drawtype = "liquid", + paramtype = "light", + tiles = { + "testnodes_liquidsource.png^[brighten", + }, + special_tiles = { + {name="testnodes_liquidsource.png^[brighten", backface_culling=false}, + {name="testnodes_liquidsource.png^[brighten", backface_culling=true}, + }, + use_texture_alpha = true, + waving = 3, + + + walkable = false, + liquidtype = "source", + liquid_range = 1, + liquid_viscosity = 0, + liquid_alternative_flowing = "testnodes:liquid_flowing_waving", + liquid_alternative_source = "testnodes:liquid_waving", + groups = { dig_immediate = 3 }, +}) +minetest.register_node("testnodes:liquid_flowing_waving", { + description = S("Waving Flowing Liquid Drawtype Test Node"), + drawtype = "flowingliquid", + paramtype = "light", + paramtype2 = "flowingliquid", + tiles = { + "testnodes_liquidflowing.png^[brighten", + }, + special_tiles = { + {name="testnodes_liquidflowing.png^[brighten", backface_culling=false}, + {name="testnodes_liquidflowing.png^[brighten", backface_culling=false}, + }, + use_texture_alpha = true, + waving = 3, + + + walkable = false, + liquidtype = "flowing", + liquid_range = 1, + liquid_viscosity = 0, + liquid_alternative_flowing = "testnodes:liquid_flowing_waving", + liquid_alternative_source = "testnodes:liquid_waving", + groups = { dig_immediate = 3 }, +}) + + + +-- Invisible node +minetest.register_node("testnodes:airlike", { + description = S("Airlike Drawtype Test Node"), + drawtype = "airlike", + paramtype = "light", + + + walkable = false, + groups = { dig_immediate = 3 }, + sunlight_propagates = true, + inventory_image = fallback_image("testnodes_airlike.png"), +}) + +-- param2 changes liquid height +minetest.register_node("testnodes:glassliquid", { + description = S("Glasslike Liquid Level Drawtype Test Node"), + drawtype = "glasslike_framed", + paramtype = "light", + paramtype2 = "glasslikeliquidlevel", + tiles = { + "testnodes_glasslikeliquid.png", + }, + special_tiles = { + "testnodes_liquid.png", + }, + + groups = { dig_immediate = 3 }, +}) + +-- Adding many raillike examples, primarily to demonstrate the behavior of +-- "raillike groups". Nodes of the same type (rail, groupless, line, street) +-- should connect to nodes of the same "rail type" (=same shape, different +-- color) only. +local rails = { + { "rail", {"testnodes_rail_straight.png", "testnodes_rail_curved.png", "testnodes_rail_t_junction.png", "testnodes_rail_crossing.png"} }, + { "line", {"testnodes_line_straight.png", "testnodes_line_curved.png", "testnodes_line_t_junction.png", "testnodes_line_crossing.png"}, }, + { "street", {"testnodes_street_straight.png", "testnodes_street_curved.png", "testnodes_street_t_junction.png", "testnodes_street_crossing.png"}, }, + -- the "groupless" nodes are nodes in which the "connect_to_raillike" group is not set + { "groupless", {"testnodes_rail2_straight.png", "testnodes_rail2_curved.png", "testnodes_rail2_t_junction.png", "testnodes_rail2_crossing.png"} }, +} +local colors = { "", "cyan", "red" } + +for r=1, #rails do + local id = rails[r][1] + local tiles = rails[r][2] + local raillike_group + if id ~= "groupless" then + raillike_group = minetest.raillike_group(id) + end + for c=1, #colors do + local color + if colors[c] ~= "" then + color = colors[c] + end + minetest.register_node("testnodes:raillike_"..id..c, { + description = S("Raillike Drawtype Test Node: @1 @2", id, c), + drawtype = "raillike", + paramtype = "light", + tiles = tiles, + groups = { connect_to_raillike = raillike_group, dig_immediate = 3 }, + + + color = color, + selection_box = { + type = "fixed", + fixed = {{-0.5, -0.5, -0.5, 0.5, -0.4, 0.5}}, + }, + sunlight_propagates = true, + walkable = false, + }) + end +end + + + +-- Add visual_scale variants of previous nodes for half and double size +local scale = function(subname, desc_double, desc_half) + local original = "testnodes:"..subname + local def = table.copy(minetest.registered_items[original]) + def.visual_scale = 2.0 + def.description = desc_double + minetest.register_node("testnodes:"..subname.."_double", def) + def = table.copy(minetest.registered_items[original]) + def.visual_scale = 0.5 + def.description = desc_half + minetest.register_node("testnodes:"..subname.."_half", def) +end + +scale("plantlike", + S("Double-sized Plantlike Drawtype Test Node"), + S("Half-sized Plantlike Drawtype Test Node")) +scale("torchlike", + S("Double-sized Wallmounted Torchlike Drawtype Test Node"), + S("Half-sized Wallmounted Torchlike Drawtype Test Node")) +scale("signlike", + S("Double-sized Wallmounted Signlike Drawtype Test Node"), + S("Half-sized Wallmounted Signlike Drawtype Test Node")) +scale("firelike", + S("Double-sized Firelike Drawtype Test Node"), + S("Half-sized Firelike Drawtype Test Node")) diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/init.lua minetest-5.3.0/games/devtest/mods/testnodes/init.lua --- minetest-5.2.0/games/devtest/mods/testnodes/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/init.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,10 @@ +local path = minetest.get_modpath(minetest.get_current_modname()) + +dofile(path.."/drawtypes.lua") +dofile(path.."/meshes.lua") +dofile(path.."/nodeboxes.lua") +dofile(path.."/param2.lua") +dofile(path.."/properties.lua") +dofile(path.."/liquids.lua") +dofile(path.."/light.lua") +dofile(path.."/textures.lua") diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/light.lua minetest-5.3.0/games/devtest/mods/testnodes/light.lua --- minetest-5.2.0/games/devtest/mods/testnodes/light.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/light.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,48 @@ +-- Test Nodes: Light test + +local S = minetest.get_translator("testnodes") + +-- All possible light levels +for i=1, minetest.LIGHT_MAX do + minetest.register_node("testnodes:light"..i, { + description = S("Light Source (@1)", i), + paramtype = "light", + light_source = i, + + + tiles ={"testnodes_light_"..i..".png"}, + drawtype = "glasslike", + walkable = false, + sunlight_propagates = true, + is_ground_content = false, + groups = {dig_immediate=3}, + }) +end + +-- Lets light through, but not sunlight, leading to a +-- reduction in light level when light passes through +minetest.register_node("testnodes:sunlight_filter", { + description = S("Sunlight Filter"), + paramtype = "light", + + + drawtype = "glasslike", + tiles = { + "testnodes_sunlight_filter.png", + }, + groups = { dig_immediate = 3 }, +}) + +-- Lets light and sunlight through without obstruction +minetest.register_node("testnodes:sunlight_propagator", { + description = S("Sunlight Propagator"), + paramtype = "light", + sunlight_propagates = true, + + + drawtype = "glasslike", + tiles = { + "testnodes_sunlight_filter.png^[brighten", + }, + groups = { dig_immediate = 3 }, +}) diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/liquids.lua minetest-5.3.0/games/devtest/mods/testnodes/liquids.lua --- minetest-5.2.0/games/devtest/mods/testnodes/liquids.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/liquids.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,91 @@ +-- Add liquids for ranges and viscosity levels 0-8 + +for d=0, 8 do + minetest.register_node("testnodes:rliquid_"..d, { + description = "Test Liquid Source, Range "..d, + drawtype = "liquid", + tiles = {"testnodes_liquidsource_r"..d..".png"}, + special_tiles = { + {name = "testnodes_liquidsource_r"..d..".png", backface_culling = false}, + {name = "testnodes_liquidsource_r"..d..".png", backface_culling = true}, + }, + alpha = 192, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + liquidtype = "source", + liquid_alternative_flowing = "testnodes:rliquid_flowing_"..d, + liquid_alternative_source = "testnodes:rliquid_"..d, + liquid_range = d, + }) + + minetest.register_node("testnodes:rliquid_flowing_"..d, { + description = "Flowing Test Liquid, Range "..d, + drawtype = "flowingliquid", + tiles = {"testnodes_liquidflowing_r"..d..".png"}, + special_tiles = { + {name = "testnodes_liquidflowing_r"..d..".png", backface_culling = false}, + {name = "testnodes_liquidflowing_r"..d..".png", backface_culling = false}, + }, + alpha = 192, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + liquidtype = "flowing", + liquid_alternative_flowing = "testnodes:rliquid_flowing_"..d, + liquid_alternative_source = "testnodes:rliquid_"..d, + liquid_range = d, + }) + + local mod = "^[colorize:#000000:127" + minetest.register_node("testnodes:vliquid_"..d, { + description = "Test Liquid Source, Viscosity "..d, + drawtype = "liquid", + tiles = {"testnodes_liquidsource_r"..d..".png"..mod}, + special_tiles = { + {name = "testnodes_liquidsource_r"..d..".png"..mod, backface_culling = false}, + {name = "testnodes_liquidsource_r"..d..".png"..mod, backface_culling = true}, + }, + alpha = 192, + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + liquidtype = "source", + liquid_alternative_flowing = "testnodes:vliquid_flowing_"..d, + liquid_alternative_source = "testnodes:vliquid_"..d, + liquid_viscosity = d, + }) + + minetest.register_node("testnodes:vliquid_flowing_"..d, { + description = "Flowing Test Liquid, Viscosity "..d, + drawtype = "flowingliquid", + tiles = {"testnodes_liquidflowing_r"..d..".png"..mod}, + special_tiles = { + {name = "testnodes_liquidflowing_r"..d..".png"..mod, backface_culling = false}, + {name = "testnodes_liquidflowing_r"..d..".png"..mod, backface_culling = false}, + }, + alpha = 192, + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + liquidtype = "flowing", + liquid_alternative_flowing = "testnodes:vliquid_flowing_"..d, + liquid_alternative_source = "testnodes:vliquid_"..d, + liquid_viscosity = d, + }) + +end diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/meshes.lua minetest-5.3.0/games/devtest/mods/testnodes/meshes.lua --- minetest-5.2.0/games/devtest/mods/testnodes/meshes.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/meshes.lua 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,145 @@ +-- Meshes + +local S = minetest.get_translator("testnodes") + +local ocorner_cbox = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.25, 0, 0.5}, + {-0.5, 0, 0, 0, 0.25, 0.5}, + {-0.5, 0.25, 0.25, -0.25, 0.5, 0.5} + } +} + +local tall_pyr_cbox = { + type = "fixed", + fixed = { + { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 }, + { -0.375, -0.25, -0.375, 0.375, 0, 0.375}, + { -0.25, 0, -0.25, 0.25, 0.25, 0.25}, + { -0.125, 0.25, -0.125, 0.125, 0.5, 0.125} + } +} + +-- Normal mesh +minetest.register_node("testnodes:mesh", { + description = S("Mesh Test Node"), + drawtype = "mesh", + mesh = "testnodes_pyramid.obj", + tiles = {"testnodes_mesh_stripes2.png"}, + paramtype = "light", + collision_box = tall_pyr_cbox, + + groups = {dig_immediate=3}, +}) + +-- Facedir mesh: outer corner slope +minetest.register_node("testnodes:mesh_facedir", { + description = S("Facedir Mesh Test Node"), + drawtype = "mesh", + mesh = "testnodes_ocorner.obj", + tiles = {"testnodes_mesh_stripes.png"}, + paramtype = "light", + paramtype2 = "facedir", + collision_box = ocorner_cbox, + + groups = {dig_immediate=3}, +}) + +minetest.register_node("testnodes:mesh_colorfacedir", { + description = S("Color Facedir Mesh Test Node"), + drawtype = "mesh", + mesh = "testnodes_ocorner.obj", + tiles = {"testnodes_mesh_stripes3.png"}, + paramtype = "light", + paramtype2 = "colorfacedir", + palette = "testnodes_palette_facedir.png", + collision_box = ocorner_cbox, + + groups = {dig_immediate=3}, +}) + +-- Wallmounted mesh: pyramid +minetest.register_node("testnodes:mesh_wallmounted", { + description = S("Wallmounted Mesh Test Node"), + drawtype = "mesh", + mesh = "testnodes_pyramid.obj", + tiles = {"testnodes_mesh_stripes2.png"}, + paramtype = "light", + paramtype2 = "wallmounted", + collision_box = tall_pyr_cbox, + + groups = {dig_immediate=3}, +}) + +minetest.register_node("testnodes:mesh_colorwallmounted", { + description = S("Color Wallmounted Mesh Test Node"), + drawtype = "mesh", + mesh = "testnodes_pyramid.obj", + tiles = {"testnodes_mesh_stripes3.png"}, + paramtype = "light", + paramtype2 = "colorwallmounted", + palette = "testnodes_palette_wallmounted.png", + collision_box = tall_pyr_cbox, + + groups = {dig_immediate=3}, +}) + + +minetest.register_node("testnodes:mesh_double", { + description = S("Double-sized Mesh Test Node"), + drawtype = "mesh", + mesh = "testnodes_pyramid.obj", + tiles = {"testnodes_mesh_stripes2.png"}, + paramtype = "light", + collision_box = tall_pyr_cbox, + visual_scale = 2, + + groups = {dig_immediate=3}, +}) +minetest.register_node("testnodes:mesh_half", { + description = S("Half-sized Mesh Test Node"), + drawtype = "mesh", + mesh = "testnodes_pyramid.obj", + tiles = {"testnodes_mesh_stripes2.png"}, + paramtype = "light", + collision_box = tall_pyr_cbox, + visual_scale = 0.5, + + groups = {dig_immediate=3}, +}) + +minetest.register_node("testnodes:mesh_waving1", { + description = S("Plantlike-waving Mesh Test Node"), + drawtype = "mesh", + mesh = "testnodes_pyramid.obj", + tiles = {"testnodes_mesh_stripes4.png^[multiply:#B0FFB0"}, + paramtype = "light", + collision_box = tall_pyr_cbox, + waving = 1, + + groups = {dig_immediate=3}, +}) +minetest.register_node("testnodes:mesh_waving2", { + description = S("Leaflike-waving Mesh Test Node"), + drawtype = "mesh", + mesh = "testnodes_pyramid.obj", + tiles = {"testnodes_mesh_stripes4.png^[multiply:#FFFFB0"}, + paramtype = "light", + collision_box = tall_pyr_cbox, + waving = 2, + + groups = {dig_immediate=3}, +}) +minetest.register_node("testnodes:mesh_waving3", { + description = S("Liquidlike-waving Mesh Test Node"), + drawtype = "mesh", + mesh = "testnodes_pyramid.obj", + tiles = {"testnodes_mesh_stripes4.png^[multiply:#B0B0FF"}, + paramtype = "light", + collision_box = tall_pyr_cbox, + waving = 3, + + groups = {dig_immediate=3}, +}) diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/mod.conf minetest-5.3.0/games/devtest/mods/testnodes/mod.conf --- minetest-5.2.0/games/devtest/mods/testnodes/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/mod.conf 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,2 @@ +name = testnodes +description = Contains a bunch of basic example nodes for demonstrative purposes, development and testing diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/models/testnodes_ocorner.obj minetest-5.3.0/games/devtest/mods/testnodes/models/testnodes_ocorner.obj --- minetest-5.2.0/games/devtest/mods/testnodes/models/testnodes_ocorner.obj 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/models/testnodes_ocorner.obj 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,23 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_ocorner_onetexture.blend' +# www.blender.org +o Cube_Cube.002 +v 0.500000 0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 0.707100 -0.707100 +s off +f 3/1/1 2/2/1 4/3/1 5/4/1 +f 1/2/2 3/3/2 5/4/2 +f 1/1/3 2/3/3 3/4/3 +f 1/1/4 4/3/4 2/4/4 +f 1/2/5 5/3/5 4/4/5 diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/models/testnodes_pyramid.obj minetest-5.3.0/games/devtest/mods/testnodes/models/testnodes_pyramid.obj --- minetest-5.2.0/games/devtest/mods/testnodes/models/testnodes_pyramid.obj 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/models/testnodes_pyramid.obj 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,24 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_pyramid_onetexture.blend' +# www.blender.org +o Cube +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.000000 0.500000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.500000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn -0.894400 0.447200 -0.000000 +vn 0.000000 0.447200 -0.894400 +vn 0.894400 0.447200 0.000000 +vn -0.000000 0.447200 0.894400 +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 3/4/2 5/5/2 4/3/2 +f 5/5/3 1/3/3 4/4/3 +f 1/4/4 5/5/4 2/3/4 +f 2/4/5 5/5/5 3/3/5 diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/nodeboxes.lua minetest-5.3.0/games/devtest/mods/testnodes/nodeboxes.lua --- minetest-5.2.0/games/devtest/mods/testnodes/nodeboxes.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/nodeboxes.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,80 @@ +local S = minetest.get_translator("testnodes") + +-- Nodebox examples and tests. + +-- An simple example nodebox with one centered box +minetest.register_node("testnodes:nodebox_fixed", { + description = S("Fixed Nodebox Test Node"), + tiles = {"testnodes_nodebox.png"}, + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, + }, + + groups = {dig_immediate=3}, +}) + +-- 50% higher than a regular node +minetest.register_node("testnodes:nodebox_overhigh", { + description = S("Overhigh Nodebox Test Node"), + tiles = {"testnodes_nodebox.png"}, + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 1, 0.5}, + }, + + groups = {dig_immediate=3}, +}) + +-- 100% higher than a regular node +minetest.register_node("testnodes:nodebox_overhigh2", { + description = S("Double-height Nodebox Test Node"), + tiles = {"testnodes_nodebox.png"}, + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5}, + }, + + groups = {dig_immediate=3}, +}) + +-- Height of nodebox changes with its param2 value +minetest.register_node("testnodes:nodebox_leveled", { + description = S("Leveled Nodebox Test Node"), + tiles = {"testnodes_nodebox.png"}, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "leveled", + node_box = { + type = "leveled", + fixed = {-0.5, 0.0, -0.5, 0.5, -0.499, 0.5}, + }, + + groups = {dig_immediate=3}, +}) + +-- Wall-like nodebox that connects to neighbors +minetest.register_node("testnodes:nodebox_connected", { + description = S("Connected Nodebox Test Node"), + tiles = {"testnodes_nodebox.png"}, + groups = {connected_nodebox=1, dig_immediate=3}, + drawtype = "nodebox", + paramtype = "light", + connects_to = {"group:connected_nodebox"}, + connect_sides = {"front", "back", "left", "right"}, + node_box = { + type = "connected", + fixed = {-0.125, -0.500, -0.125, 0.125, 0.500, 0.125}, + connect_front = {-0.125, -0.500, -0.500, 0.125, 0.400, -0.125}, + connect_back = {-0.125, -0.500, 0.125, 0.125, 0.400, 0.500}, + connect_left = {-0.500, -0.500, -0.125, -0.125, 0.400, 0.125}, + connect_right = {0.125, -0.500, -0.125, 0.500, 0.400, 0.125}, + }, +}) + diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/param2.lua minetest-5.3.0/games/devtest/mods/testnodes/param2.lua --- minetest-5.2.0/games/devtest/mods/testnodes/param2.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/param2.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,168 @@ +-- This file is for misc. param2 tests that aren't covered in drawtypes.lua already. + +local S = minetest.get_translator("testnodes") + +minetest.register_node("testnodes:facedir", { + description = S("Facedir Test Node"), + paramtype2 = "facedir", + tiles = { + "testnodes_1.png", + "testnodes_2.png", + "testnodes_3.png", + "testnodes_4.png", + "testnodes_5.png", + "testnodes_6.png", + }, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:facedir_nodebox", { + description = S("Facedir Nodebox Test Node"), + tiles = { + "testnodes_1.png", + "testnodes_2.png", + "testnodes_3.png", + "testnodes_4.png", + "testnodes_5.png", + "testnodes_6.png", + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.2, 0.2, 0.2}, + }, + + groups = {dig_immediate=3}, +}) + +minetest.register_node("testnodes:wallmounted", { + description = S("Wallmounted Test Node"), + paramtype2 = "wallmounted", + tiles = { + "testnodes_1w.png", + "testnodes_2w.png", + "testnodes_3w.png", + "testnodes_4w.png", + "testnodes_5w.png", + "testnodes_6w.png", + }, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:wallmounted_nodebox", { + description = S("Wallmounted Nodebox Test Node"), + paramtype2 = "wallmounted", + paramtype = "light", + tiles = { + "testnodes_1w.png", + "testnodes_2w.png", + "testnodes_3w.png", + "testnodes_4w.png", + "testnodes_5w.png", + "testnodes_6w.png", + }, + drawtype = "nodebox", + node_box = { + type = "wallmounted", + wall_top = { -0.5, 0, -0.5, 0.5, 0.5, 0.5 }, + wall_bottom = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 }, + wall_side = { -0.5, -0.5, -0.5, 0, 0.5, 0.5 }, + }, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:color", { + description = S("Color Test Node"), + paramtype2 = "color", + palette = "testnodes_palette_full.png", + tiles = { + "testnodes_node.png", + }, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:colorfacedir", { + description = S("Color Facedir Test Node"), + paramtype2 = "colorfacedir", + palette = "testnodes_palette_facedir.png", + tiles = { + "testnodes_1g.png", + "testnodes_2g.png", + "testnodes_3g.png", + "testnodes_4g.png", + "testnodes_5g.png", + "testnodes_6g.png", + }, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:colorfacedir_nodebox", { + description = S("Color Facedir Nodebox Test Node"), + tiles = { + "testnodes_1g.png", + "testnodes_2g.png", + "testnodes_3g.png", + "testnodes_4g.png", + "testnodes_5g.png", + "testnodes_6g.png", + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "colorfacedir", + palette = "testnodes_palette_facedir.png", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.2, 0.2, 0.2}, + }, + + groups = {dig_immediate=3}, +}) + +minetest.register_node("testnodes:colorwallmounted", { + description = S("Color Wallmounted Test Node"), + paramtype2 = "colorwallmounted", + paramtype = "light", + palette = "testnodes_palette_wallmounted.png", + tiles = { + "testnodes_1wg.png", + "testnodes_2wg.png", + "testnodes_3wg.png", + "testnodes_4wg.png", + "testnodes_5wg.png", + "testnodes_6wg.png", + }, + + groups = { dig_immediate = 3 }, +}) + +minetest.register_node("testnodes:colorwallmounted_nodebox", { + description = S("Color Wallmounted Nodebox Test Node"), + paramtype2 = "colorwallmounted", + paramtype = "light", + palette = "testnodes_palette_wallmounted.png", + tiles = { + "testnodes_1wg.png", + "testnodes_2wg.png", + "testnodes_3wg.png", + "testnodes_4wg.png", + "testnodes_5wg.png", + "testnodes_6wg.png", + }, + drawtype = "nodebox", + node_box = { + type = "wallmounted", + wall_top = { -0.5, 0, -0.5, 0.5, 0.5, 0.5 }, + wall_bottom = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 }, + wall_side = { -0.5, -0.5, -0.5, 0, 0.5, 0.5 }, + }, + + groups = { dig_immediate = 3 }, +}) + diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/properties.lua minetest-5.3.0/games/devtest/mods/testnodes/properties.lua --- minetest-5.2.0/games/devtest/mods/testnodes/properties.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/properties.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,277 @@ +-- Test Nodes: Node property tests + +local S = minetest.get_translator("testnodes") + +-- Is supposed to fall when it doesn't rest on solid ground +minetest.register_node("testnodes:falling", { + description = S("Falling Node"), + tiles = { + "testnodes_node.png", + "testnodes_node.png", + "testnodes_node_falling.png", + }, + groups = { falling_node = 1, dig_immediate = 3 }, +}) + +-- Same as falling node, but will stop falling on top of liquids +minetest.register_node("testnodes:falling_float", { + description = S("Falling+Floating Node"), + groups = { falling_node = 1, float = 1, dig_immediate = 3 }, + + + tiles = { + "testnodes_node.png", + "testnodes_node.png", + "testnodes_node_falling.png", + }, + color = "cyan", +}) + +-- This node attaches to the floor and drops as item +-- when the floor is gone. +minetest.register_node("testnodes:attached", { + description = S("Floor-Attached Node"), + tiles = { + "testnodes_attached_top.png", + "testnodes_attached_bottom.png", + "testnodes_attached_side.png", + }, + groups = { attached_node = 1, dig_immediate = 3 }, +}) + +-- This node attaches to the side of a node and drops as item +-- when the node it attaches to is gone. +minetest.register_node("testnodes:attached_wallmounted", { + description = S("Wallmounted Attached Node"), + paramtype2 = "wallmounted", + tiles = { + "testnodes_attachedw_top.png", + "testnodes_attachedw_bottom.png", + "testnodes_attachedw_side.png", + }, + groups = { attached_node = 1, dig_immediate = 3 }, +}) + +-- Jump disabled +minetest.register_node("testnodes:nojump", { + description = S("Non-jumping Node"), + groups = {disable_jump=1, dig_immediate=3}, + tiles = {"testnodes_nojump_top.png", "testnodes_nojump_side.png"}, +}) + +-- Jump disabled plant +minetest.register_node("testnodes:nojump_walkable", { + description = S("Non-jumping Plant Node"), + drawtype = "plantlike", + groups = {disable_jump=1, dig_immediate=3}, + walkable = false, + tiles = {"testnodes_nojump_top.png"}, +}) + +-- Climbable up and down with jump and sneak keys +minetest.register_node("testnodes:climbable", { + description = S("Climbable Node"), + climbable = true, + walkable = false, + + + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + tiles ={"testnodes_climbable_side.png"}, + drawtype = "glasslike", + groups = {dig_immediate=3}, +}) + +-- Climbable only downwards with sneak key +minetest.register_node("testnodes:climbable_nojump", { + description = S("Downwards-climbable Node"), + climbable = true, + walkable = false, + + groups = {disable_jump=1, dig_immediate=3}, + drawtype = "glasslike", + tiles ={"testnodes_climbable_nojump_side.png"}, + paramtype = "light", + sunlight_propagates = true, +}) + +-- A liquid in which you can't rise +minetest.register_node("testnodes:liquid_nojump", { + description = S("Non-jumping Liquid Source Node"), + liquidtype = "source", + liquid_range = 1, + liquid_viscosity = 0, + liquid_alternative_flowing = "testnodes:liquidflowing_nojump", + liquid_alternative_source = "testnodes:liquid_nojump", + liquid_renewable = false, + groups = {disable_jump=1, dig_immediate=3}, + walkable = false, + + drawtype = "liquid", + tiles = {"testnodes_liquidsource.png^[colorize:#FF0000:127"}, + special_tiles = { + {name = "testnodes_liquidsource.png^[colorize:#FF0000:127", backface_culling = false}, + {name = "testnodes_liquidsource.png^[colorize:#FF0000:127", backface_culling = true}, + }, + use_texture_alpha = true, + paramtype = "light", + pointable = false, + liquids_pointable = true, + diggable = false, + buildable_to = true, + is_ground_content = false, + post_effect_color = {a = 70, r = 255, g = 0, b = 200}, +}) + +-- A liquid in which you can't rise (flowing variant) +minetest.register_node("testnodes:liquidflowing_nojump", { + description = S("Non-jumping Flowing Liquid Node"), + liquidtype = "flowing", + liquid_range = 1, + liquid_viscosity = 0, + liquid_alternative_flowing = "testnodes:liquidflowing_nojump", + liquid_alternative_source = "testnodes:liquid_nojump", + liquid_renewable = false, + groups = {disable_jump=1, dig_immediate=3}, + walkable = false, + + + drawtype = "flowingliquid", + tiles = {"testnodes_liquidflowing.png^[colorize:#FF0000:127"}, + special_tiles = { + {name = "testnodes_liquidflowing.png^[colorize:#FF0000:127", backface_culling = false}, + {name = "testnodes_liquidflowing.png^[colorize:#FF0000:127", backface_culling = false}, + }, + use_texture_alpha = true, + paramtype = "light", + paramtype2 = "flowingliquid", + pointable = false, + liquids_pointable = true, + diggable = false, + buildable_to = true, + is_ground_content = false, + post_effect_color = {a = 70, r = 255, g = 0, b = 200}, +}) + +-- Nodes that modify fall damage (various damage modifiers) +for i=-100, 100, 25 do + if i ~= 0 then + local subname, descnum + if i < 0 then + subname = "m"..math.abs(i) + descnum = tostring(i) + else + subname = tostring(i) + descnum = S("+@1", i) + end + local tex, color, desc + if i > 0 then + local val = math.floor((i/100)*255) + tex = "testnodes_fall_damage_plus.png" + color = { b=0, g=255-val, r=255, a=255 } + desc = S("Fall Damage Node (+@1%)", i) + else + tex = "testnodes_fall_damage_minus.png" + if i == -100 then + color = { r=0, b=0, g=255, a=255 } + else + local val = math.floor((math.abs(i)/100)*255) + color = { r=0, b=255, g=255-val, a=255 } + end + desc = S("Fall Damage Node (-@1%)", math.abs(i)) + end + minetest.register_node("testnodes:damage"..subname, { + description = desc, + groups = {fall_damage_add_percent=i, dig_immediate=3}, + + + tiles = { tex }, + is_ground_content = false, + color = color, + }) + end +end + +-- Bouncy nodes (various bounce levels) +for i=20, 180, 20 do + local val = math.floor(((i-20)/200)*255) + minetest.register_node("testnodes:bouncy"..i, { + description = S("Bouncy Node (@1%)", i), + groups = {bouncy=i, dig_immediate=3}, + + + tiles ={"testnodes_bouncy.png"}, + is_ground_content = false, + color = { r=255, g=255-val, b=val, a=255 }, + }) +end + +-- Slippery nodes (various slippery levels) +for i=1, 5 do + minetest.register_node("testnodes:slippery"..i, { + description = S("Slippery Node (@1)", i), + tiles ={"testnodes_slippery.png"}, + is_ground_content = false, + groups = {slippery=i, dig_immediate=3}, + color = { r=0, g=255, b=math.floor((i/5)*255), a=255 }, + }) +end + +-- By placing something on the node, the node itself will be replaced +minetest.register_node("testnodes:buildable_to", { + description = S("Replacable Node"), + buildable_to = true, + tiles = {"testnodes_buildable_to.png"}, + is_ground_content = false, + groups = {dig_immediate=3}, +}) + +-- Nodes that deal damage to players that are inside them. +-- Negative damage nodes should heal. +for d=-3,3 do + if d ~= 0 then + local sub, tile + if d > 0 then + sub = tostring(d) + tile = "testnodes_damage.png" + else + sub = "m" .. tostring(math.abs(d)) + tile = "testnodes_damage_neg.png" + end + if math.abs(d) == 2 then + tile = tile .. "^[colorize:#000000:70" + elseif math.abs(d) == 3 then + tile = tile .. "^[colorize:#000000:140" + end + minetest.register_node("testnodes:damage_"..sub, { + description = S("Damage Node (@1 damage per second)", d), + damage_per_second = d, + + + walkable = false, + is_ground_content = false, + drawtype = "allfaces", + paramtype = "light", + sunlight_propagates = true, + tiles = { tile }, + groups = {dig_immediate=3}, + }) + end +end + +-- Causes drowning damage +minetest.register_node("testnodes:drowning_1", { + description = S("Drowning Node (@1 damage)", 1), + drowning = 1, + + + walkable = false, + is_ground_content = false, + drawtype = "allfaces", + paramtype = "light", + sunlight_propagates = true, + tiles = { "testnodes_drowning.png" }, + groups = {dig_immediate=3}, +}) + diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/README.md minetest-5.3.0/games/devtest/mods/testnodes/README.md --- minetest-5.2.0/games/devtest/mods/testnodes/README.md 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/README.md 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,11 @@ +# Test Nodes + +This mod contains a bunch of basic nodes to test development stuff. +Most nodes are kept as minimal as possible in order to show off one particular feature of the engine, to make testing stuff easier. + +This mod includes tests for: + +* drawtypes +* paramtype2's +* node properties such as damage, drowning, falling, etc. +* other random stuff diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/settingtypes.txt minetest-5.3.0/games/devtest/mods/testnodes/settingtypes.txt --- minetest-5.2.0/games/devtest/mods/testnodes/settingtypes.txt 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/settingtypes.txt 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,4 @@ +# If set to true, will show an inventory image for nodes that have no inventory image as of Minetest 5.1.0. +# This is due to . +# This is only added to make the items more visible to avoid confusion, but you will no longer see the default inventory images for these items. When you want to test the default inventory image of drawtypes, this should be turned off. +testnodes_show_fallback_image (Use fallback inventory images) bool false Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_1g.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_1g.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_1wg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_1wg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_1w.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_1w.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_2g.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_2g.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_2wg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_2wg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_2w.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_2w.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_3g.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_3g.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_3.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_3.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_3wg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_3wg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_3w.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_3w.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_4g.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_4g.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_4.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_4.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_4wg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_4wg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_4w.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_4w.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_5g.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_5g.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_5.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_5.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_5wg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_5wg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_5w.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_5w.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_6g.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_6g.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_6.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_6.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_6wg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_6wg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_6w.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_6w.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_airlike.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_airlike.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_allfaces_optional.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_allfaces_optional.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_allfaces.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_allfaces.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_alpha128.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_alpha128.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_alpha191.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_alpha191.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_alpha64.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_alpha64.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_alpha.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_alpha.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_anim.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_anim.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_attached_bottom.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_attached_bottom.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_attached_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_attached_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_attached_top.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_attached_top.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_attachedw_bottom.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_attachedw_bottom.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_attachedw_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_attachedw_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_attachedw_top.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_attachedw_top.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_bouncy.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_bouncy.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_buildable_to.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_buildable_to.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_climbable_nojump_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_climbable_nojump_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_climbable_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_climbable_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_damage_neg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_damage_neg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_damage.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_damage.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_drowning.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_drowning.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_fall_damage_minus.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_fall_damage_minus.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_fall_damage_plus.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_fall_damage_plus.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_fencelike.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_fencelike.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_firelike.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_firelike.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_glasslike_detail.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_glasslike_detail.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed_optional.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed_optional.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_glasslikeliquid.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_glasslikeliquid.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_glasslike.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_glasslike.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_10.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_10.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_11.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_11.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_12.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_12.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_13.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_13.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_14.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_14.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_3.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_3.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_4.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_4.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_5.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_5.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_6.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_6.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_7.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_7.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_8.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_8.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light_9.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light_9.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_light.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_light.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_line_crossing.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_line_crossing.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_line_curved.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_line_curved.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_line_straight.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_line_straight.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_line_t_junction.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_line_t_junction.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r0.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r0.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r3.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r3.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r4.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r4.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r5.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r5.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r6.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r6.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r7.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r7.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r8.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r8.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquid.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquid.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r0.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r0.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r3.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r3.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r4.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r4.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r5.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r5.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r6.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r6.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r7.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r7.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r8.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r8.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes3.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes3.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes4.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes4.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_nodebox.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_nodebox.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_node_falling.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_node_falling.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_node.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_node.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_nojump_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_nojump_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_nojump_top.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_nojump_top.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_normal1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_normal1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_normal2.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_normal2.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_normal3.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_normal3.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_normal4.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_normal4.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_normal5.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_normal5.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_normal6.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_normal6.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_normal.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_normal.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_palette_facedir.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_palette_facedir.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_palette_full.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_palette_full.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_palette_wallmounted.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_palette_wallmounted.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_degrotate.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_degrotate.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_leveled.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_leveled.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_meshoptions.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_meshoptions.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_degrotate.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_degrotate.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_leveled.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_leveled.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_meshoptions.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_meshoptions.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_waving.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_waving.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_degrotate.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_degrotate.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_leveled.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_leveled.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_meshoptions.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_meshoptions.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_waving.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_waving.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_waving.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_plantlike_waving.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_rail2_crossing.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_rail2_crossing.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_rail2_curved.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_rail2_curved.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_rail2_straight.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_rail2_straight.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_rail2_t_junction.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_rail2_t_junction.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_rail_crossing.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_rail_crossing.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_rail_curved.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_rail_curved.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_rail_straight.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_rail_straight.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_rail_t_junction.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_rail_t_junction.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_signlike.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_signlike.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_slippery.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_slippery.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_street_crossing.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_street_crossing.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_street_curved.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_street_curved.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_street_straight.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_street_straight.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_street_t_junction.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_street_t_junction.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_sunlight_filter.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_sunlight_filter.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_torchlike_ceiling.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_torchlike_ceiling.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_torchlike_floor.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_torchlike_floor.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testnodes/textures/testnodes_torchlike_wall.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testnodes/textures/testnodes_torchlike_wall.png differ diff -Nru minetest-5.2.0/games/devtest/mods/testnodes/textures.lua minetest-5.3.0/games/devtest/mods/testnodes/textures.lua --- minetest-5.2.0/games/devtest/mods/testnodes/textures.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testnodes/textures.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,73 @@ +-- Node texture tests + +local S = minetest.get_translator("testnodes") + +minetest.register_node("testnodes:6sides", { + description = S("Six Textures Test Node"), + tiles = { + "testnodes_normal1.png", + "testnodes_normal2.png", + "testnodes_normal3.png", + "testnodes_normal4.png", + "testnodes_normal5.png", + "testnodes_normal6.png", + }, + + groups = { dig_immediate = 2 }, +}) + +minetest.register_node("testnodes:anim", { + description = S("Animated Test Node"), + tiles = { + { name = "testnodes_anim.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 4.0, + }, }, + }, + + groups = { dig_immediate = 2 }, +}) + +-- Node texture transparency test + +local alphas = { 64, 128, 191 } + +for a=1,#alphas do + local alpha = alphas[a] + + -- Transparency taken from texture + minetest.register_node("testnodes:alpha_texture_"..alpha, { + description = S("Texture Alpha Test Node (@1)", alpha), + drawtype = "glasslike", + paramtype = "light", + tiles = { + "testnodes_alpha"..alpha..".png", + }, + use_texture_alpha = true, + + groups = { dig_immediate = 3 }, + }) + + -- Transparency set via "alpha" parameter + minetest.register_node("testnodes:alpha_"..alpha, { + description = S("Alpha Test Node (@1)", alpha), + -- It seems that only the liquid drawtype supports the alpha parameter + drawtype = "liquid", + paramtype = "light", + tiles = { + "testnodes_alpha.png", + }, + alpha = alpha, + + + liquidtype = "source", + liquid_range = 0, + liquid_viscosity = 0, + liquid_alternative_source = "testnodes:alpha_"..alpha, + liquid_alternative_flowing = "testnodes:alpha_"..alpha, + groups = { dig_immediate = 3 }, + }) +end diff -Nru minetest-5.2.0/games/devtest/mods/testpathfinder/init.lua minetest-5.3.0/games/devtest/mods/testpathfinder/init.lua --- minetest-5.2.0/games/devtest/mods/testpathfinder/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testpathfinder/init.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,132 @@ +local S = minetest.get_translator("testpathfinder") + +-- Config parameters + +-- Maximum direct distance between start and end +local MAX_DIRECT_DISTANCE = 64 +-- Maximum search distance +local MAX_SEARCH_DISTANCE = 32 +-- Maximum permitted jump height +local MAX_JUMP = 1 +-- Maximum permitted drop height +local MAX_DROP = 5 +-- If true, mod won't refuse to run pathfinder even at long distances +local IGNORE_MAX_DISTANCE_SAFEGUARD = false + +-- End of config parameters + +local timer = 0 +local algorithms = { + "A*_noprefetch", + "A*", + "Dijkstra", +} + +local function find_path_for_player(player, itemstack) + local meta = itemstack:get_meta() + if not meta then + return + end + local x = meta:get_int("pos_x") + local y = meta:get_int("pos_y") + local z = meta:get_int("pos_z") + local algo = meta:get_int("algorithm") + if x and y and z then + local pos2 = {x=x, y=y, z=z} + algo = algorithms[algo+1] + local pos1 = vector.round(player:get_pos()) + -- Don't bother calling pathfinder for high distance to avoid freezing + if (not IGNORE_MAX_DISTANCE_SAFEGUARD) and (vector.distance(pos1, pos2) > MAX_DIRECT_DISTANCE) then + minetest.chat_send_player(player:get_player_name(), S("Destination too far away! Set a destination (via placing) within a distance of @1 and try again!", MAX_DIRECT_DISTANCE)) + return + end + local str = S("Path from @1 to @2:", + minetest.pos_to_string(pos1), + minetest.pos_to_string(pos2)) + + minetest.chat_send_player(player:get_player_name(), str) + local time_start = minetest.get_us_time() + local path = minetest.find_path(pos1, pos2, MAX_SEARCH_DISTANCE, MAX_JUMP, MAX_DROP, algo) + local time_end = minetest.get_us_time() + local time_diff = time_end - time_start + str = "" + if not path then + minetest.chat_send_player(player:get_player_name(), S("No path!")) + minetest.chat_send_player(player:get_player_name(), S("Time: @1 ms", time_diff/1000)) + return + end + for s=1, #path do + str = str .. minetest.pos_to_string(path[s]) .. "\n" + local t + if s == #path then + t = "testpathfinder_waypoint_end.png" + elseif s == 1 then + t = "testpathfinder_waypoint_start.png" + else + local c = math.floor(((#path-s)/#path)*255) + t = string.format("testpathfinder_waypoint.png^[multiply:#%02x%02x00", 0xFF-c, c) + end + minetest.add_particle({ + pos = path[s], + expirationtime = 5 + 0.2 * s, + playername = player:get_player_name(), + glow = minetest.LIGHT_MAX, + texture = t, + size = 3, + }) + end + minetest.chat_send_player(player:get_player_name(), str) + minetest.chat_send_player(player:get_player_name(), S("Path length: @1", #path)) + minetest.chat_send_player(player:get_player_name(), S("Time: @1 ms", time_diff/1000)) + end +end + +local function set_destination(itemstack, user, pointed_thing) + if not (user and user:is_player()) then + return + end + local name = user:get_player_name() + local obj + local meta = itemstack:get_meta() + if pointed_thing.type == "node" then + local pos = pointed_thing.above + meta:set_int("pos_x", pos.x) + meta:set_int("pos_y", pos.y) + meta:set_int("pos_z", pos.z) + minetest.chat_send_player(user:get_player_name(), S("Destination set to @1", minetest.pos_to_string(pos))) + return itemstack + end +end + +local function find_path_or_set_algorithm(itemstack, user, pointed_thing) + if not (user and user:is_player()) then + return + end + local ctrl = user:get_player_control() + -- No sneak: Find path + if not ctrl.sneak then + find_path_for_player(user, itemstack) + else + -- Sneak: Set algorithm + local meta = itemstack:get_meta() + local algo = meta:get_int("algorithm") + algo = (algo + 1) % #algorithms + meta:set_int("algorithm", algo) + minetest.chat_send_player(user:get_player_name(), S("Algorithm: @1", algorithms[algo+1])) + return itemstack + end +end + +-- Punch: Find path +-- Sneak+punch: Select pathfinding algorithm +-- Place: Select destination node +minetest.register_tool("testpathfinder:testpathfinder", { + description = S("Pathfinder Tester"), + inventory_image = "testpathfinder_testpathfinder.png", + groups = { testtool = 1, disable_repair = 1 }, + on_use = find_path_or_set_algorithm, + on_secondary_use = set_destination, + on_place = set_destination, +}) + + diff -Nru minetest-5.2.0/games/devtest/mods/testpathfinder/mod.conf minetest-5.3.0/games/devtest/mods/testpathfinder/mod.conf --- minetest-5.2.0/games/devtest/mods/testpathfinder/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testpathfinder/mod.conf 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,2 @@ +name = testpathfinder +description = Tool to test Minetest's pathfinder function diff -Nru minetest-5.2.0/games/devtest/mods/testpathfinder/README.md minetest-5.3.0/games/devtest/mods/testpathfinder/README.md --- minetest-5.2.0/games/devtest/mods/testpathfinder/README.md 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testpathfinder/README.md 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,15 @@ +# Pathfinder Tester + +Usage: + +Use the Pathfinder Tester tool (`testpathfinder:testpathfinder`). +Here's how it works: + +* Place on node: Set destination position +* Punch: Find path +* Sneak+punch: Select pathfinding algorithm + +Information will be shown in chat. If a path was found, all waypoints +will be shown for a few seconds. + +See `init.lua` for config variables. Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testpathfinder/textures/testpathfinder_testpathfinder.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testpathfinder/textures/testpathfinder_testpathfinder.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_end.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_end.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_start.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_start.png differ diff -Nru minetest-5.2.0/games/devtest/mods/testtools/init.lua minetest-5.3.0/games/devtest/mods/testtools/init.lua --- minetest-5.2.0/games/devtest/mods/testtools/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testtools/init.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,692 @@ +local S = minetest.get_translator("testtools") +local F = minetest.formspec_escape + +-- TODO: Add a Node Metadata tool + +-- Param 2 Tool: Set param2 value of tools +-- Punch: +1 +-- Punch+Shift: +8 +-- Place: -1 +-- Place+Shift: -8 +minetest.register_tool("testtools:param2tool", { + description = S("Param2 Tool"), + inventory_image = "testtools_param2tool.png", + groups = { testtool = 1, disable_repair = 1 }, + on_use = function(itemstack, user, pointed_thing) + local pos = minetest.get_pointed_thing_position(pointed_thing) + if pointed_thing.type ~= "node" or (not pos) then + return + end + local add = 1 + if user then + local ctrl = user:get_player_control() + if ctrl.sneak then + add = 8 + end + end + local node = minetest.get_node(pos) + node.param2 = node.param2 + add + minetest.swap_node(pos, node) + end, + on_place = function(itemstack, user, pointed_thing) + local pos = minetest.get_pointed_thing_position(pointed_thing) + if pointed_thing.type ~= "node" or (not pos) then + return + end + local add = -1 + if user then + local ctrl = user:get_player_control() + if ctrl.sneak then + add = -8 + end + end + local node = minetest.get_node(pos) + node.param2 = node.param2 + add + minetest.swap_node(pos, node) + end, +}) + +minetest.register_tool("testtools:node_setter", { + description = S("Node Setter"), + inventory_image = "testtools_node_setter.png", + groups = { testtool = 1, disable_repair = 1 }, + on_use = function(itemstack, user, pointed_thing) + local pos = minetest.get_pointed_thing_position(pointed_thing) + if pointed_thing.type == "nothing" then + local meta = itemstack:get_meta() + meta:set_string("node", "air") + meta:set_int("node_param2", 0) + if user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), S("Now placing: @1 (param2=@2)", "air", 0)) + end + return itemstack + elseif pointed_thing.type ~= "node" or (not pos) then + return + end + local node = minetest.get_node(pos) + local meta = itemstack:get_meta() + meta:set_string("node", node.name) + meta:set_int("node_param2", node.param2) + if user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), S("Now placing: @1 (param2=@2)", node.name, node.param2)) + end + return itemstack + end, + on_secondary_use = function(itemstack, user, pointed_thing) + local meta = itemstack:get_meta() + local nodename = meta:get_string("node") or "" + local param2 = meta:get_int("node_param2") or 0 + + minetest.show_formspec(user:get_player_name(), "testtools:node_setter", + "size[4,4]".. + "field[0.5,1;3,1;nodename;"..F(S("Node name (itemstring):"))..";"..F(nodename).."]".. + "field[0.5,2;3,1;param2;"..F(S("param2:"))..";"..F(tostring(param2)).."]".. + "button_exit[0.5,3;3,1;submit;"..F(S("Submit")).."]" + ) + end, + on_place = function(itemstack, user, pointed_thing) + local pos = minetest.get_pointed_thing_position(pointed_thing) + local meta = itemstack:get_meta() + local nodename = meta:get_string("node") + if nodename == "" and user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), S("Punch a node first!")) + return + end + local param2 = meta:get_int("node_param2") + if not param2 then + param2 = 0 + end + local node = { name = nodename, param2 = param2 } + if not minetest.registered_nodes[nodename] then + minetest.chat_send_player(user:get_player_name(), S("Cannot set unknown node: @1", nodename)) + return + end + minetest.set_node(pos, node) + end, +}) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname == "testtools:node_setter" then + local playername = player:get_player_name() + local witem = player:get_wielded_item() + if witem:get_name() == "testtools:node_setter" then + if fields.nodename and fields.param2 then + local param2 = tonumber(fields.param2) + if not param2 then + return + end + local meta = witem:get_meta() + meta:set_string("node", fields.nodename) + meta:set_int("node_param2", param2) + player:set_wielded_item(witem) + end + end + end +end) + +minetest.register_tool("testtools:remover", { + description = S("Remover"), + inventory_image = "testtools_remover.png", + groups = { testtool = 1, disable_repair = 1 }, + on_use = function(itemstack, user, pointed_thing) + local pos = minetest.get_pointed_thing_position(pointed_thing) + if pointed_thing.type == "node" and pos ~= nil then + minetest.remove_node(pos) + elseif pointed_thing.type == "object" then + local obj = pointed_thing.ref + if not obj:is_player() then + obj:remove() + end + end + end, +}) + +minetest.register_tool("testtools:falling_node_tool", { + description = S("Falling Node Tool"), + inventory_image = "testtools_falling_node_tool.png", + groups = { testtool = 1, disable_repair = 1 }, + on_place = function(itemstack, user, pointed_thing) + -- Teleport node 1-2 units upwards (if possible) and make it fall + local pos = minetest.get_pointed_thing_position(pointed_thing) + if pointed_thing.type ~= "node" or (not pos) then + return + end + local ok = false + local highest + for i=1,2 do + local above = {x=pos.x,y=pos.y+i,z=pos.z} + local n2 = minetest.get_node(above) + local def2 = minetest.registered_nodes[n2.name] + if def2 and (not def2.walkable) then + highest = above + else + break + end + end + if highest then + local node = minetest.get_node(pos) + local metatable = minetest.get_meta(pos):to_table() + minetest.remove_node(pos) + minetest.set_node(highest, node) + local meta_highest = minetest.get_meta(highest) + meta_highest:from_table(metatable) + ok = minetest.spawn_falling_node(highest) + else + ok = minetest.spawn_falling_node(pos) + end + if not ok and user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), S("Falling node could not be spawned!")) + end + end, + on_use = function(itemstack, user, pointed_thing) + local pos = minetest.get_pointed_thing_position(pointed_thing) + if pointed_thing.type ~= "node" or (not pos) then + return + end + local ok = minetest.spawn_falling_node(pos) + if not ok and user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), S("Falling node could not be spawned!")) + end + end, +}) + +minetest.register_tool("testtools:rotator", { + description = S("Entity Rotator"), + inventory_image = "testtools_entity_rotator.png", + groups = { testtool = 1, disable_repair = 1 }, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "object" then + return + end + local obj = pointed_thing.ref + if obj:is_player() then + -- No player rotation + return + else + local axis = "y" + if user and user:is_player() then + local ctrl = user:get_player_control() + if ctrl.sneak then + axis = "x" + elseif ctrl.aux1 then + axis = "z" + end + end + local rot = obj:get_rotation() + rot[axis] = rot[axis] + math.pi/8 + if rot[axis] > math.pi*2 then + rot[axis] = rot[axis] - math.pi*2 + end + obj:set_rotation(rot) + end + end, +}) + +local mover_config = function(itemstack, user, pointed_thing) + if not (user and user:is_player()) then + return + end + local name = user:get_player_name() + local ctrl = user:get_player_control() + local meta = itemstack:get_meta() + local dist = 1.0 + if meta:contains("distance") then + dist = meta:get_int("distance") + end + if ctrl.sneak then + dist = dist - 1 + else + dist = dist + 1 + end + meta:set_int("distance", dist) + minetest.chat_send_player(user:get_player_name(), S("distance=@1/10", dist*2)) + return itemstack +end + +minetest.register_tool("testtools:object_mover", { + description = S("Object Mover"), + inventory_image = "testtools_object_mover.png", + groups = { testtool = 1, disable_repair = 1 }, + on_place = mover_config, + on_secondary_use = mover_config, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "object" then + return + end + local obj = pointed_thing.ref + if not (user and user:is_player()) then + return + end + local yaw = user:get_look_horizontal() + local dir = minetest.yaw_to_dir(yaw) + local pos = obj:get_pos() + local pitch = user:get_look_vertical() + if pitch > 0.25 * math.pi then + dir.y = -1 + dir.x = 0 + dir.z = 0 + elseif pitch < -0.25 * math.pi then + dir.y = 1 + dir.x = 0 + dir.z = 0 + end + local ctrl = user:get_player_control() + if ctrl.sneak then + dir = vector.multiply(dir, -1) + end + local meta = itemstack:get_meta() + if meta:contains("distance") then + local dist = meta:get_int("distance") + dir = vector.multiply(dir, dist*0.2) + end + pos = vector.add(pos, dir) + obj:set_pos(pos) + end, +}) + + + +minetest.register_tool("testtools:entity_scaler", { + description = S("Entity Visual Scaler"), + inventory_image = "testtools_entity_scaler.png", + groups = { testtool = 1, disable_repair = 1 }, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "object" then + return + end + local obj = pointed_thing.ref + if obj:is_player() then + -- No player scaling + return + else + local diff = 0.1 + if user and user:is_player() then + local ctrl = user:get_player_control() + if ctrl.sneak then + diff = -0.1 + end + end + local prop = obj:get_properties() + if not prop.visual_size then + prop.visual_size = { x=1, y=1, z=1 } + else + prop.visual_size = { x=prop.visual_size.x+diff, y=prop.visual_size.y+diff, z=prop.visual_size.z+diff } + if prop.visual_size.x <= 0.1 then + prop.visual_size.x = 0.1 + end + if prop.visual_size.y <= 0.1 then + prop.visual_size.y = 0.1 + end + if prop.visual_size.z <= 0.1 then + prop.visual_size.z = 0.1 + end + end + obj:set_properties(prop) + end + end, +}) + +local selections = {} +local entity_list +local function get_entity_list() + if entity_list then + return entity_list + end + local ents = minetest.registered_entities + local list = {} + for k,_ in pairs(ents) do + table.insert(list, k) + end + table.sort(list) + entity_list = list + return entity_list +end +minetest.register_tool("testtools:entity_spawner", { + description = S("Entity Spawner"), + inventory_image = "testtools_entity_spawner.png", + groups = { testtool = 1, disable_repair = 1 }, + on_place = function(itemstack, user, pointed_thing) + local name = user:get_player_name() + if selections[name] and pointed_thing.type == "node" then + local pos = pointed_thing.above + minetest.add_entity(pos, get_entity_list()[selections[name]]) + end + end, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type == "object" then + return + end + if user and user:is_player() then + local list = table.concat(get_entity_list(), ",") + local name = user:get_player_name() + local sel = selections[name] or "" + minetest.show_formspec(name, "testtools:entity_list", + "size[9,9]".. + "textlist[0,0;9,8;entity_list;"..list..";"..sel..";false]".. + "button[0,8;4,1;spawn;Spawn entity]" + ) + end + end, +}) + +local function prop_to_string(property) + if type(property) == "string" then + return "\"" .. property .. "\"" + elseif type(property) == "table" then + return tostring(dump(property)):gsub("\n", "") + else + return tostring(property) + end +end + +local property_formspec_data = {} +local property_formspec_index = {} +local selected_objects = {} +local function get_object_properties_form(obj, playername) + if not playername then return "" end + local props = obj:get_properties() + local str = "" + property_formspec_data[playername] = {} + local proplist = {} + for k,_ in pairs(props) do + table.insert(proplist, k) + end + table.sort(proplist) + for p=1, #proplist do + local k = proplist[p] + local v = props[k] + local newline = "" + newline = k .. " = " + newline = newline .. prop_to_string(v) + str = str .. F(newline) + if p < #proplist then + str = str .. "," + end + table.insert(property_formspec_data[playername], k) + end + return str +end + +local editor_formspec_selindex = {} + +local editor_formspec = function(playername, obj, value, sel) + if not value then + value = "" + end + if not sel then + sel = "" + end + local list = get_object_properties_form(obj, playername) + local title + if obj:is_player() then + title = S("Object properties of player “@1”", obj:get_player_name()) + else + local ent = obj:get_luaentity() + title = S("Object properties of @1", ent.name) + end + minetest.show_formspec(playername, "testtools:object_editor", + "size[9,9]".. + "label[0,0;"..F(title).."]".. + "textlist[0,0.5;9,7.5;object_props;"..list..";"..sel..";false]".. + "field[0.2,8.75;8,1;value;"..F(S("Value"))..";"..F(value).."]".. + "field_close_on_enter[value;false]".. + "button[8,8.5;1,1;submit;"..F(S("Submit")).."]" + ) +end + +minetest.register_tool("testtools:object_editor", { + description = S("Object Property Editor"), + inventory_image = "testtools_object_editor.png", + groups = { testtool = 1, disable_repair = 1 }, + on_use = function(itemstack, user, pointed_thing) + if user and user:is_player() then + local name = user:get_player_name() + + if pointed_thing.type == "object" then + selected_objects[name] = pointed_thing.ref + elseif pointed_thing.type == "nothing" then + -- Use on yourself if pointing nothing + selected_objects[name] = user + else + -- Unsupported pointed thing + return + end + + local sel = editor_formspec_selindex[name] + local val + if selected_objects[name] and selected_objects[name]:get_properties() then + local props = selected_objects[name]:get_properties() + local keys = property_formspec_data[name] + if property_formspec_index[name] and props then + local key = keys[property_formspec_index[name]] + val = prop_to_string(props[key]) + end + end + + editor_formspec(name, selected_objects[name], val, sel) + end + end, +}) + +local ent_parent = {} +local ent_child = {} +local DEFAULT_ATTACH_OFFSET_Y = 11 + +local attacher_config = function(itemstack, user, pointed_thing) + if not (user and user:is_player()) then + return + end + if pointed_thing.type == "object" then + return + end + local name = user:get_player_name() + local ctrl = user:get_player_control() + local meta = itemstack:get_meta() + if ctrl.aux1 then + local rot_x = meta:get_float("rot_x") + if ctrl.sneak then + rot_x = rot_x - math.pi/8 + else + rot_x = rot_x + math.pi/8 + end + if rot_x > 6.2 then + rot_x = 0 + elseif rot_x < 0 then + rot_x = math.pi * (15/8) + end + minetest.chat_send_player(name, S("rotation=@1", minetest.pos_to_string({x=rot_x,y=0,z=0}))) + meta:set_float("rot_x", rot_x) + else + local pos_y + if meta:contains("pos_y") then + pos_y = meta:get_int("pos_y") + else + pos_y = DEFAULT_ATTACH_OFFSET_Y + end + if ctrl.sneak then + pos_y = pos_y - 1 + else + pos_y = pos_y + 1 + end + minetest.chat_send_player(name, S("position=@1", minetest.pos_to_string({x=0,y=pos_y,z=0}))) + meta:set_int("pos_y", pos_y) + end + return itemstack +end + +minetest.register_tool("testtools:object_attacher", { + description = S("Object Attacher"), + inventory_image = "testtools_object_attacher.png", + groups = { testtool = 1, disable_repair = 1 }, + on_place = attacher_config, + on_secondary_use = attacher_config, + on_use = function(itemstack, user, pointed_thing) + if user and user:is_player() then + local name = user:get_player_name() + local selected_object + if pointed_thing.type == "object" then + selected_object = pointed_thing.ref + elseif pointed_thing.type == "nothing" then + selected_object = user + else + return + end + local ctrl = user:get_player_control() + if ctrl.sneak then + if selected_object:get_attach() then + selected_object:set_detach() + minetest.chat_send_player(name, S("Object detached!")) + else + minetest.chat_send_player(name, S("Object is not attached!")) + end + return + end + local parent = ent_parent[name] + local child = ent_child[name] + local ename = S("") + if not parent then + parent = selected_object + ent_parent[name] = parent + elseif not child then + child = selected_object + ent_child[name] = child + end + local entity = selected_object:get_luaentity() + if entity then + ename = entity.name + elseif selected_object:is_player() then + ename = selected_object:get_player_name() + end + if selected_object == parent then + minetest.chat_send_player(name, S("Parent object selected: @1", ename)) + elseif selected_object == child then + minetest.chat_send_player(name, S("Child object selected: @1", ename)) + end + if parent and child then + if parent == child then + minetest.chat_send_player(name, S("Can't attach an object to itself!")) + ent_parent[name] = nil + ent_child[name] = nil + return + end + local meta = itemstack:get_meta() + local y + if meta:contains("pos_y") then + y = meta:get_int("pos_y") + else + y = DEFAULT_ATTACH_OFFSET_Y + end + local rx = meta:get_float("rot_x") or 0 + local offset = {x=0,y=y,z=0} + local angle = {x=rx,y=0,z=0} + child:set_attach(parent, "", offset, angle) + local check_parent = child:get_attach() + if check_parent then + minetest.chat_send_player(name, S("Object attached! position=@1, rotation=@2", + minetest.pos_to_string(offset), minetest.pos_to_string(angle))) + else + minetest.chat_send_player(name, S("Attachment failed!")) + end + ent_parent[name] = nil + ent_child[name] = nil + end + end + end, +}) + +-- Use loadstring to parse param as a Lua value +local function use_loadstring(param, player) + -- For security reasons, require 'server' priv, just in case + -- someone is actually crazy enough to run this on a public server. + local privs = minetest.get_player_privs(player:get_player_name()) + if not privs.server then + return false, "You need 'server' privilege to change object properties!" + end + if not param then + return false, "Failed: parameter is nil" + end + --[[ DANGER ZONE ]] + -- Interpret string as Lua value + local func, errormsg = loadstring("return (" .. param .. ")") + if not func then + return false, "Failed: " .. errormsg + end + + -- Apply sandbox here using setfenv + setfenv(func, {}) + + -- Run it + local good, errOrResult = pcall(func) + if not good then + -- A Lua error was thrown + return false, "Failed: " .. errOrResult + end + + -- errOrResult will be the value + return true, errOrResult +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if not (player and player:is_player()) then + return + end + if formname == "testtools:entity_list" then + local name = player:get_player_name() + if fields.entity_list then + local expl = minetest.explode_textlist_event(fields.entity_list) + if expl.type == "DCL" then + local pos = vector.add(player:get_pos(), {x=0,y=1,z=0}) + selections[name] = expl.index + minetest.add_entity(pos, get_entity_list()[expl.index]) + return + elseif expl.type == "CHG" then + selections[name] = expl.index + return + end + elseif fields.spawn and selections[name] then + local pos = vector.add(player:get_pos(), {x=0,y=1,z=0}) + minetest.add_entity(pos, get_entity_list()[selections[name]]) + return + end + elseif formname == "testtools:object_editor" then + local name = player:get_player_name() + if fields.object_props then + local expl = minetest.explode_textlist_event(fields.object_props) + if expl.type == "DCL" or expl.type == "CHG" then + property_formspec_index[name] = expl.index + + local props = selected_objects[name]:get_properties() + local keys = property_formspec_data[name] + if (not property_formspec_index[name]) or (not props) then + return + end + local key = keys[property_formspec_index[name]] + editor_formspec_selindex[name] = expl.index + editor_formspec(name, selected_objects[name], prop_to_string(props[key]), expl.index) + return + end + end + if fields.key_enter_field == "value" or fields.submit then + local props = selected_objects[name]:get_properties() + local keys = property_formspec_data[name] + if (not property_formspec_index[name]) or (not props) then + return + end + local key = keys[property_formspec_index[name]] + if not key then + return + end + local success, str = use_loadstring(fields.value, player) + if success then + props[key] = str + else + minetest.chat_send_player(name, str) + return + end + selected_objects[name]:set_properties(props) + local sel = editor_formspec_selindex[name] + editor_formspec(name, selected_objects[name], prop_to_string(props[key]), sel) + return + end + end +end) diff -Nru minetest-5.2.0/games/devtest/mods/testtools/mod.conf minetest-5.3.0/games/devtest/mods/testtools/mod.conf --- minetest-5.2.0/games/devtest/mods/testtools/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testtools/mod.conf 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,2 @@ +name = testtools +description = Some tools to directly manipulate nodes and entities. Great for development and testing diff -Nru minetest-5.2.0/games/devtest/mods/testtools/README.md minetest-5.3.0/games/devtest/mods/testtools/README.md --- minetest-5.2.0/games/devtest/mods/testtools/README.md 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/testtools/README.md 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,99 @@ +# Test Tools readme + +Test Tools is a mod for developers that adds a bunch of tools to directly manipulate nodes and entities. This is great for quickly testing out stuff. + +Here's the list of tools: + +## Remover +Removes nodes and non-player entities that you punch. + +## Node Setter +Replace a node with another one. + +First, punch a node you want to remember. +Then rightclick any other node to replace it with the node you remembered. + +If you rightclick while pointing nothing, you can manually enter the node and param2. + +## Param2 Tool +Change the value param2 of nodes. + +* Punch: Add 1 to param2 +* Sneak+Punch: Add 8 to param2 +* Place: Subtract 1 from param2 +* Sneak+Place: Subtract 8 from param2 + +Note: Use the debug screen (F5) to see the param2 of the pointed node. + +## Falling Node Tool +Turns nodes into falling nodes. + +Usage: + +* Punch node: Make it fall +* Place: Try to teleport up to 2 units upwards, then make it fall + +## Entity Rotator +Changes the entity rotation (with `set_rotation`). + +Usage: + +* Punch entity: Rotate yaw +* Punch entity while holding down “Sneak” key: Rotate pitch +* Punch entity while holding down “Special” key (aka “Aux”): Rotate roll + +Each usage rotates the entity by 22.5°. + +## Entity Spawner +Spawns entities. + +Usage: + +* Punch to select entity or spawn one directly +* Place to place selected entity + +## Object Property Editor +Edits properties of objects. + +Usage: + +* Punch object to open a formspec that allows you to view and edit properties +* Punch air to edit properties of your own player object + +To edit a property, select it in the list, enter a new value (in Lua syntax) +and hit “Submit”. + +## Object Attacher +Allows you to attach an object to another one. + +Basic usage: +* First select the parent object, then the child object that should be attached +* Selecting an object is done by punching it +* Sneak+punch to detach selected object +* If you punch air, you select yourself + +Configuration: +* Place: Increase attachment Y position +* Sneak+place: decrease attachment Y position +* Aux+place: Increase attachment X rotation +* Aux+Sneak+Rightclick: Decrease attachment X rotation + +Hint: To detach all objects nearby you (including on yourself), use the +`/detach` server command. + +## Object Mover +Move an object by a given distance. + +Usage: +* Punch object into the direction you want to move it +* Sneak+punch: Move object towards you +* Place: Increase move distance +* Sneak+place: Decrease move distance + +## Entity Visual Scaler +Change visual size of entities + +Usage: + +* Punch entity to increase visual size +* Sneak+punch entity to decrease visual size Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testtools/textures/testtools_entity_rotator.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testtools/textures/testtools_entity_rotator.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testtools/textures/testtools_entity_scaler.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testtools/textures/testtools_entity_scaler.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testtools/textures/testtools_entity_spawner.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testtools/textures/testtools_entity_spawner.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testtools/textures/testtools_falling_node_tool.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testtools/textures/testtools_falling_node_tool.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testtools/textures/testtools_node_setter.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testtools/textures/testtools_node_setter.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testtools/textures/testtools_object_attacher.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testtools/textures/testtools_object_attacher.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testtools/textures/testtools_object_editor.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testtools/textures/testtools_object_editor.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testtools/textures/testtools_object_mover.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testtools/textures/testtools_object_mover.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testtools/textures/testtools_param2tool.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testtools/textures/testtools_param2tool.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/testtools/textures/testtools_remover.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/testtools/textures/testtools_remover.png differ diff -Nru minetest-5.2.0/games/devtest/mods/tiled/init.lua minetest-5.3.0/games/devtest/mods/tiled/init.lua --- minetest-5.2.0/games/devtest/mods/tiled/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/tiled/init.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,33 @@ +minetest.register_node("tiled:tiled", { + description = "Tiled Node (world-aligned)", + tiles = {{ + name = "tiled_tiled.png", + align_style = "world", + scale = 8, + }}, + groups = {cracky=3}, +}) + +minetest.register_node("tiled:tiled_n", { + description = "Tiled Node (node-aligned)", + tiles = {{ + name = "tiled_tiled.png", + align_style = "node", + scale = 8, + }}, + groups = {cracky=3}, +}) + +stairs.register_stair_and_slab("tiled_n", "tiled:tiled", + {cracky=3}, + {{name="tiled_tiled.png", align_style="node", scale=8}}, + "Tiled Stair (node-aligned)", + "Tiled Slab (node-aligned)") + +stairs.register_stair_and_slab("tiled", "tiled:tiled", + {cracky=3}, + {{name="tiled_tiled.png", align_style="world", scale=8}}, + "Tiled Stair (world-aligned)", + "Tiled Slab (world-aligned)") + + diff -Nru minetest-5.2.0/games/devtest/mods/tiled/mod.conf minetest-5.3.0/games/devtest/mods/tiled/mod.conf --- minetest-5.2.0/games/devtest/mods/tiled/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/tiled/mod.conf 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,3 @@ +name = tiled +description = Add nodes with a special texture that spans multiple nodes (aka "world-aligned") +depends = stairs Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/tiled/textures/tiled_tiled.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/tiled/textures/tiled_tiled.png differ diff -Nru minetest-5.2.0/games/devtest/mods/unittests/crafting.lua minetest-5.3.0/games/devtest/mods/unittests/crafting.lua --- minetest-5.2.0/games/devtest/mods/unittests/crafting.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/unittests/crafting.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,120 @@ +-- Test minetest.clear_craft function +local function test_clear_craft() + minetest.log("info", "[unittests] Testing minetest.clear_craft") + -- Clearing by output + minetest.register_craft({ + output = "foo", + recipe = {{"bar"}} + }) + minetest.register_craft({ + output = "foo 4", + recipe = {{"foo", "bar"}} + }) + assert(#minetest.get_all_craft_recipes("foo") == 2) + minetest.clear_craft({output="foo"}) + assert(minetest.get_all_craft_recipes("foo") == nil) + -- Clearing by input + minetest.register_craft({ + output = "foo 4", + recipe = {{"foo", "bar"}} + }) + assert(#minetest.get_all_craft_recipes("foo") == 1) + minetest.clear_craft({recipe={{"foo", "bar"}}}) + assert(minetest.get_all_craft_recipes("foo") == nil) +end + +-- Test minetest.get_craft_result function +local function test_get_craft_result() + minetest.log("info", "[unittests] Testing minetest.get_craft_result") + + -- normal + local input = { + method = "normal", + width = 2, + items = {"", "unittests:coal_lump", "", "unittests:stick"} + } + minetest.log("info", "[unittests] torch crafting input: "..dump(input)) + local output, decremented_input = minetest.get_craft_result(input) + minetest.log("info", "[unittests] torch crafting output: "..dump(output)) + minetest.log("info", "[unittests] torch crafting decremented input: "..dump(decremented_input)) + assert(output.item) + minetest.log("info", "[unittests] torch crafting output.item:to_table(): "..dump(output.item:to_table())) + assert(output.item:get_name() == "unittests:torch") + assert(output.item:get_count() == 4) + + -- fuel + input = { + method = "fuel", + width = 1, + items = {"unittests:coal_lump"} + } + minetest.log("info", "[unittests] coal fuel input: "..dump(input)) + output, decremented_input = minetest.get_craft_result(input) + minetest.log("info", "[unittests] coal fuel output: "..dump(output)) + minetest.log("info", "[unittests] coal fuel decremented input: "..dump(decremented_input)) + assert(output.time) + assert(output.time > 0) + + -- cooking + input = { + method = "cooking", + width = 1, + items = {"unittests:iron_lump"} + } + minetest.log("info", "[unittests] iron lump cooking input: "..dump(output)) + output, decremented_input = minetest.get_craft_result(input) + minetest.log("info", "[unittests] iron lump cooking output: "..dump(output)) + minetest.log("info", "[unittests] iron lump cooking decremented input: "..dump(decremented_input)) + assert(output.time) + assert(output.time > 0) + assert(output.item) + minetest.log("info", "[unittests] iron lump cooking output.item:to_table(): "..dump(output.item:to_table())) + assert(output.item:get_name() == "unittests:steel_ingot") + assert(output.item:get_count() == 1) + + -- tool repair (repairable) + input = { + method = "normal", + width = 2, + -- Using a wear of 60000 + items = {"unittests:repairable_tool 1 60000", "unittests:repairable_tool 1 60000"} + } + minetest.log("info", "[unittests] repairable tool crafting input: "..dump(input)) + output, decremented_input = minetest.get_craft_result(input) + minetest.log("info", "[unittests] repairable tool crafting output: "..dump(output)) + minetest.log("info", "[unittests] repairable tool crafting decremented input: "..dump(decremented_input)) + assert(output.item) + minetest.log("info", "[unittests] repairable tool crafting output.item:to_table(): "..dump(output.item:to_table())) + assert(output.item:get_name() == "unittests:repairable_tool") + -- Test the wear value. + -- See src/craftdef.cpp in Minetest source code for the formula. The formula to calculate + -- the value 51187 is: + -- 65536 - ((65536-60000)+(65536-60000)) + floor(additonal_wear * 65536 + 0.5) = 51187 + -- where additional_wear = 0.05 + assert(output.item:get_wear() == 51187) + assert(output.item:get_count() == 1) + + -- failing tool repair (unrepairable) + input = { + method = "normal", + width = 2, + items = {"unittests:unrepairable_tool 1 60000", "unittests:unrepairable_tool 1 60000"} + } + minetest.log("info", "[unittests] unrepairable tool crafting input: "..dump(input)) + output, decremented_input = minetest.get_craft_result(input) + minetest.log("info", "[unittests] unrepairable tool crafting output: "..dump(output)) + minetest.log("info", "[unittests] unrepairable tool crafting decremented input: "..dump(decremented_input)) + assert(output.item) + minetest.log("info", "[unittests] unrepairable tool crafting output.item:to_table(): "..dump(output.item:to_table())) + -- unrepairable tool must not yield any output + assert(output.item:get_name() == "") + +end + +function unittests.test_crafting() + test_clear_craft() + test_get_craft_result() + minetest.log("action", "[unittests] Crafting tests passed!") + return true +end + diff -Nru minetest-5.2.0/games/devtest/mods/unittests/crafting_prepare.lua minetest-5.3.0/games/devtest/mods/unittests/crafting_prepare.lua --- minetest-5.2.0/games/devtest/mods/unittests/crafting_prepare.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/unittests/crafting_prepare.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,88 @@ +-- Registering some dummy items and recipes for the crafting tests + +minetest.register_craftitem("unittests:torch", { + description = "Crafting Test Item: Torch", + inventory_image = "unittests_torch.png", + + groups = { dummy = 1 }, +}) +minetest.register_craftitem("unittests:coal_lump", { + description = "Crafting Test Item: Coal Lump", + inventory_image = "unittests_coal_lump.png", + + groups = { dummy = 1 }, +}) +minetest.register_craftitem("unittests:stick", { + description = "Crafting Test Item: Stick", + inventory_image = "unittests_stick.png", + + groups = { dummy = 1 }, +}) +minetest.register_craftitem("unittests:iron_lump", { + description = "Crafting Test Item: Iron Lump", + inventory_image = "unittests_iron_lump.png", + + groups = { dummy = 1 }, +}) +minetest.register_craftitem("unittests:steel_ingot", { + description = "Crafting Test Item: Steel Ingot", + inventory_image = "unittests_steel_ingot.png", + + groups = { dummy = 1 }, +}) + +-- Recipes for tests: Normal crafting, cooking and fuel + +minetest.register_craft({ + output = 'unittests:torch 4', + recipe = { + {'unittests:coal_lump'}, + {'unittests:stick'}, + } +}) + +minetest.register_craft({ + type = "cooking", + output = "unittests:steel_ingot", + recipe = "unittests:iron_lump", +}) + +minetest.register_craft({ + type = "fuel", + recipe = "unittests:coal_lump", + burntime = 40, +}) + +-- Test tool repair +minetest.register_craft({ + type = "toolrepair", + additional_wear = -0.05, +}) + +-- Test the disable_repair=1 group +minetest.register_tool("unittests:unrepairable_tool", { + description = "Crafting Test Item: Unrepairable Tool", + inventory_image = "unittests_unrepairable_tool.png", + tool_capabilities = { + groupcaps = { + cracky = { + times = {3, 2, 1}, + } + } + }, + groups = { disable_repair = 1, dummy = 1 } +}) + +minetest.register_tool("unittests:repairable_tool", { + description = "Crafting Test Item: Repairable Tool", + inventory_image = "unittests_repairable_tool.png", + tool_capabilities = { + groupcaps = { + cracky = { + times = {3, 2, 1}, + } + } + }, + + groups = { dummy = 1 }, +}) diff -Nru minetest-5.2.0/games/devtest/mods/unittests/init.lua minetest-5.3.0/games/devtest/mods/unittests/init.lua --- minetest-5.2.0/games/devtest/mods/unittests/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/unittests/init.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,16 @@ +unittests = {} + +local modpath = minetest.get_modpath("unittests") +dofile(modpath .. "/random.lua") +dofile(modpath .. "/player.lua") +dofile(modpath .. "/crafting_prepare.lua") +dofile(modpath .. "/crafting.lua") + +if minetest.settings:get_bool("devtest_unittests_autostart", false) then + unittests.test_random() + unittests.test_crafting() + minetest.register_on_joinplayer(function(player) + unittests.test_player(player) + end) +end + diff -Nru minetest-5.2.0/games/devtest/mods/unittests/mod.conf minetest-5.3.0/games/devtest/mods/unittests/mod.conf --- minetest-5.2.0/games/devtest/mods/unittests/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/unittests/mod.conf 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,2 @@ +name = unittests +description = Adds automated unit tests for the engine diff -Nru minetest-5.2.0/games/devtest/mods/unittests/player.lua minetest-5.3.0/games/devtest/mods/unittests/player.lua --- minetest-5.2.0/games/devtest/mods/unittests/player.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/unittests/player.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,76 @@ +-- +-- HP Change Reasons +-- +local expect = nil +local function run_hpchangereason_tests(player) + local old_hp = player:get_hp() + + player:set_hp(20) + expect = { type = "set_hp", from = "mod" } + player:set_hp(3) + assert(expect == nil) + + expect = { a = 234, type = "set_hp", from = "mod" } + player:set_hp(7, { a= 234 }) + assert(expect == nil) + + expect = { df = 3458973454, type = "fall", from = "mod" } + player:set_hp(10, { type = "fall", df = 3458973454 }) + assert(expect == nil) + + player:set_hp(old_hp) +end + +local function run_player_meta_tests(player) + local meta = player:get_meta() + meta:set_string("foo", "bar") + assert(meta:contains("foo")) + assert(meta:get_string("foo") == "bar") + assert(meta:get("foo") == "bar") + + local meta2 = player:get_meta() + assert(meta2:get_string("foo") == "bar") + assert(meta2:get("foo") == "bar") + assert(meta:equals(meta2)) + + meta:set_string("bob", "dillan") + assert(meta:get_string("foo") == "bar") + assert(meta:get_string("bob") == "dillan") + assert(meta:get("bob") == "dillan") + assert(meta2:get_string("foo") == "bar") + assert(meta2:get_string("bob") == "dillan") + assert(meta2:get("bob") == "dillan") + assert(meta:equals(meta2)) + + meta:set_string("foo", "") + assert(not meta:contains("foo")) + assert(meta:get("foo") == nil) + assert(meta:get_string("foo") == "") + assert(meta:equals(meta2)) +end + +function unittests.test_player(player) + minetest.register_on_player_hpchange(function(player, hp, reason) + if not expect then + return + end + + for key, value in pairs(reason) do + assert(expect[key] == value) + end + + for key, value in pairs(expect) do + assert(reason[key] == value) + end + + expect = nil + end) + + run_hpchangereason_tests(player) + run_player_meta_tests(player) + local msg = "Player tests passed for player '"..player:get_player_name().."'!" + minetest.chat_send_all(msg) + minetest.log("action", "[unittests] "..msg) + return true +end + diff -Nru minetest-5.2.0/games/devtest/mods/unittests/random.lua minetest-5.3.0/games/devtest/mods/unittests/random.lua --- minetest-5.2.0/games/devtest/mods/unittests/random.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/unittests/random.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,10 @@ +function unittests.test_random() + -- Try out PseudoRandom + minetest.log("action", "[unittests] Testing PseudoRandom ...") + local pseudo = PseudoRandom(13) + assert(pseudo:next() == 22290) + assert(pseudo:next() == 13854) + minetest.log("action", "[unittests] PseudoRandom test passed!") + return true +end + Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/unittests/textures/unittests_coal_lump.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/unittests/textures/unittests_coal_lump.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/unittests/textures/unittests_iron_lump.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/unittests/textures/unittests_iron_lump.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/unittests/textures/unittests_repairable_tool.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/unittests/textures/unittests_repairable_tool.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/unittests/textures/unittests_steel_ingot.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/unittests/textures/unittests_steel_ingot.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/unittests/textures/unittests_stick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/unittests/textures/unittests_stick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/unittests/textures/unittests_torch.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/unittests/textures/unittests_torch.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/mods/unittests/textures/unittests_unrepairable_tool.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/mods/unittests/textures/unittests_unrepairable_tool.png differ diff -Nru minetest-5.2.0/games/devtest/mods/util_commands/init.lua minetest-5.3.0/games/devtest/mods/util_commands/init.lua --- minetest-5.2.0/games/devtest/mods/util_commands/init.lua 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/util_commands/init.lua 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,137 @@ +minetest.register_chatcommand("hotbar", { + params = "", + description = "Set hotbar size", + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player then + return false, "No player." + end + local size = tonumber(param) + if not size then + return false, "Missing or incorrect size parameter!" + end + local ok = player:hud_set_hotbar_itemcount(size) + if ok then + return true + else + return false, "Invalid item count!" + end + end, +}) + +minetest.register_chatcommand("hp", { + params = "", + description = "Set your health", + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player then + return false, "No player." + end + local hp = tonumber(param) + if not hp then + return false, "Missing or incorrect hp parameter!" + end + player:set_hp(hp) + return true + end, +}) + +minetest.register_chatcommand("zoom", { + params = "[]", + description = "Set or display your zoom_fov", + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player then + return false, "No player." + end + if param == "" then + local fov = player:get_properties().zoom_fov + return true, "zoom_fov = "..tostring(fov) + end + local fov = tonumber(param) + if not fov then + return false, "Missing or incorrect zoom_fov parameter!" + end + player:set_properties({zoom_fov = fov}) + fov = player:get_properties().zoom_fov + return true, "zoom_fov = "..tostring(fov) + end, +}) + + + +local s_infplace = minetest.settings:get("devtest_infplace") +if s_infplace == "true" then + infplace = true +elseif s_infplace == "false" then + infplace = false +else + infplace = minetest.is_creative_enabled("") +end + +minetest.register_chatcommand("infplace", { + params = "", + description = "Toggle infinite node placement", + func = function(name, param) + infplace = not infplace + if infplace then + minetest.chat_send_all("Infinite node placement enabled!") + minetest.log("action", "Infinite node placement enabled") + else + minetest.chat_send_all("Infinite node placement disabled!") + minetest.log("action", "Infinite node placement disabled") + end + return true + end, +}) + +minetest.register_chatcommand("detach", { + params = "[]", + description = "Detach all objects nearby", + func = function(name, param) + local radius = tonumber(param) + if type(radius) ~= "number" then + radius = 8 + end + if radius < 1 then + radius = 1 + end + local player = minetest.get_player_by_name(name) + if not player then + return false, "No player." + end + local objs = minetest.get_objects_inside_radius(player:get_pos(), radius) + local num = 0 + for o=1, #objs do + if objs[o]:get_attach() then + objs[o]:set_detach() + num = num + 1 + end + end + return true, string.format("%d object(s) detached.", num) + end, +}) + + +-- Unlimited node placement +minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) + if placer and placer:is_player() then + return infplace + end +end) + +-- Don't pick up if the item is already in the inventory +local old_handle_node_drops = minetest.handle_node_drops +function minetest.handle_node_drops(pos, drops, digger) + if not digger or not digger:is_player() or not infplace then + return old_handle_node_drops(pos, drops, digger) + end + local inv = digger:get_inventory() + if inv then + for _, item in ipairs(drops) do + if not inv:contains_item("main", item, true) then + inv:add_item("main", item) + end + end + end +end diff -Nru minetest-5.2.0/games/devtest/mods/util_commands/mod.conf minetest-5.3.0/games/devtest/mods/util_commands/mod.conf --- minetest-5.2.0/games/devtest/mods/util_commands/mod.conf 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/mods/util_commands/mod.conf 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,2 @@ +name = util_commands +description = Random server commands to make testing easier and more convenient diff -Nru minetest-5.2.0/games/devtest/README.md minetest-5.3.0/games/devtest/README.md --- minetest-5.2.0/games/devtest/README.md 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/README.md 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,52 @@ +# Development Test (devtest) + +This is a basic testing environment that contains a bunch of things to test the engine, but it could also be used as a minimal testbed for testing out mods. + +## Features + +* Basic nodes for mapgen +* Basic, minimal map generator +* Lots of example nodes for testing drawtypes, param2, light level, and many other node properties +* Example entities +* Other example items +* Formspec test (via `/test_formspec` command) +* Automated unit tests (disabled by default) +* Tools for manipulating nodes and entities, like the "Param2 Tool" + +## Getting started + +Basically, just create a world and start. A few important things to note: + +* Items are gotten from the “Chest of Everything” (`chest_of_everything:chest`) +* When you lost your initial items, type in `/stuff` command to get them back +* By default, Creative Mode activates infinite node placement. This behavior can be changed with the `devtest_infplace` setting +* Use the `/infplace` command to toggle infinite node placement in-game +* Use the Param2 Tool to change the param2 of nodes; it's useful to experiment with the various drawtype test nodes +* Check out the game settings and server commands for additional tests and features +* Creative Mode does nothing (apart from default engine behavior) + +Confused by a certain node or item? Check out for inline code comments. + +### Example tests + +* You can use this to test what happens if a player is simultaneously in 2 nodes with `damage_per_second` but with a different value. +* Or use the Falling Node Tool on various test nodes to see how they behave when falling. +* You could also use this as a testbed for dependency-free mods, e.g. to test out how your formspecs behave without theming. + +## Random notes + +* Experimental/strange/unstructured tests can be found in the `experimental` mod +* Textures of drawtype test nodes have a red dot at the top left corner. This is to see whether the textures are oriented properly + +## Design philosophy + +This should loosely follow the following principles: + +* Engine testing: The main focus of this is to aid testing of *engine* features, such as mapgen or node drawtypes +* Mod testing: The secondary focus is to help modders as well, either as a minimal testbed for mods or even as a code example +* Minimal interference: Under default settings, it shall not interfere with APIs except on explicit user wish. Non-trivial tests and features need to be enabled by a setting first +* Convenience: Have various tools to make usage easier and more convenient +* Reproducing engine bugs: When an engine bug was found, consider creating a test case +* Clarity: Textures and names need to be designed to keep different things clearly visually apart at a glance +* Low loading time: It must load blazing-fast so stuff can be tested quickly + Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/devtest/screenshot.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/devtest/screenshot.png differ diff -Nru minetest-5.2.0/games/devtest/settingtypes.txt minetest-5.3.0/games/devtest/settingtypes.txt --- minetest-5.2.0/games/devtest/settingtypes.txt 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/devtest/settingtypes.txt 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,37 @@ +# If enabled, nodes won't be used up when placed. +# Note: This behavior can also be toggled in-game with the /infplace command. +# +# - true: enabled +# - false: disabled +# - auto: only enabled when Creative Mode is enabled (default) +devtest_infplace (Infinite node placement) enum auto true,false,auto + +# If enabled, new players receive some initial items when joining for the first time. +give_initial_stuff (Give initial stuff) bool true + +# If enabled, automated tests of the Lua API such as player health, crafting and PseudoRandom will be performed on startup. +devtest_unittests_autostart (Perform unit tests) bool false + +# If enabled, the game will use all mapgen aliases for the v6 mapgen. +# If disabled, it will only use a minimal set of mapgen aliases. +# If enabled, there should be biome-specific tree, leaves and ground nodes. If disabled, stuff should use fallback nodes (like stone instead of desert stone). +# +# Many mapgen aliases have fallback values when no value is provided. Having this setting disabled can be useful to test whether those fallback values are functional. +devtest_v6_mapgen_aliases (Use all v6 mapgen aliases) bool false + +# If enabled, the game will use dungeon stairs by enabling the corresponding mapgen aliases. +# +# Disabling this setting can be useful to test whether dungeons still work when stairs are not defined. +devtest_dungeon_stairs (Generate dungeon stairs) bool false + +# If enabled, the mapgen alias 'mapgen_mossycobble' will be used. This should enable random mossy cobblestone in dungeons. +# If disabled, it won't be used. The engine should fall back to cobble instead. +devtest_dungeon_mossycobble (Generate mossy cobblestone) bool false + +# If enabled, some very basic biomes will be registered. +devtest_register_biomes (Register biomes) bool true + +# If set to true, will show an inventory image for nodes that have no inventory image as of Minetest 5.1.0. +# This is due to . +# This is only added to make the items more visible to avoid confusion, but you will no longer see the default inventory images for these items. When you want to test the default inventory image of drawtypes, this should be turned off. +testnodes_show_fallback_image (Use fallback inventory images) bool false diff -Nru minetest-5.2.0/games/minetest_game/game_api.txt minetest-5.3.0/games/minetest_game/game_api.txt --- minetest-5.2.0/games/minetest_game/game_api.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/game_api.txt 2020-07-09 21:13:28.000000000 +0000 @@ -93,16 +93,21 @@ is used to show all tools. Name is used in the sfinv page name, title is the human readable title. -`is_enabled_for` is used to check whether a player is in creative mode: - - creative.is_enabled_for(name) - -Override this to allow per-player game modes. +Creative provides `creative.is_enabled_for(name)`, which is identical in +functionality to the engine's `minetest.creative_is_enabled(name)`. +Its use is deprecated and it should also not be overriden. The contents of `creative.formspec_add` is appended to every creative inventory page. Mods can use it to add additional formspec elements onto the default creative inventory formspec to be drawn after each update. +Group overrides can be used for any registered item, node or tool. Use one of +the groups stated below to pick which category it will appear in. + + node = 1 -- Appears in the Nodes category + tool = 1 -- Appears in the Tools category + craftitem = 1 -- Appears in the Items category + Chests API ---------- @@ -129,12 +134,12 @@ * A table indexed by player name to keep track of who opened what chest. * Key: The name of the player. * Value: A table containing information about the chest the player is looking at. - e.g `{ pos = {1, 1, 1}, sound = null, swap = "chest" }` + e.g `{ pos = {1, 1, 1}, sound = null, swap = "default:chest" }` `default.chest.register_chest(name, def)` * Registers new chest - * `name` Name for chest + * `name` Name for chest e.g. "default:chest" * `def` See [#Chest Definition] ### Chest Definition diff -Nru minetest-5.2.0/games/minetest_game/mods/beds/functions.lua minetest-5.3.0/games/minetest_game/mods/beds/functions.lua --- minetest-5.2.0/games/minetest_game/mods/beds/functions.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/beds/functions.lua 2020-07-09 21:13:28.000000000 +0000 @@ -74,10 +74,10 @@ -- physics, eye_offset, etc player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}) player:set_look_horizontal(math.random(1, 180) / 100) - default.player_attached[name] = false + player_api.player_attached[name] = false player:set_physics_override(1, 1, 1) hud_flags.wielditem = true - default.player_set_animation(player, "stand" , 30) + player_api.set_animation(player, "stand" , 30) -- lay down else @@ -99,9 +99,9 @@ } player:set_physics_override(0, 0, 0) player:set_pos(p) - default.player_attached[name] = true + player_api.player_attached[name] = true hud_flags.wielditem = false - default.player_set_animation(player, "lay" , 0) + player_api.set_animation(player, "lay" , 0) end player:hud_set_flags(hud_flags) diff -Nru minetest-5.2.0/games/minetest_game/mods/beds/locale/beds.id.tr minetest-5.3.0/games/minetest_game/mods/beds/locale/beds.id.tr --- minetest-5.2.0/games/minetest_game/mods/beds/locale/beds.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/beds/locale/beds.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,8 @@ +# textdomain: beds +Leave Bed=Tinggalkan Dipan +Good morning.=Selamat pagi. +@1 of @2 players are in bed=@1 dari @2 pemain sedang tidur +Force night skip=Paksa lewati malam +You can only sleep at night.=Anda hanya boleh tidur pada waktu malam. +Fancy Bed=Dipan Mewah +Simple Bed=Dipan Sederhana diff -Nru minetest-5.2.0/games/minetest_game/mods/beds/locale/template.txt minetest-5.3.0/games/minetest_game/mods/beds/locale/template.txt --- minetest-5.2.0/games/minetest_game/mods/beds/locale/template.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/beds/locale/template.txt 2020-07-09 21:13:28.000000000 +0000 @@ -1,8 +1,8 @@ # textdomain: beds -Fancy Bed= -Simple Bed= Leave Bed= Good morning.= @1 of @2 players are in bed= Force night skip= You can only sleep at night.= +Fancy Bed= +Simple Bed= diff -Nru minetest-5.2.0/games/minetest_game/mods/binoculars/locale/binoculars.id.tr minetest-5.3.0/games/minetest_game/mods/binoculars/locale/binoculars.id.tr --- minetest-5.2.0/games/minetest_game/mods/binoculars/locale/binoculars.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/binoculars/locale/binoculars.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Binokular +Use with 'Zoom' key=Pakai dengan tombol 'Zum' diff -Nru minetest-5.2.0/games/minetest_game/mods/boats/locale/boats.id.tr minetest-5.3.0/games/minetest_game/mods/boats/locale/boats.id.tr --- minetest-5.2.0/games/minetest_game/mods/boats/locale/boats.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/boats/locale/boats.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Mode perahu jelajah nyala +Boat cruise mode off=Mode perahu jelajah mati +Boat=Perahu diff -Nru minetest-5.2.0/games/minetest_game/mods/bones/locale/bones.id.tr minetest-5.3.0/games/minetest_game/mods/bones/locale/bones.id.tr --- minetest-5.2.0/games/minetest_game/mods/bones/locale/bones.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/bones/locale/bones.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Tulang +@1's old bones=Tulang lama @1 +@1 died at @2.=@1 mati di @2. +@1 died at @2, and dropped their inventory.=@1 mati di @2 dan meninggalkan barangnya. +@1 died at @2, and bones were placed.=@1 mati di @2 dan tulangnya diletakkan. +@1's fresh bones=Tulang segar @1 +@1's bones=Tulang @1 diff -Nru minetest-5.2.0/games/minetest_game/mods/bucket/locale/bucket.id.tr minetest-5.3.0/games/minetest_game/mods/bucket/locale/bucket.id.tr --- minetest-5.2.0/games/minetest_game/mods/bucket/locale/bucket.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/bucket/locale/bucket.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Ember Kosong +Water Bucket=Ember Air +River Water Bucket=Ember Air Sungai +Lava Bucket=Ember Lava diff -Nru minetest-5.2.0/games/minetest_game/mods/butterflies/locale/butterflies.id.tr minetest-5.3.0/games/minetest_game/mods/butterflies/locale/butterflies.id.tr --- minetest-5.2.0/games/minetest_game/mods/butterflies/locale/butterflies.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/butterflies/locale/butterflies.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Kupu-Kupu Putih +Red Butterfly=Kupu-Kupu Merah +Violet Butterfly=Kupu-Kupu Ungu diff -Nru minetest-5.2.0/games/minetest_game/mods/carts/cart_entity.lua minetest-5.3.0/games/minetest_game/mods/carts/cart_entity.lua --- minetest-5.2.0/games/minetest_game/mods/carts/cart_entity.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/carts/cart_entity.lua 2020-07-09 21:13:28.000000000 +0000 @@ -67,6 +67,7 @@ function cart_entity:on_detach_child(child) if child and child:get_player_name() == self.driver then self.driver = nil + carts:manage_attachment(child, nil) end end @@ -327,11 +328,10 @@ if self.punched then -- Collect dropped items for _, obj_ in pairs(minetest.get_objects_inside_radius(pos, 1)) do - if not obj_:is_player() and - obj_:get_luaentity() and - not obj_:get_luaentity().physical_state and - obj_:get_luaentity().name == "__builtin:item" then - + local ent = obj_:get_luaentity() + -- Careful here: physical_state and disable_physics are item-internal APIs + if ent and ent.name == "__builtin:item" and ent.physical_state then + ent:disable_physics() obj_:set_attach(self.object, "", {x=0, y=0, z=0}, {x=0, y=0, z=0}) self.attached_items[#self.attached_items + 1] = obj_ end @@ -389,7 +389,7 @@ minetest.register_craftitem("carts:cart", { description = S("Cart") .. "\n" .. S("(Sneak+Click to pick up)"), - inventory_image = minetest.inventorycube("carts_cart_top.png", "carts_cart_side.png", "carts_cart_side.png"), + inventory_image = minetest.inventorycube("carts_cart_top.png", "carts_cart_front.png", "carts_cart_side.png"), wield_image = "carts_cart_side.png", on_place = function(itemstack, placer, pointed_thing) local under = pointed_thing.under diff -Nru minetest-5.2.0/games/minetest_game/mods/carts/locale/carts.id.tr minetest-5.3.0/games/minetest_game/mods/carts/locale/carts.id.tr --- minetest-5.2.0/games/minetest_game/mods/carts/locale/carts.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/carts/locale/carts.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,6 @@ +# textdomain: carts +Rail=Rel +Powered Rail=Rel Bertenaga +Brake Rail=Rel Rem +Cart=Kereta +(Sneak+Click to pick up)=(selinap + klik untuk ambil) diff -Nru minetest-5.2.0/games/minetest_game/mods/carts/locale/template.txt minetest-5.3.0/games/minetest_game/mods/carts/locale/template.txt --- minetest-5.2.0/games/minetest_game/mods/carts/locale/template.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/carts/locale/template.txt 2020-07-09 21:13:28.000000000 +0000 @@ -1,6 +1,6 @@ # textdomain: carts -Cart= -(Sneak+Click to pick up)= Rail= Powered Rail= Brake Rail= +Cart= +(Sneak+Click to pick up)= Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/carts/textures/carts_rail_crossing_brk.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/carts/textures/carts_rail_crossing_brk.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/carts/textures/carts_rail_curved_brk.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/carts/textures/carts_rail_curved_brk.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/carts/textures/carts_rail_straight_brk.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/carts/textures/carts_rail_straight_brk.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/carts/textures/carts_rail_t_junction_brk.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/carts/textures/carts_rail_t_junction_brk.png differ diff -Nru minetest-5.2.0/games/minetest_game/mods/creative/init.lua minetest-5.3.0/games/minetest_game/mods/creative/init.lua --- minetest-5.2.0/games/minetest_game/mods/creative/init.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/creative/init.lua 2020-07-09 21:13:28.000000000 +0000 @@ -27,16 +27,25 @@ on_revoke = update_sfinv, }) -local creative_mode_cache = minetest.settings:get_bool("creative_mode") +-- Override the engine's creative mode function +local old_is_creative_enabled = minetest.is_creative_enabled +function minetest.is_creative_enabled(name) + if name == "" then + return old_is_creative_enabled(name) + end + return minetest.check_player_privs(name, {creative = true}) or + old_is_creative_enabled(name) +end + +-- For backwards compatibility: function creative.is_enabled_for(name) - return creative_mode_cache or - minetest.check_player_privs(name, {creative = true}) + return minetest.is_creative_enabled(name) end dofile(minetest.get_modpath("creative") .. "/inventory.lua") -if creative_mode_cache then +if minetest.is_creative_enabled("") then -- Dig time is modified according to difference (leveldiff) between tool -- 'maxlevel' and node 'level'. Digtime is divided by the larger of -- leveldiff and 1. diff -Nru minetest-5.2.0/games/minetest_game/mods/creative/inventory.lua minetest-5.3.0/games/minetest_game/mods/creative/inventory.lua --- minetest-5.2.0/games/minetest_game/mods/creative/inventory.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/creative/inventory.lua 2020-07-09 21:13:28.000000000 +0000 @@ -61,6 +61,7 @@ return player_inventory[player_name] end +local NO_MATCH = 999 local function match(s, filter) if filter == "" then return 0 @@ -68,7 +69,15 @@ if s:lower():find(filter, 1, true) then return #s - #filter end - return nil + return NO_MATCH +end + +local function description(def, lang_code) + local s = def.description + if lang_code then + s = minetest.get_translated_string(lang_code, s) + end + return s:gsub("\n.*", "") -- First line only end function creative.update_creative_inventory(player_name, tab_content) @@ -84,13 +93,26 @@ local items = inventory_cache[tab_content] or init_creative_cache(tab_content) + local lang + local player_info = minetest.get_player_information(player_name) + if player_info and player_info.lang_code ~= "" then + lang = player_info.lang_code + end + local creative_list = {} local order = {} for name, def in pairs(items) do - local m = match(def.description, inv.filter) or match(def.name, inv.filter) - if m then + local m = match(description(def), inv.filter) + if m > 0 then + m = math.min(m, match(description(def, lang), inv.filter)) + end + if m > 0 then + m = math.min(m, match(name, inv.filter)) + end + + if m < NO_MATCH then creative_list[#creative_list+1] = name - -- Sort by description length first so closer matches appear earlier + -- Sort by match value first so closer matches appear earlier order[name] = string.format("%02d", m) .. name end end @@ -199,10 +221,30 @@ }) end +-- Sort registered items +local registered_nodes = {} +local registered_tools = {} +local registered_craftitems = {} + +minetest.register_on_mods_loaded(function() + for name, def in pairs(minetest.registered_items) do + local group = def.groups or {} + + local nogroup = not (group.node or group.tool or group.craftitem) + if group.node or (nogroup and minetest.registered_nodes[name]) then + registered_nodes[name] = def + elseif group.tool or (nogroup and minetest.registered_tools[name]) then + registered_tools[name] = def + elseif group.craftitem or (nogroup and minetest.registered_craftitems[name]) then + registered_craftitems[name] = def + end + end +end) + creative.register_tab("all", S("All"), minetest.registered_items) -creative.register_tab("nodes", S("Nodes"), minetest.registered_nodes) -creative.register_tab("tools", S("Tools"), minetest.registered_tools) -creative.register_tab("craftitems", S("Items"), minetest.registered_craftitems) +creative.register_tab("nodes", S("Nodes"), registered_nodes) +creative.register_tab("tools", S("Tools"), registered_tools) +creative.register_tab("craftitems", S("Items"), registered_craftitems) local old_homepage_name = sfinv.get_homepage_name function sfinv.get_homepage_name(player) diff -Nru minetest-5.2.0/games/minetest_game/mods/creative/locale/creative.id.tr minetest-5.3.0/games/minetest_game/mods/creative/locale/creative.id.tr --- minetest-5.2.0/games/minetest_game/mods/creative/locale/creative.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/creative/locale/creative.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,10 @@ +# textdomain: creative +Search=Cari +Reset=Atur ulang +Previous page=Halaman sebelumnya +Next page=Halaman selanjutnya +All=Semua +Nodes=Nodus +Tools=Perkakas +Items=Barang +Allow player to use creative inventory=Bolehkan pemain memakai inventaris kreatif diff -Nru minetest-5.2.0/games/minetest_game/mods/creative/locale/template.txt minetest-5.3.0/games/minetest_game/mods/creative/locale/template.txt --- minetest-5.2.0/games/minetest_game/mods/creative/locale/template.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/creative/locale/template.txt 2020-07-09 21:13:28.000000000 +0000 @@ -1,5 +1,4 @@ # textdomain: creative -Allow player to use creative inventory= Search= Reset= Previous page= @@ -8,3 +7,4 @@ Nodes= Tools= Items= +Allow player to use creative inventory= diff -Nru minetest-5.2.0/games/minetest_game/mods/default/chests.lua minetest-5.3.0/games/minetest_game/mods/default/chests.lua --- minetest-5.2.0/games/minetest_game/mods/default/chests.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/default/chests.lua 2020-07-09 21:13:28.000000000 +0000 @@ -44,7 +44,7 @@ end local node = minetest.get_node(pos) - minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap, + minetest.after(0.2, minetest.swap_node, pos, { name = swap, param2 = node.param2 }) minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10}, true) @@ -76,7 +76,8 @@ end end) -function default.chest.register_chest(name, d) +function default.chest.register_chest(prefixed_name, d) + local name = prefixed_name:sub(1,1) == ':' and prefixed_name:sub(2,-1) or prefixed_name local def = table.copy(d) def.drawtype = "mesh" def.visual = "mesh" @@ -132,7 +133,7 @@ pos = pos, max_hear_distance = 10}, true) if not default.chest.chest_lid_obstructed(pos) then minetest.swap_node(pos, - { name = "default:" .. name .. "_open", + { name = name .. "_open", param2 = node.param2 }) end minetest.after(0.2, minetest.show_formspec, @@ -203,7 +204,7 @@ max_hear_distance = 10}, true) if not default.chest.chest_lid_obstructed(pos) then minetest.swap_node(pos, { - name = "default:" .. name .. "_open", + name = name .. "_open", param2 = node.param2 }) end minetest.after(0.2, minetest.show_formspec, @@ -215,7 +216,7 @@ def.on_blast = function(pos) local drops = {} default.get_inventory_drops(pos, "main", drops) - drops[#drops+1] = "default:" .. name + drops[#drops+1] = name minetest.remove_node(pos) return drops end @@ -248,7 +249,7 @@ def_opened.tiles[i].backface_culling = true end end - def_opened.drop = "default:" .. name + def_opened.drop = name def_opened.groups.not_in_creative_inventory = 1 def_opened.selection_box = { type = "fixed", @@ -265,29 +266,31 @@ def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh def_closed.tiles[3] = def.tiles[3].."^[transformFX" - minetest.register_node("default:" .. name, def_closed) - minetest.register_node("default:" .. name .. "_open", def_opened) + minetest.register_node(prefixed_name, def_closed) + minetest.register_node(prefixed_name .. "_open", def_opened) -- convert old chests to this new variant - minetest.register_lbm({ - label = "update chests to opening chests", - name = "default:upgrade_" .. name .. "_v2", - nodenames = {"default:" .. name}, - action = function(pos, node) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", nil) - local inv = meta:get_inventory() - local list = inv:get_list("default:chest") - if list then - inv:set_size("main", 8*4) - inv:set_list("main", list) - inv:set_list("default:chest", nil) + if name == "default:chest" or name == "default:chest_locked" then + minetest.register_lbm({ + label = "update chests to opening chests", + name = "default:upgrade_" .. name:sub(9,-1) .. "_v2", + nodenames = {name}, + action = function(pos, node) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", nil) + local inv = meta:get_inventory() + local list = inv:get_list("default:chest") + if list then + inv:set_size("main", 8*4) + inv:set_list("main", list) + inv:set_list("default:chest", nil) + end end - end - }) + }) + end end -default.chest.register_chest("chest", { +default.chest.register_chest("default:chest", { description = S("Chest"), tiles = { "default_chest_top.png", @@ -303,7 +306,7 @@ groups = {choppy = 2, oddly_breakable_by_hand = 2}, }) -default.chest.register_chest("chest_locked", { +default.chest.register_chest("default:chest_locked", { description = S("Locked Chest"), tiles = { "default_chest_top.png", diff -Nru minetest-5.2.0/games/minetest_game/mods/default/functions.lua minetest-5.3.0/games/minetest_game/mods/default/functions.lua --- minetest-5.2.0/games/minetest_game/mods/default/functions.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/default/functions.lua 2020-07-09 21:13:28.000000000 +0000 @@ -210,7 +210,12 @@ function default.grow_papyrus(pos, node) pos.y = pos.y - 1 local name = minetest.get_node(pos).name - if name ~= "default:dirt_with_grass" and name ~= "default:dirt" then + if name ~= "default:dirt" and + name ~= "default:dirt_with_grass" and + name ~= "default:dirt_with_dry_grass" and + name ~= "default:dirt_with_rainforest_litter" and + name ~= "default:dry_dirt" and + name ~= "default:dry_dirt_with_dry_grass" then return end if not minetest.find_node_near(pos, 3, {"group:water"}) then @@ -247,7 +252,17 @@ minetest.register_abm({ label = "Grow papyrus", nodenames = {"default:papyrus"}, - neighbors = {"default:dirt", "default:dirt_with_grass"}, + -- Grows on the dirt and surface dirt nodes of the biomes papyrus appears in, + -- including the old savanna nodes. + -- 'default:dirt_with_grass' is here only because it was allowed before. + neighbors = { + "default:dirt", + "default:dirt_with_grass", + "default:dirt_with_dry_grass", + "default:dirt_with_rainforest_litter", + "default:dry_dirt", + "default:dry_dirt_with_dry_grass", + }, interval = 14, chance = 71, action = function(...) @@ -433,6 +448,9 @@ end end +local movement_gravity = tonumber( + minetest.settings:get("movement_gravity")) or 9.81 + local function leafdecay_on_timer(pos, def) if minetest.find_node_near(pos, def.radius, def.trunks) then return false @@ -459,6 +477,21 @@ minetest.remove_node(pos) minetest.check_for_falling(pos) + + -- spawn a few particles for the removed node + minetest.add_particlespawner({ + amount = 8, + time = 0.001, + minpos = vector.subtract(pos, {x=0.5, y=0.5, z=0.5}), + maxpos = vector.add(pos, {x=0.5, y=0.5, z=0.5}), + minvel = vector.new(-0.5, -1, -0.5), + maxvel = vector.new(0.5, 0, 0.5), + minacc = vector.new(0, -movement_gravity, 0), + maxacc = vector.new(0, -movement_gravity, 0), + minsize = 0, + maxsize = 0, + node = node, + }) end function default.register_leafdecay(def) @@ -483,7 +516,7 @@ -- --- Convert dirt to something that fits the environment +-- Convert default:dirt to something that fits the environment -- minetest.register_abm({ @@ -492,6 +525,7 @@ neighbors = { "air", "group:grass", + "group:dry_grass", "default:snow", }, interval = 6, @@ -520,6 +554,8 @@ minetest.set_node(pos, {name = "default:dirt_with_snow"}) elseif minetest.get_item_group(name, "grass") ~= 0 then minetest.set_node(pos, {name = "default:dirt_with_grass"}) + elseif minetest.get_item_group(name, "dry_grass") ~= 0 then + minetest.set_node(pos, {name = "default:dirt_with_dry_grass"}) end end }) diff -Nru minetest-5.2.0/games/minetest_game/mods/default/item_entity.lua minetest-5.3.0/games/minetest_game/mods/default/item_entity.lua --- minetest-5.2.0/games/minetest_game/mods/default/item_entity.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/default/item_entity.lua 2020-07-09 21:13:28.000000000 +0000 @@ -15,8 +15,8 @@ burn_up = function(self) -- disappear in a smoke puff - self.object:remove() local p = self.object:get_pos() + self.object:remove() minetest.sound_play("default_item_smoke", { pos = p, max_hear_distance = 8, @@ -39,16 +39,20 @@ }) end, - on_step = function(self, dtime) - builtin_item.on_step(self, dtime) + on_step = function(self, dtime, ...) + builtin_item.on_step(self, dtime, ...) if self.flammable then - -- flammable, check for igniters + -- flammable, check for igniters every 10 s self.ignite_timer = (self.ignite_timer or 0) + dtime if self.ignite_timer > 10 then self.ignite_timer = 0 - local node = minetest.get_node_or_nil(self.object:get_pos()) + local pos = self.object:get_pos() + if pos == nil then + return -- object already deleted + end + local node = minetest.get_node_or_nil(pos) if not node then return end diff -Nru minetest-5.2.0/games/minetest_game/mods/default/license.txt minetest-5.3.0/games/minetest_game/mods/default/license.txt --- minetest-5.2.0/games/minetest_game/mods/default/license.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/default/license.txt 2020-07-09 21:13:28.000000000 +0000 @@ -51,6 +51,7 @@ Mossmanikin random-geek Extex101 + An0n3m0us You are free to: Share — copy and redistribute the material in any medium or format. diff -Nru minetest-5.2.0/games/minetest_game/mods/default/locale/default.de.tr minetest-5.3.0/games/minetest_game/mods/default/locale/default.de.tr --- minetest-5.2.0/games/minetest_game/mods/default/locale/default.de.tr 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/default/locale/default.de.tr 2020-07-09 21:13:28.000000000 +0000 @@ -62,12 +62,12 @@ Dirt=Erde Dirt with Grass=Erde mit Gras Dirt with Grass and Footsteps=Erde mit Gras und Fußstapfen -Dirt with Dry Grass=Erde mit trockenem Gras +Dirt with Savanna Grass=Erde mit Savannengras Dirt with Snow=Erde mit Schnee Dirt with Rainforest Litter=Erde mit Regenwaldboden Dirt with Coniferous Litter=Erde mit Nadelwaldboden -Dry Dirt=Trockene Erde -Dry Dirt with Dry Grass=Trockene Erde mit trockenem Gras +Savanna Dirt=Savannenerde +Savanna Dirt with Savanna Grass=Savannenerde mit Savannengras Permafrost=Permafrost Permafrost with Stones=Permafrost mit Steinen Permafrost with Moss=Permafrost mit Moos @@ -124,7 +124,7 @@ Dry Shrub=Trockener Busch Jungle Grass=Dschungelgras Grass=Gras -Dry Grass=Trockenes Gras +Savanna Grass=Savannengras Fern=Farn Marram Grass=Dünengras Bush Stem=Buschstamm diff -Nru minetest-5.2.0/games/minetest_game/mods/default/locale/default.id.tr minetest-5.3.0/games/minetest_game/mods/default/locale/default.id.tr --- minetest-5.2.0/games/minetest_game/mods/default/locale/default.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/default/locale/default.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,211 @@ +# textdomain: default +Stone=Batu +Cobblestone=Bongkahan Batu +Stone Brick=Tembok Batu +Stone Block=Balok Batu +Mossy Cobblestone=Bongkahan Batu Berlumut +Desert Stone=Batu Gurun +Desert Cobblestone=Bongkahan Batu Gurun +Desert Stone Brick=Tembok Batu Gurun +Desert Stone Block=Balok Batu Gurun +Sandstone=Batu Pasir +Sandstone Brick=Tembok Batu Pasir +Sandstone Block=Balok Batu Pasir +Desert Sandstone=Batu Pasir Gurun +Desert Sandstone Brick=Tembok Batu Pasir Gurun +Desert Sandstone Block=Balok Batu Pasir Gurun +Silver Sandstone=Batu Pasir Perak +Silver Sandstone Brick=Tembok Batu Pasir Perak +Silver Sandstone Block=Balok Batu Pasir Perak +Obsidian=Obsidian +Obsidian Brick=Tembok Obsidian +Obsidian Block=Balok Obsidian +Dirt=Tanah +Dirt with Grass=Tanah Berumput +Dirt with Grass and Footsteps=Tanah Berumput dan Tapak Kaki +Dirt with Savanna Grass=Tanah Berumput Sabana +Dirt with Snow=Tanah Bersalju +Dirt with Rainforest Litter=Tanah Berserasah Hutan Hujan +Dirt with Coniferous Litter=Tanah Berserasah Hutan Konifer +Savanna Dirt=Tanah Sabana +Savanna Dirt with Savanna Grass=Tanah Sabana Berumput Sabana +Permafrost=Ibun Abadi +Permafrost with Stones=Ibun Abadi Berbatu +Permafrost with Moss=Ibun Abadi Berlumut +Sand=Pasir +Desert Sand=Pasir Gurun +Silver Sand=Pasir Perak +Gravel=Kerikil +Clay=Semen +Snow=Salju +Snow Block=Balok Salju +Ice=Es +Cave Ice=Es Gua +Apple Tree=Pohon Apel +Apple Wood Planks=Papan Kayu Pohon Apel +Apple Tree Sapling=Bibit Apel +Apple Tree Leaves=Daun Pohon Apel +Apple=Apel +Apple Marker=Penanda Apel +Jungle Tree=Pohon Hutan Rimba +Jungle Wood Planks=Papan Kayu Pohon Rimba +Jungle Tree Leaves=Daun Pohon Rimba +Jungle Tree Sapling=Bibit Pohon Rimba +Emergent Jungle Tree Sapling=Bibit Bertumbuh Pohon Rimba +Pine Tree=Pohon Pinus +Pine Wood Planks=Papan Kayu Pinus +Pine Needles=Daun Pinus +Pine Tree Sapling=Bibit Pinus +Acacia Tree=Pohon Akasia +Acacia Wood Planks=Papan Kayu Akasia +Acacia Tree Leaves=Daun Akasia +Acacia Tree Sapling=Bibit Akasia +Aspen Tree=Pohon Aspen +Aspen Wood Planks=Papan Kayu Aspen +Aspen Tree Leaves=Daun Aspen +Aspen Tree Sapling=Bibit Aspen +Coal Ore=Bijih Batu Bara +Coal Block=Balok Batu Bara +Iron Ore=Biji Besi +Steel Block=Balok Baja +Copper Ore=Bijih Tembaga +Copper Block=Balok Tembaga +Tin Ore=Bijih Timah +Tin Block=Balok Timah +Bronze Block=Balok Perunggu +Mese Ore=Bijih Mese +Mese Block=Balok Mese +Gold Ore=Bijih Emas +Gold Block=Balok Emas +Diamond Ore=Bijih Berlian +Diamond Block=Balok Berlian +Cactus=Kaktus +Large Cactus Seedling=Bibit Kaktus Besar +Papyrus=Papirus +Dry Shrub=Semak Kering +Jungle Grass=Rumput Rimba +Grass=Rumput +Savanna Grass=Rumput Sabana +Fern=Pakis +Marram Grass=Rumput Pantai +Bush Stem=Batang Semak +Bush Leaves=Daun Semak +Bush Sapling=Bibit Semak +Blueberry Bush Leaves with Berries=Daun Bluberi Berbuah +Blueberry Bush Leaves=Daun Bluberi +Blueberry Bush Sapling=Bibit Bluberi +Acacia Bush Stem=Batang Semak Akasia +Acacia Bush Leaves=Daun Semak Akasia +Acacia Bush Sapling=Bibit Semak Akasia +Pine Bush Stem=Batang Semak Pinus +Pine Bush Needles=Daun Semak Pinus +Pine Bush Sapling=Bibit Semak Pinus +Kelp=Kelp +Green Coral=Koral Hijau +Pink Coral=Koral Jambon +Cyan Coral=Koral Sian +Brown Coral=Koral Cokelat +Orange Coral=Koral Oranye +Coral Skeleton=Kerangka Koral +Water Source=Mata Air +Flowing Water=Aliran Air +River Water Source=Mata Air Sungai +Flowing River Water=Aliran Air Sungai +Lava Source=Sumber Lava +Flowing Lava=Aliran Lava +Empty Bookshelf=Rak Buku Kosong +Bookshelf (@1 written, @2 empty books)=Rak Buku (@1 buku tertulis, @2 buku kosong) +Bookshelf=Rak Buku +Text too long=Teks terlalu panjang +Wooden Sign=Penanda Kayu +Steel Sign=Penanda Baja +Wooden Ladder=Tangga Kayu +Steel Ladder=Tangga Baja +Apple Wood Fence=Pagar Kayu Apel +Acacia Wood Fence=Pagar Akasia +Jungle Wood Fence=Pagar Kayu Rimba +Pine Wood Fence=Pagar Pinus +Aspen Wood Fence=Pagar Aspen +Apple Wood Fence Rail=Rel Pagar Kayu Apel +Acacia Wood Fence Rail=Rel Pagar Akasia +Jungle Wood Fence Rail=Rel Pagar Kayu Rimba +Pine Wood Fence Rail=Rel Pagar Pinus +Aspen Wood Fence Rail=Rel Pagar Aspen +Glass=Kaca +Obsidian Glass=Kaca Obsidian +Brick Block=Balok Bata +Mese Lamp=Lampu Mese +Mese Post Light=Lampu Taman Mese +Cloud=Awan +@1 will intersect protection on growth.=@1 akan memotong perlindungan ketika tumbuh. +Torch=Obor +Wooden Pickaxe=Beliung Kayu +Stone Pickaxe=Beliung Batu +Bronze Pickaxe=Beliung Perunggu +Steel Pickaxe=Beliung Baja +Mese Pickaxe=Beliung Mese +Diamond Pickaxe=Beliung Berlian +Wooden Shovel=Sekop Kayu +Stone Shovel=Sekop Batu +Bronze Shovel=Sekop Perunggu +Steel Shovel=Sekop Baja +Mese Shovel=Sekop Mese +Diamond Shovel=Sekop Berlian +Wooden Axe=Kapak Kayu +Stone Axe=Kapak Batu +Bronze Axe=Kapak Perunggu +Steel Axe=Kapak Baja +Mese Axe=Kapak Mese +Diamond Axe=Kapak Berlian +Wooden Sword=Pedang Kayu +Stone Sword=Pedang Batu +Bronze Sword=Pedang Perunggu +Steel Sword=Pedang Baja +Mese Sword=Pedang Mese +Diamond Sword=Pedang Berlian +Key=Kunci +Furnace is empty=Tungku kosong +100% (output full)=100% (keluaran penuh) +@1%=@1% +Not cookable=Tidak bisa dimasak +Empty=Kosong +Furnace active=Tungku nyala +Furnace inactive=Tungku mati +(Item: @1; Fuel: @2)=(Barang: @1; Bahan Bakar: @2) +Furnace=Tungku +Title:=Judul: +Contents:=Isi: +Save=Simpan +by @1=oleh @1 +Page @1 of @2=Halaman @1 dari @2 +"@1"="@1" +"@1" by @2="@1" oleh @2 +Skeleton Key=Kunci Induk +Key to @1's @2=Kunci @2 milik @1 +Blueberries=Bluberi +Book=Buku +Book with Text=Buku Tertulis +Bronze Ingot=Perunggu Batangan +Clay Brick=Bata +Clay Lump=Bongkahan Semen +Coal Lump=Bongkahan Batu Bara +Copper Ingot=Tembaga Batangan +Copper Lump=Bongkahan Tembaga +Diamond=Berlian +Flint=Batu Api +Gold Ingot=Emas Batangan +Gold Lump=Bongkahan Emas +Iron Lump=Bongkahan Besi +Mese Crystal=Kristal Mese +Mese Crystal Fragment=Pecahan Kristal Mese +Obsidian Shard=Pecahan Obsidian +Paper=Kertas +Steel Ingot=Baja Batangan +Stick=Tongkat +Tin Ingot=Timah Batangan +Tin Lump=Bongkahan Timah +Locked Chest=Peti Terkunci +Locked Chest (owned by @1)=Peti Terkunci (milik @1) +You do not own this chest.=Anda bukan pemilik peti ini. +a locked chest=suatu peti terkunci +Chest=Peti diff -Nru minetest-5.2.0/games/minetest_game/mods/default/locale/template.txt minetest-5.3.0/games/minetest_game/mods/default/locale/template.txt --- minetest-5.2.0/games/minetest_game/mods/default/locale/template.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/default/locale/template.txt 2020-07-09 21:13:28.000000000 +0000 @@ -1,43 +1,4 @@ # textdomain: default -Locked Chest= -Locked Chest (owned by @1)= -You do not own this chest.= -a locked chest= -Chest= -Stick= -Paper= -"@1" by @2= -Book= -Book with Text= -Skeleton Key= -Key to @1's @2= -Coal Lump= -Iron Lump= -Copper Lump= -Tin Lump= -Mese Crystal= -Gold Lump= -Diamond= -Clay Lump= -Steel Ingot= -Copper Ingot= -Tin Ingot= -Bronze Ingot= -Gold Ingot= -Mese Crystal Fragment= -Clay Brick= -Obsidian Shard= -Flint= -Blueberries= -Furnace is empty= -100% (output full)= -@1%= -Empty= -Not cookable= -Furnace active= -Furnace inactive= -(Item: @1; Fuel: @2)= -Furnace= Stone= Cobblestone= Stone Brick= @@ -62,12 +23,12 @@ Dirt= Dirt with Grass= Dirt with Grass and Footsteps= -Dirt with Dry Grass= +Dirt with Savanna Grass= Dirt with Snow= Dirt with Rainforest Litter= Dirt with Coniferous Litter= -Dry Dirt= -Dry Dirt with Dry Grass= +Savanna Dirt= +Savanna Dirt with Savanna Grass= Permafrost= Permafrost with Stones= Permafrost with Moss= @@ -124,7 +85,7 @@ Dry Shrub= Jungle Grass= Grass= -Dry Grass= +Savanna Grass= Fern= Marram Grass= Bush Stem= @@ -176,6 +137,8 @@ Mese Lamp= Mese Post Light= Cloud= +@1 will intersect protection on growth.= +Torch= Wooden Pickaxe= Stone Pickaxe= Bronze Pickaxe= @@ -201,11 +164,48 @@ Mese Sword= Diamond Sword= Key= -Torch= -@1 will intersect protection on growth.= +Furnace is empty= +100% (output full)= +@1%= +Not cookable= +Empty= +Furnace active= +Furnace inactive= +(Item: @1; Fuel: @2)= +Furnace= Title:= Contents:= Save= by @1= Page @1 of @2= "@1"= +"@1" by @2= +Skeleton Key= +Key to @1's @2= +Blueberries= +Book= +Book with Text= +Bronze Ingot= +Clay Brick= +Clay Lump= +Coal Lump= +Copper Ingot= +Copper Lump= +Diamond= +Flint= +Gold Ingot= +Gold Lump= +Iron Lump= +Mese Crystal= +Mese Crystal Fragment= +Obsidian Shard= +Paper= +Steel Ingot= +Stick= +Tin Ingot= +Tin Lump= +Locked Chest= +Locked Chest (owned by @1)= +You do not own this chest.= +a locked chest= +Chest= diff -Nru minetest-5.2.0/games/minetest_game/mods/default/nodes.lua minetest-5.3.0/games/minetest_game/mods/default/nodes.lua --- minetest-5.2.0/games/minetest_game/mods/default/nodes.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/default/nodes.lua 2020-07-09 21:13:28.000000000 +0000 @@ -458,12 +458,12 @@ }) minetest.register_node("default:dirt_with_dry_grass", { - description = S("Dirt with Dry Grass"), + description = S("Dirt with Savanna Grass"), tiles = {"default_dry_grass.png", "default_dirt.png", {name = "default_dirt.png^default_dry_grass_side.png", tileable_vertical = false}}, - groups = {crumbly = 3, soil = 1}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, drop = "default:dirt", sounds = default.node_sound_dirt_defaults({ footstep = {name = "default_grass_footstep", gain = 0.4}, @@ -513,14 +513,14 @@ }) minetest.register_node("default:dry_dirt", { - description = S("Dry Dirt"), + description = S("Savanna Dirt"), tiles = {"default_dry_dirt.png"}, groups = {crumbly = 3, soil = 1}, sounds = default.node_sound_dirt_defaults(), }) minetest.register_node("default:dry_dirt_with_dry_grass", { - description = S("Dry Dirt with Dry Grass"), + description = S("Savanna Dirt with Savanna Grass"), tiles = {"default_dry_grass.png", "default_dry_dirt.png", {name = "default_dry_dirt.png^default_dry_grass_side.png", tileable_vertical = false}}, @@ -621,7 +621,7 @@ collision_box = { type = "fixed", fixed = { - {-0.5, -0.5, -0.5, 0.5, -7 / 16, 0.5}, + {-0.5, -0.5, -0.5, 0.5, -6 / 16, 0.5}, }, }, groups = {crumbly = 3, falling_node = 1, snowy = 1}, @@ -1497,7 +1497,7 @@ minetest.register_node("default:dry_grass_1", { - description = S("Dry Grass"), + description = S("Savanna Grass"), drawtype = "plantlike", waving = 1, tiles = {"default_dry_grass_1.png"}, @@ -1526,7 +1526,7 @@ for i = 2, 5 do minetest.register_node("default:dry_grass_" .. i, { - description = S("Dry Grass"), + description = S("Savanna Grass"), drawtype = "plantlike", waving = 1, tiles = {"default_dry_grass_" .. i .. ".png"}, @@ -2579,12 +2579,10 @@ sounds = def.sounds, on_construct = function(pos) - --local n = minetest.get_node(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", "field[text;;${text}]") end, on_receive_fields = function(pos, formname, fields, sender) - --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields)) local player_name = sender:get_player_name() if minetest.is_protected(pos, player_name) then minetest.record_protection_violation(pos, player_name) @@ -2598,8 +2596,8 @@ minetest.chat_send_player(player_name, S("Text too long")) return end - minetest.log("action", (player_name or "") .. " wrote \"" .. - text .. "\" to sign at " .. minetest.pos_to_string(pos)) + minetest.log("action", player_name .. " wrote \"" .. text .. + "\" to the sign at " .. minetest.pos_to_string(pos)) local meta = minetest.get_meta(pos) meta:set_string("text", text) @@ -2816,7 +2814,10 @@ description = S("Brick Block"), paramtype2 = "facedir", place_param2 = 0, - tiles = {"default_brick.png"}, + tiles = { + "default_brick.png^[transformFX", + "default_brick.png", + }, is_ground_content = false, groups = {cracky = 3}, sounds = default.node_sound_stone_defaults(), diff -Nru minetest-5.2.0/games/minetest_game/mods/default/README.txt minetest-5.3.0/games/minetest_game/mods/default/README.txt --- minetest-5.2.0/games/minetest_game/mods/default/README.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/default/README.txt 2020-07-09 21:13:28.000000000 +0000 @@ -151,7 +151,6 @@ default_chest_top.png default_mineral_mese.png default_meselamp.png - bubble.png gui_formbg.png gui_furnace_arrow_bg.png gui_furnace_arrow_fg.png @@ -196,9 +195,6 @@ asl97 (CC BY-SA 3.0): default_ice.png -KevDoy (CC BY-SA 3.0): - heart.png - Pithydon (CC BY-SA 3.0) default_coral_brown.png default_coral_orange.png @@ -253,6 +249,11 @@ Extex101 (CC BY-SA 3.0) default_large_cactus_seedling.png + default_dry_shrub.png -- Derived from the original texture by celeron55 + +An0n3m0us (CC BY-SA 3.0): + heart.png -- Derived from a texture by KevDoy (CC BY-SA 3.0) + bubble.png -- Derived from a texture by BlockMen (CC BY-SA 3.0) Sounds Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/default/textures/bubble.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/default/textures/bubble.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/default/textures/default_dry_shrub.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/default/textures/default_dry_shrub.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/default/textures/heart.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/default/textures/heart.png differ diff -Nru minetest-5.2.0/games/minetest_game/mods/default/trees.lua minetest-5.3.0/games/minetest_game/mods/default/trees.lua --- minetest-5.2.0/games/minetest_game/mods/default/trees.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/default/trees.lua 2020-07-09 21:13:28.000000000 +0000 @@ -16,9 +16,7 @@ if not node_under then return false end - local name_under = node_under.name - local is_soil = minetest.get_item_group(name_under, "soil") - if is_soil == 0 then + if minetest.get_item_group(node_under.name, "soil") == 0 then return false end local light_level = minetest.get_node_light(pos) diff -Nru minetest-5.2.0/games/minetest_game/mods/doors/init.lua minetest-5.3.0/games/minetest_game/mods/doors/init.lua --- minetest-5.2.0/games/minetest_game/mods/doors/init.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/doors/init.lua 2020-07-09 21:13:28.000000000 +0000 @@ -78,9 +78,7 @@ -- nodes from being placed in the top half of the door. minetest.register_node("doors:hidden", { description = S("Hidden Door Segment"), - -- can't use airlike otherwise falling nodes will turn to entities - -- and will be forever stuck until door is removed. - drawtype = "nodebox", + drawtype = "airlike", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -93,13 +91,7 @@ drop = "", groups = {not_in_creative_inventory = 1}, on_blast = function() end, - tiles = {"doors_blank.png"}, - -- 1px transparent block inside door hinge near node top. - node_box = { - type = "fixed", - fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32}, - }, - -- collision_box needed otherise selection box would be full node size + -- 1px block inside door hinge near node top collision_box = { type = "fixed", fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32}, @@ -115,10 +107,10 @@ {v = "_a", param2 = 2}, }, { - {v = "_b", param2 = 1}, - {v = "_b", param2 = 2}, - {v = "_b", param2 = 3}, - {v = "_b", param2 = 0}, + {v = "_c", param2 = 1}, + {v = "_c", param2 = 2}, + {v = "_c", param2 = 3}, + {v = "_c", param2 = 0}, }, { {v = "_b", param2 = 1}, @@ -127,10 +119,10 @@ {v = "_b", param2 = 0}, }, { - {v = "_a", param2 = 3}, - {v = "_a", param2 = 0}, - {v = "_a", param2 = 1}, - {v = "_a", param2 = 2}, + {v = "_d", param2 = 3}, + {v = "_d", param2 = 0}, + {v = "_d", param2 = 1}, + {v = "_d", param2 = 2}, }, } @@ -449,15 +441,23 @@ def.mesh = "door_b.obj" minetest.register_node(":" .. name .. "_b", def) + def.mesh = "door_a2.obj" + minetest.register_node(":" .. name .. "_c", def) + + def.mesh = "door_b2.obj" + minetest.register_node(":" .. name .. "_d", def) + doors.registered_doors[name .. "_a"] = true doors.registered_doors[name .. "_b"] = true + doors.registered_doors[name .. "_c"] = true + doors.registered_doors[name .. "_d"] = true end doors.register("door_wood", { tiles = {{ name = "doors_door_wood.png", backface_culling = true }}, description = S("Wooden Door"), inventory_image = "doors_item_wood.png", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + groups = {node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, recipe = { {"group:wood", "group:wood"}, {"group:wood", "group:wood"}, @@ -470,7 +470,7 @@ description = S("Steel Door"), inventory_image = "doors_item_steel.png", protected = true, - groups = {cracky = 1, level = 2}, + groups = {node = 1, cracky = 1, level = 2}, sounds = default.node_sound_metal_defaults(), sound_open = "doors_steel_door_open", sound_close = "doors_steel_door_close", @@ -485,7 +485,7 @@ tiles = {"doors_door_glass.png"}, description = S("Glass Door"), inventory_image = "doors_item_glass.png", - groups = {cracky=3, oddly_breakable_by_hand=3}, + groups = {node = 1, cracky=3, oddly_breakable_by_hand=3}, sounds = default.node_sound_glass_defaults(), sound_open = "doors_glass_door_open", sound_close = "doors_glass_door_close", @@ -500,7 +500,7 @@ tiles = {"doors_door_obsidian_glass.png"}, description = S("Obsidian Glass Door"), inventory_image = "doors_item_obsidian_glass.png", - groups = {cracky=3}, + groups = {node = 1, cracky=3}, sounds = default.node_sound_glass_defaults(), sound_open = "doors_glass_door_open", sound_close = "doors_glass_door_close", diff -Nru minetest-5.2.0/games/minetest_game/mods/doors/locale/doors.id.tr minetest-5.3.0/games/minetest_game/mods/doors/locale/doors.id.tr --- minetest-5.2.0/games/minetest_game/mods/doors/locale/doors.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/doors/locale/doors.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Bagian Pintu Tersembunyi +Owned by @1=Milik @1 +You do not own this locked door.=Anda bukan pemilik pintu terkunci ini. +a locked door=pintu terkunci +Wooden Door=Pintu Kayu +Steel Door=Pintu Baja +Glass Door=Pintu Kaca +Obsidian Glass Door=Pintu Kaca Obsidian +You do not own this trapdoor.=Anda bukan pemilik pintu kolong ini. +a locked trapdoor=pintu kolong terkunci +Wooden Trapdoor=Pintu Kolong Kayu +Steel Trapdoor=Pintu Kolong Baja +Apple Wood Fence Gate=Gerbang Kayu Pohon Apel +Acacia Wood Fence Gate=Gerbang Kayu Akasia +Jungle Wood Fence Gate=Gerbang Kayu Pohon Rimba +Pine Wood Fence Gate=Gerbang Kayu Pinus +Aspen Wood Fence Gate=Gerbang Kayu Aspen diff -Nru minetest-5.2.0/games/minetest_game/mods/doors/locale/doors.it.tr minetest-5.3.0/games/minetest_game/mods/doors/locale/doors.it.tr --- minetest-5.2.0/games/minetest_game/mods/doors/locale/doors.it.tr 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/doors/locale/doors.it.tr 2020-07-09 21:13:28.000000000 +0000 @@ -4,7 +4,7 @@ You do not own this locked door.=Non sei il proprietario di questa porta chiusa a chiave. a locked door=una porta chiusa a chiave Wooden Door=Porta di legno -Steel Door=Porta d'acciacio +Steel Door=Porta d'acciaio Glass Door=Porta di vetro Obsidian Glass Door=Porta di vetro d'ossidiana Owned by @1=Di proprietà di @1 @@ -16,4 +16,4 @@ Acacia Wood Fence Gate=Cancello della recinzione di legno d'acacia Jungle Wood Fence Gate=Cancello della recinzione di legno della giungla Pine Wood Fence Gate=Cancello della recinzione di legno di pino -Aspen Wood Fence Gate=Cancello della recinzione di legno di pioppo \ No newline at end of file +Aspen Wood Fence Gate=Cancello della recinzione di legno di pioppo diff -Nru minetest-5.2.0/games/minetest_game/mods/doors/models/door_a2.obj minetest-5.3.0/games/minetest_game/mods/doors/models/door_a2.obj --- minetest-5.2.0/games/minetest_game/mods/doors/models/door_a2.obj 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/doors/models/door_a2.obj 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,50 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib door_a2.mtl +o door_a2 +v -0.499000 1.499000 -0.499000 +v -0.499000 -0.499000 -0.499000 +v -0.499000 -0.499000 -0.375000 +v -0.499000 1.499000 -0.375000 +v 0.499000 -0.499000 -0.375000 +v 0.499000 1.499000 -0.375000 +v 0.499000 -0.499000 -0.499000 +v 0.499000 1.499000 -0.499000 +vt 0.894737 1.000000 +vt 0.894737 0.000000 +vt 0.842105 0.000000 +vt 0.842105 1.000000 +vt 0.421052 1.000000 +vt 0.421052 0.000000 +vt 0.000001 0.000000 +vt 0.000001 1.000000 +vt 0.894737 1.000000 +vt 0.894737 0.000000 +vt 0.947368 0.000000 +vt 0.947368 1.000000 +vt 0.842105 1.000000 +vt 0.842105 0.000000 +vt 0.421052 0.000000 +vt 0.421052 1.000000 +vt 0.947368 0.000000 +vt 0.947368 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 1.000000 0.500000 +vt 0.947368 0.500000 +vt 0.947368 1.000000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl None.009 +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 4/5/2 3/6/2 5/7/2 6/8/2 +f 6/9/3 5/10/3 7/11/3 8/12/3 +f 8/13/4 7/14/4 2/15/4 1/16/4 +f 2/17/5 7/18/5 5/19/5 3/20/5 +f 8/21/6 1/22/6 4/23/6 6/24/6 diff -Nru minetest-5.2.0/games/minetest_game/mods/doors/models/door_a.obj minetest-5.3.0/games/minetest_game/mods/doors/models/door_a.obj --- minetest-5.2.0/games/minetest_game/mods/doors/models/door_a.obj 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/doors/models/door_a.obj 2020-07-09 21:13:28.000000000 +0000 @@ -1,7 +1,7 @@ # Blender v2.76 (sub 0) OBJ File: 'door_a.blend' # www.blender.org mtllib door_a.mtl -o Cube_Cube.001 +o door_a v 0.499000 -0.499000 -0.499000 v 0.499000 1.499000 -0.499000 v 0.499000 -0.499000 -0.375000 diff -Nru minetest-5.2.0/games/minetest_game/mods/doors/models/door_b2.obj minetest-5.3.0/games/minetest_game/mods/doors/models/door_b2.obj --- minetest-5.2.0/games/minetest_game/mods/doors/models/door_b2.obj 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/doors/models/door_b2.obj 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,50 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib door_b2.mtl +o door_b2 +v 0.499000 1.499000 -0.499000 +v 0.499000 1.499000 -0.375000 +v 0.499000 -0.499000 -0.375000 +v 0.499000 -0.499000 -0.499000 +v -0.499000 1.499000 -0.375000 +v -0.499000 -0.499000 -0.375000 +v -0.499000 1.499000 -0.499000 +v -0.499000 -0.499000 -0.499000 +vt 0.842105 1.000000 +vt 0.894737 1.000000 +vt 0.894737 0.000000 +vt 0.842105 0.000000 +vt 0.421052 1.000000 +vt 0.000001 1.000000 +vt 0.000001 0.000000 +vt 0.421052 0.000000 +vt 0.894737 1.000000 +vt 0.947368 1.000000 +vt 0.947368 0.000000 +vt 0.894737 0.000000 +vt 0.842105 1.000000 +vt 0.421052 1.000000 +vt 0.421052 0.000000 +vt 0.842105 0.000000 +vt 1.000000 0.500000 +vt 0.947368 0.500000 +vt 0.947368 1.000000 +vt 1.000000 1.000000 +vt 1.000000 0.000000 +vt 0.947368 0.000000 +vt 0.947368 0.500000 +vt 1.000000 0.500000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl None.010 +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/5/2 5/6/2 6/7/2 3/8/2 +f 5/9/3 7/10/3 8/11/3 6/12/3 +f 7/13/4 1/14/4 4/15/4 8/16/4 +f 4/17/5 3/18/5 6/19/5 8/20/5 +f 7/21/6 5/22/6 2/23/6 1/24/6 diff -Nru minetest-5.2.0/games/minetest_game/mods/doors/models/door_b.obj minetest-5.3.0/games/minetest_game/mods/doors/models/door_b.obj --- minetest-5.2.0/games/minetest_game/mods/doors/models/door_b.obj 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/doors/models/door_b.obj 2020-07-09 21:13:28.000000000 +0000 @@ -1,40 +1,50 @@ -# Blender v2.76 (sub 0) OBJ File: 'door_b.blend' +# Blender v2.79 (sub 0) OBJ File: '' # www.blender.org mtllib door_b.mtl -o Cube_Cube.001 -v -0.499000 -0.499000 -0.499000 -v -0.499000 1.499000 -0.499000 -v -0.499000 -0.499000 -0.375000 -v -0.499000 1.499000 -0.375000 -v 0.499000 -0.499000 -0.499000 +o door_b v 0.499000 1.499000 -0.499000 -v 0.499000 -0.499000 -0.375000 v 0.499000 1.499000 -0.375000 +v 0.499000 -0.499000 -0.375000 +v 0.499000 -0.499000 -0.499000 +v -0.499000 1.499000 -0.375000 +v -0.499000 -0.499000 -0.375000 +v -0.499000 1.499000 -0.499000 +v -0.499000 -0.499000 -0.499000 +vt 0.894736 1.000000 +vt 0.947368 1.000000 +vt 0.947368 0.000000 +vt 0.894736 0.000000 vt 0.842105 1.000000 -vt 0.842105 0.000000 -vt 0.894737 0.000000 -vt 0.894737 1.000000 vt 0.421053 1.000000 vt 0.421053 0.000000 -vt 0.947368 0.000000 -vt 0.947368 1.000000 +vt 0.842105 0.000000 +vt 0.842105 1.000000 +vt 0.894736 1.000000 +vt 0.894736 0.000000 +vt 0.842105 0.000000 +vt 0.421053 1.000000 vt 0.000000 1.000000 vt 0.000000 0.000000 -vt 1.000000 0.000000 +vt 0.421053 0.000000 vt 1.000000 0.500000 vt 0.947368 0.500000 +vt 0.947368 1.000000 vt 1.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 1.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 2/1/1 1/2/1 3/3/1 4/4/1 -f 4/5/2 3/6/2 7/2/2 8/1/2 -f 8/4/3 7/3/3 5/7/3 6/8/3 -f 6/9/4 5/10/4 1/6/4 2/5/4 -f 1/11/5 5/12/5 7/13/5 3/7/5 -f 6/8/6 2/13/6 4/12/6 8/14/6 +vt 1.000000 0.000000 +vt 0.947368 0.000000 +vt 0.947368 0.500000 +vt 1.000000 0.500000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl None.007 +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/5/2 5/6/2 6/7/2 3/8/2 +f 5/9/3 7/10/3 8/11/3 6/12/3 +f 7/13/4 1/14/4 4/15/4 8/16/4 +f 4/17/5 3/18/5 6/19/5 8/20/5 +f 7/21/6 5/22/6 2/23/6 1/24/6 Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/doors/textures/doors_blank.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/doors/textures/doors_blank.png differ diff -Nru minetest-5.2.0/games/minetest_game/mods/dye/locale/dye.id.tr minetest-5.3.0/games/minetest_game/mods/dye/locale/dye.id.tr --- minetest-5.2.0/games/minetest_game/mods/dye/locale/dye.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/dye/locale/dye.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Pewarna Putih +Grey Dye=Pewarna Abu +Dark Grey Dye=Pewarna Abu Tua +Black Dye=Pewarna Hitam +Violet Dye=Pewarna Ungu +Blue Dye=Pewarna Biru +Cyan Dye=Pewarna Sian +Dark Green Dye=Pewarna Hijau Tua +Green Dye=Pewarna Hijau +Yellow Dye=Pewarna Kuning +Brown Dye=Pewarna Cokelat +Orange Dye=Pewarna Oranye +Red Dye=Pewarna Merah +Magenta Dye=Pewarna Magenta +Pink Dye=Pewarna Jambon diff -Nru minetest-5.2.0/games/minetest_game/mods/farming/init.lua minetest-5.3.0/games/minetest_game/mods/farming/init.lua --- minetest-5.2.0/games/minetest_game/mods/farming/init.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/farming/init.lua 2020-07-09 21:13:28.000000000 +0000 @@ -16,7 +16,7 @@ dofile(farming.path .. "/hoes.lua") --- WHEAT +-- Wheat farming.register_plant("farming:wheat", { description = S("Wheat Seed"), @@ -71,6 +71,25 @@ groups = {flammable = 4}, }) +minetest.register_decoration({ + name = "farming:cotton_wild", + deco_type = "simple", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = -0.1, + scale = 0.1, + spread = {x = 50, y = 50, z = 50}, + seed = 4242, + octaves = 3, + persist = 0.7 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + decoration = "farming:cotton_wild", +}) + minetest.register_craftitem("farming:string", { description = S("String"), inventory_image = "farming_string.png", @@ -117,12 +136,6 @@ minetest.register_craft({ type = "fuel", - recipe = "farming:straw", - burntime = 3, -}) - -minetest.register_craft({ - type = "fuel", recipe = "farming:wheat", burntime = 1, }) @@ -145,7 +158,9 @@ burntime = 5, }) + -- Register farming items as dungeon loot + if minetest.global_exists("dungeon_loot") then dungeon_loot.register({ {name = "farming:string", chance = 0.5, count = {1, 8}}, diff -Nru minetest-5.2.0/games/minetest_game/mods/farming/license.txt minetest-5.3.0/games/minetest_game/mods/farming/license.txt --- minetest-5.2.0/games/minetest_game/mods/farming/license.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/farming/license.txt 2020-07-09 21:13:28.000000000 +0000 @@ -59,3 +59,37 @@ For more details: http://creativecommons.org/licenses/by/3.0/ + +----------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2017 Napiophelios +Copyright (C) 2020 Extex101 + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff -Nru minetest-5.2.0/games/minetest_game/mods/farming/locale/farming.de.tr minetest-5.3.0/games/minetest_game/mods/farming/locale/farming.de.tr --- minetest-5.2.0/games/minetest_game/mods/farming/locale/farming.de.tr 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/farming/locale/farming.de.tr 2020-07-09 21:13:28.000000000 +0000 @@ -12,9 +12,9 @@ String=Faden Soil=Ackerboden Wet Soil=Nasser Ackerboden -Dry Soil=Trockener Ackerboden -Wet Dry Soil=Nasser trockener Ackerboden -Desert Sand Soil=Wüsensandackerboden +Savanna Soil=Savannenackerboden +Wet Savanna Soil=Nasser Savannenackerboden +Desert Sand Soil=Wüstensandackerboden Wet Desert Sand Soil=Nasser Wüstensandackerboden Straw=Stroh Straw Stair=Strohtreppe @@ -23,3 +23,6 @@ Outer Straw Stair=Äußere Strohtreppe Wheat=Weizen Cotton=Baumwolle +Hoe=Hacke +Seed=Samen +Wild Cotton=Wilde Baumwolle diff -Nru minetest-5.2.0/games/minetest_game/mods/farming/locale/farming.es.tr minetest-5.3.0/games/minetest_game/mods/farming/locale/farming.es.tr --- minetest-5.2.0/games/minetest_game/mods/farming/locale/farming.es.tr 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/farming/locale/farming.es.tr 2020-07-09 21:13:28.000000000 +0000 @@ -23,3 +23,4 @@ Outer Straw Stair=Escalera de paja exterior Wheat=Trigo Cotton=Algodón +Wild Cotton=Algodón silvestre diff -Nru minetest-5.2.0/games/minetest_game/mods/farming/locale/farming.id.tr minetest-5.3.0/games/minetest_game/mods/farming/locale/farming.id.tr --- minetest-5.2.0/games/minetest_game/mods/farming/locale/farming.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/farming/locale/farming.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,28 @@ +# textdomain: farming +Soil=Tanah Tanam +Wet Soil=Tanah Tanam Basah +Savanna Soil=Tanah Tanam Sabana +Wet Savanna Soil=Tanah Tanam Sabana Basah +Desert Sand Soil=Pasir Tanam Gurun +Wet Desert Sand Soil=Pasir Tanam Gurun Basah +Straw=Jerami +Straw Stair=Tangga Jerami +Inner Straw Stair=Tangga Jerami Dalam +Outer Straw Stair=Tangga Jerami Luar +Straw Slab=Lempengan Jerami +Wild Cotton=Kapas Liar +Wheat Seed=Benih Gandum +Wheat=Gandum +Flour=Tepung +Bread=Roti +Cotton Seed=Benih Kapas +Cotton=Kapas +String=Benang +Wooden Hoe=Cangkul Kayu +Stone Hoe=Cangkul Batu +Steel Hoe=Cangkul Baja +Bronze Hoe=Cangkul Perunggu +Mese Hoe=Cangkul Mese +Diamond Hoe=Cangkul Berlian +Hoe=Cangkul +Seed=Benih diff -Nru minetest-5.2.0/games/minetest_game/mods/farming/locale/template.txt minetest-5.3.0/games/minetest_game/mods/farming/locale/template.txt --- minetest-5.2.0/games/minetest_game/mods/farming/locale/template.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/farming/locale/template.txt 2020-07-09 21:13:28.000000000 +0000 @@ -1,19 +1,8 @@ # textdomain: farming -Wooden Hoe= -Stone Hoe= -Steel Hoe= -Bronze Hoe= -Mese Hoe= -Diamond Hoe= -Wheat Seed= -Flour= -Bread= -Cotton Seed= -String= Soil= Wet Soil= -Dry Soil= -Wet Dry Soil= +Savanna Soil= +Wet Savanna Soil= Desert Sand Soil= Wet Desert Sand Soil= Straw= @@ -21,5 +10,19 @@ Inner Straw Stair= Outer Straw Stair= Straw Slab= +Wild Cotton= +Wheat Seed= Wheat= +Flour= +Bread= +Cotton Seed= Cotton= +String= +Wooden Hoe= +Stone Hoe= +Steel Hoe= +Bronze Hoe= +Mese Hoe= +Diamond Hoe= +Hoe= +Seed= diff -Nru minetest-5.2.0/games/minetest_game/mods/farming/nodes.lua minetest-5.3.0/games/minetest_game/mods/farming/nodes.lua --- minetest-5.2.0/games/minetest_game/mods/farming/nodes.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/farming/nodes.lua 2020-07-09 21:13:28.000000000 +0000 @@ -86,7 +86,7 @@ }) minetest.register_node("farming:dry_soil", { - description = S("Dry Soil"), + description = S("Savanna Soil"), tiles = {"default_dry_dirt.png^farming_soil.png", "default_dry_dirt.png"}, drop = "default:dry_dirt", groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1}, @@ -99,7 +99,7 @@ }) minetest.register_node("farming:dry_soil_wet", { - description = S("Wet Dry Soil"), + description = S("Wet Savanna Soil"), tiles = {"default_dry_dirt.png^farming_soil_wet.png", "default_dry_dirt.png^farming_soil_wet_side.png"}, drop = "default:dry_dirt", groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1}, @@ -153,6 +153,13 @@ sounds = default.node_sound_leaves_defaults(), }) +-- Registered before the stairs so the stairs get fuel recipes. +minetest.register_craft({ + type = "fuel", + recipe = "farming:straw", + burntime = 3, +}) + do local recipe = "farming:straw" local groups = {snappy = 3, flammable = 4} @@ -223,20 +230,53 @@ }) +-- Make default:grass_* occasionally drop wheat seed + for i = 1, 5 do minetest.override_item("default:grass_"..i, {drop = { max_items = 1, items = { - {items = {"farming:seed_wheat"},rarity = 5}, + {items = {"farming:seed_wheat"}, rarity = 5}, {items = {"default:grass_1"}}, } }}) end + +-- Make default:junglegrass occasionally drop cotton seed. + +-- This is the old source of cotton seeds that makes no sense. It is a leftover +-- from Mapgen V6 where junglegrass was the only plant available to be a source. +-- This source is kept for now to avoid disruption but should probably be +-- removed in future as players get used to the new source. + minetest.override_item("default:junglegrass", {drop = { max_items = 1, items = { - {items = {"farming:seed_cotton"},rarity = 8}, + {items = {"farming:seed_cotton"}, rarity = 8}, {items = {"default:junglegrass"}}, } }}) + + +-- Wild cotton as a source of cotton seed + +minetest.register_node("farming:cotton_wild", { + description = S("Wild Cotton"), + drawtype = "plantlike", + waving = 1, + tiles = {"farming_cotton_wild.png"}, + inventory_image = "farming_cotton_wild.png", + wield_image = "farming_cotton_wild.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, attached_node = 1, flammable = 4}, + drop = "farming:seed_cotton", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -8 / 16, -6 / 16, 6 / 16, 5 / 16, 6 / 16}, + }, +}) diff -Nru minetest-5.2.0/games/minetest_game/mods/farming/README.txt minetest-5.3.0/games/minetest_game/mods/farming/README.txt --- minetest-5.2.0/games/minetest_game/mods/farming/README.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/farming/README.txt 2020-07-09 21:13:28.000000000 +0000 @@ -38,3 +38,6 @@ Created by Napiophelios (CC BY-SA 3.0): farming_cotton.png + +Created by Extex101 (CC BY-SA 3.0): + farming_cotton_wild.png Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/farming/textures/farming_cotton_wild.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/farming/textures/farming_cotton_wild.png differ diff -Nru minetest-5.2.0/games/minetest_game/mods/fire/init.lua minetest-5.3.0/games/minetest_game/mods/fire/init.lua --- minetest-5.2.0/games/minetest_game/mods/fire/init.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/fire/init.lua 2020-07-09 21:13:28.000000000 +0000 @@ -1,15 +1,12 @@ -- fire/init.lua -- Global namespace for functions - fire = {} -- Load support for MT game translation. local S = minetest.get_translator("fire") - -- 'Enable fire' setting - local fire_enabled = minetest.settings:get_bool("enable_fire") if fire_enabled == nil then -- enable_fire setting not specified, check for disable_fire @@ -27,12 +24,9 @@ -- -- Flood flame function - -local function flood_flame(pos, oldnode, newnode) +local function flood_flame(pos, _, newnode) -- Play flame extinguish sound if liquid is not an 'igniter' - local nodedef = minetest.registered_items[newnode.name] - if not (nodedef and nodedef.groups and - nodedef.groups.igniter and nodedef.groups.igniter > 0) then + if minetest.get_item_group(newnode.name, "igniter") == 0 then minetest.sound_play("fire_extinguish_flame", {pos = pos, max_hear_distance = 16, gain = 0.15}, true) end @@ -41,19 +35,16 @@ end -- Flame nodes - -minetest.register_node("fire:basic_flame", { +local fire_node = { drawtype = "firelike", - tiles = { - { - name = "fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, + tiles = {{ + name = "fire_basic_flame_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1 + }} }, inventory_image = "fire_basic_flame.png", paramtype = "light", @@ -63,61 +54,36 @@ sunlight_propagates = true, floodable = true, damage_per_second = 4, - groups = {igniter = 2, dig_immediate = 3, not_in_creative_inventory = 1}, + groups = {igniter = 2, dig_immediate = 3, fire = 1}, drop = "", + on_flood = flood_flame +} - on_timer = function(pos) - local f = minetest.find_node_near(pos, 1, {"group:flammable"}) - if not fire_enabled or not f then - minetest.remove_node(pos) - return - end - -- Restart timer - return true - end, - - on_construct = function(pos) - if not fire_enabled then - minetest.remove_node(pos) - else - minetest.get_node_timer(pos):start(math.random(30, 60)) - end - end, - - on_flood = flood_flame, -}) - -minetest.register_node("fire:permanent_flame", { - description = S("Permanent Flame"), - drawtype = "firelike", - tiles = { - { - name = "fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, - }, - inventory_image = "fire_basic_flame.png", - paramtype = "light", - light_source = 13, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - floodable = true, - damage_per_second = 4, - groups = {igniter = 2, dig_immediate = 3}, - drop = "", +-- Basic flame node +local flame_fire_node = table.copy(fire_node) +flame_fire_node.description = S("Fire") +flame_fire_node.groups.not_in_creative_inventory = 1 +flame_fire_node.on_timer = function(pos) + if not minetest.find_node_near(pos, 1, {"group:flammable"}) then + minetest.remove_node(pos) + return + end + -- Restart timer + return true +end +flame_fire_node.on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(30, 60)) +end - on_flood = flood_flame, -}) +minetest.register_node("fire:basic_flame", flame_fire_node) +-- Permanent flame node +local permanent_fire_node = table.copy(fire_node) +permanent_fire_node.description = S("Permanent Fire") --- Flint and steel +minetest.register_node("fire:permanent_flame", permanent_fire_node) +-- Flint and Steel minetest.register_tool("fire:flint_and_steel", { description = S("Flint and Steel"), inventory_image = "fire_flint_steel.png", @@ -125,11 +91,8 @@ on_use = function(itemstack, user, pointed_thing) local sound_pos = pointed_thing.above or user:get_pos() - minetest.sound_play( - "fire_flint_and_steel", - {pos = sound_pos, gain = 0.5, max_hear_distance = 8}, - true - ) + minetest.sound_play("fire_flint_and_steel", + {pos = sound_pos, gain = 0.5, max_hear_distance = 8}, true) local player_name = user:get_player_name() if pointed_thing.type == "node" then local node_under = minetest.get_node(pointed_thing.under).name @@ -153,10 +116,11 @@ -- Wear tool local wdef = itemstack:get_definition() itemstack:add_wear(1000) + -- Tool break sound if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then - minetest.sound_play(wdef.sound.breaks, {pos = sound_pos, - gain = 0.5}, true) + minetest.sound_play(wdef.sound.breaks, + {pos = sound_pos, gain = 0.5}, true) end return itemstack end @@ -170,23 +134,21 @@ } }) - -- Override coalblock to enable permanent flame above -- Coalblock is non-flammable to avoid unwanted basic_flame nodes - minetest.override_item("default:coalblock", { - after_destruct = function(pos, oldnode) + after_destruct = function(pos) pos.y = pos.y + 1 if minetest.get_node(pos).name == "fire:permanent_flame" then minetest.remove_node(pos) end end, - on_ignite = function(pos, igniter) + on_ignite = function(pos) local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} if minetest.get_node(flame_pos).name == "air" then minetest.set_node(flame_pos, {name = "fire:permanent_flame"}) end - end, + end }) @@ -194,24 +156,18 @@ -- Sound -- -local flame_sound = minetest.settings:get_bool("flame_sound") -if flame_sound == nil then - -- Enable if no setting present - flame_sound = true -end +-- Enable if no setting present +local flame_sound = minetest.settings:get_bool("flame_sound", true) if flame_sound then - local handles = {} local timer = 0 -- Parameters - local radius = 8 -- Flame node search radius around player local cycle = 3 -- Cycle time for sound updates -- Update sound for player - function fire.update_player_sound(player) local player_name = player:get_player_name() -- Search for flame nodes in radius around player @@ -263,16 +219,13 @@ fposmid = vector.divide(vector.add(fposmin, fposmax), 2) end -- Play sound - local handle = minetest.sound_play( - "fire_fire", - { - pos = fposmid, - to_player = player_name, - gain = math.min(0.06 * (1 + flames * 0.125), 0.18), - max_hear_distance = 32, - loop = true, -- In case of lag - } - ) + local handle = minetest.sound_play("fire_fire", { + pos = fposmid, + to_player = player_name, + gain = math.min(0.06 * (1 + flames * 0.125), 0.18), + max_hear_distance = 32, + loop = true -- In case of lag + }) -- Store sound handle for this player if handle then handles[player_name] = handle @@ -281,7 +234,6 @@ end -- Cycle for updating players sounds - minetest.register_globalstep(function(dtime) timer = timer + dtime if timer < cycle then @@ -296,7 +248,6 @@ end) -- Stop sound and clear handle on player leave - minetest.register_on_leaveplayer(function(player) local player_name = player:get_player_name() if handles[player_name] then @@ -308,19 +259,14 @@ -- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it - -function fire.update_sounds_around(pos) -end - +function fire.update_sounds_around() end -- -- ABMs -- if fire_enabled then - -- Ignite neighboring nodes, add basic flames - minetest.register_abm({ label = "Ignite flame", nodenames = {"group:flammable"}, @@ -333,11 +279,10 @@ if p then minetest.set_node(p, {name = "fire:basic_flame"}) end - end, + end }) -- Remove flammable nodes around basic flame - minetest.register_abm({ label = "Remove flammable nodes", nodenames = {"fire:basic_flame"}, @@ -358,7 +303,6 @@ minetest.remove_node(p) minetest.check_for_falling(p) end - end, + end }) - end diff -Nru minetest-5.2.0/games/minetest_game/mods/fire/locale/fire.de.tr minetest-5.3.0/games/minetest_game/mods/fire/locale/fire.de.tr --- minetest-5.2.0/games/minetest_game/mods/fire/locale/fire.de.tr 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/fire/locale/fire.de.tr 2020-07-09 21:13:28.000000000 +0000 @@ -1,3 +1,4 @@ # textdomain: fire -Permanent Flame=Permanente Flamme +Fire=Feuer +Permanent Fire=Permanentes Feuer Flint and Steel=Feuerstein und Stahl diff -Nru minetest-5.2.0/games/minetest_game/mods/fire/locale/fire.id.tr minetest-5.3.0/games/minetest_game/mods/fire/locale/fire.id.tr --- minetest-5.2.0/games/minetest_game/mods/fire/locale/fire.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/fire/locale/fire.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=Api +Permanent Fire=Api Abadi +Flint and Steel=Pemantik diff -Nru minetest-5.2.0/games/minetest_game/mods/fire/locale/fire.zh_CN.tr minetest-5.3.0/games/minetest_game/mods/fire/locale/fire.zh_CN.tr --- minetest-5.2.0/games/minetest_game/mods/fire/locale/fire.zh_CN.tr 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/fire/locale/fire.zh_CN.tr 2020-07-09 21:13:28.000000000 +0000 @@ -1,3 +1,4 @@ # textdomain: fire -Permanent Flame=永久火焰 +Permanent Fire=永久火焰 Flint and Steel=火石和钢 +Fire=火焰 diff -Nru minetest-5.2.0/games/minetest_game/mods/fire/locale/fire.zh_TW.tr minetest-5.3.0/games/minetest_game/mods/fire/locale/fire.zh_TW.tr --- minetest-5.2.0/games/minetest_game/mods/fire/locale/fire.zh_TW.tr 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/fire/locale/fire.zh_TW.tr 2020-07-09 21:13:28.000000000 +0000 @@ -1,3 +1,4 @@ # textdomain: fire -Permanent Flame=永久火焰 +Permanent Fire=永久火焰 Flint and Steel=火石和鋼 +Fire=火焰 diff -Nru minetest-5.2.0/games/minetest_game/mods/fire/locale/template.txt minetest-5.3.0/games/minetest_game/mods/fire/locale/template.txt --- minetest-5.2.0/games/minetest_game/mods/fire/locale/template.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/fire/locale/template.txt 2020-07-09 21:13:28.000000000 +0000 @@ -1,3 +1,4 @@ # textdomain: fire -Permanent Flame= +Fire= +Permanent Fire= Flint and Steel= Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/fire/textures/fire_basic_flame_animated.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/fire/textures/fire_basic_flame_animated.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/fire/textures/fire_basic_flame.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/fire/textures/fire_basic_flame.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minetest_game/mods/fire/textures/fire_flint_steel.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minetest_game/mods/fire/textures/fire_flint_steel.png differ diff -Nru minetest-5.2.0/games/minetest_game/mods/fireflies/locale/fireflies.id.tr minetest-5.3.0/games/minetest_game/mods/fireflies/locale/fireflies.id.tr --- minetest-5.2.0/games/minetest_game/mods/fireflies/locale/fireflies.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/fireflies/locale/fireflies.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Kunang-Kunang +Hidden Firefly=Kunang-Kunang Tersembunyi +Bug Net=Jaring Serangga +Firefly in a Bottle=Kunang-Kunang dalam Botol diff -Nru minetest-5.2.0/games/minetest_game/mods/flowers/locale/flowers.id.tr minetest-5.3.0/games/minetest_game/mods/flowers/locale/flowers.id.tr --- minetest-5.2.0/games/minetest_game/mods/flowers/locale/flowers.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/flowers/locale/flowers.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Mawar Merah +Orange Tulip=Tulip Oranye +Yellow Dandelion=Dandelion Kuning +Green Chrysanthemum=Krisan Hijau +Blue Geranium=Geranium Biru +Viola=Viola +White Dandelion=Dandelion Putih +Black Tulip=Tulip Hitam +Red Mushroom=Jamur Merah +Brown Mushroom=Jamur Cokelat +Waterlily=Teratai diff -Nru minetest-5.2.0/games/minetest_game/mods/game_commands/locale/game_commands.id.tr minetest-5.3.0/games/minetest_game/mods/game_commands/locale/game_commands.id.tr --- minetest-5.2.0/games/minetest_game/mods/game_commands/locale/game_commands.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/game_commands/locale/game_commands.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Bunuh diri untuk bangkit kembali +No static_spawnpoint defined=Tiada static_spawnpoint (titik bangkit statis) yang diatur +You need to be online to be killed!=Anda harus daring untuk dibunuh! diff -Nru minetest-5.2.0/games/minetest_game/mods/map/locale/map.id.tr minetest-5.3.0/games/minetest_game/mods/map/locale/map.id.tr --- minetest-5.2.0/games/minetest_game/mods/map/locale/map.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/map/locale/map.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Alat Pemetaan +Use with 'Minimap' key=Pakai dengan tombol 'Peta Mini' diff -Nru minetest-5.2.0/games/minetest_game/mods/player_api/api.lua minetest-5.3.0/games/minetest_game/mods/player_api/api.lua --- minetest-5.2.0/games/minetest_game/mods/player_api/api.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/player_api/api.lua 2020-07-09 21:13:28.000000000 +0000 @@ -106,21 +106,15 @@ end -- Check each player and apply animations -minetest.register_globalstep(function(dtime) +minetest.register_globalstep(function() for _, player in pairs(minetest.get_connected_players()) do local name = player:get_player_name() local model_name = player_model[name] local model = model_name and models[model_name] if model and not player_attached[name] then local controls = player:get_player_control() - local walking = false local animation_speed_mod = model.animation_speed or 30 - -- Determine if the player is walking - if controls.up or controls.down or controls.left or controls.right then - walking = true - end - -- Determine if the player is sneaking, and reduce animation speed if so if controls.sneak then animation_speed_mod = animation_speed_mod / 2 @@ -129,18 +123,19 @@ -- Apply animations based on what the player is doing if player:get_hp() == 0 then player_set_animation(player, "lay") - elseif walking then + -- Determine if the player is walking + elseif controls.up or controls.down or controls.left or controls.right then if player_sneak[name] ~= controls.sneak then player_anim[name] = nil player_sneak[name] = controls.sneak end - if controls.LMB then + if controls.LMB or controls.RMB then player_set_animation(player, "walk_mine", animation_speed_mod) else player_set_animation(player, "walk", animation_speed_mod) end - elseif controls.LMB then - player_set_animation(player, "mine") + elseif controls.LMB or controls.RMB then + player_set_animation(player, "mine", animation_speed_mod) else player_set_animation(player, "stand", animation_speed_mod) end diff -Nru minetest-5.2.0/games/minetest_game/mods/screwdriver/locale/screwdriver.id.tr minetest-5.3.0/games/minetest_game/mods/screwdriver/locale/screwdriver.id.tr --- minetest-5.2.0/games/minetest_game/mods/screwdriver/locale/screwdriver.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/screwdriver/locale/screwdriver.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Obeng +(left-click rotates face, right-click rotates axis)=(klik kiri putar sisi, klik kanan putar sumbu) diff -Nru minetest-5.2.0/games/minetest_game/mods/sethome/init.lua minetest-5.3.0/games/minetest_game/mods/sethome/init.lua --- minetest-5.2.0/games/minetest_game/mods/sethome/init.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/sethome/init.lua 2020-07-09 21:13:28.000000000 +0000 @@ -32,6 +32,9 @@ player:set_attribute("sethome:home", minetest.pos_to_string(pos)) -- remove `name` from the old storage file + if not homepos[name] then + return true + end local data = {} local output = io.open(homes_file, "w") if output then diff -Nru minetest-5.2.0/games/minetest_game/mods/sethome/locale/sethome.id.tr minetest-5.3.0/games/minetest_game/mods/sethome/locale/sethome.id.tr --- minetest-5.2.0/games/minetest_game/mods/sethome/locale/sethome.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/sethome/locale/sethome.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Boleh pakai /sethome dan /home +Teleport you to your home point=Teleportasi ke rumah Anda +Teleported to home!=Teleportasi ke rumah! +Set a home using /sethome=Atur letak rumah dengan /sethome +Set your home point=Atur letak rumah +Home set!=Letak rumah diatur! +Player not found!=Pemain tidak ditemukan! diff -Nru minetest-5.2.0/games/minetest_game/mods/sfinv/locale/sfinv.id.tr minetest-5.3.0/games/minetest_game/mods/sfinv/locale/sfinv.id.tr --- minetest-5.2.0/games/minetest_game/mods/sfinv/locale/sfinv.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/sfinv/locale/sfinv.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Kerajinan diff -Nru minetest-5.2.0/games/minetest_game/mods/sfinv/locale/template.txt minetest-5.3.0/games/minetest_game/mods/sfinv/locale/template.txt --- minetest-5.2.0/games/minetest_game/mods/sfinv/locale/template.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/sfinv/locale/template.txt 2020-07-09 21:13:28.000000000 +0000 @@ -1,2 +1,2 @@ -# textdomain:sfinv +# textdomain: sfinv Crafting= diff -Nru minetest-5.2.0/games/minetest_game/mods/stairs/init.lua minetest-5.3.0/games/minetest_game/mods/stairs/init.lua --- minetest-5.2.0/games/minetest_game/mods/stairs/init.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/stairs/init.lua 2020-07-09 21:13:28.000000000 +0000 @@ -874,7 +874,7 @@ stairs.register_stair( "glass", "default:glass", - {cracky = 3}, + {cracky = 3, oddly_breakable_by_hand = 3}, {"stairs_glass_split.png", "default_glass.png", "stairs_glass_stairside.png^[transformFX", "stairs_glass_stairside.png", "default_glass.png", "stairs_glass_split.png"}, @@ -886,7 +886,7 @@ stairs.register_slab( "glass", "default:glass", - {cracky = 3}, + {cracky = 3, oddly_breakable_by_hand = 3}, {"default_glass.png", "default_glass.png", "stairs_glass_split.png"}, S("Glass Slab"), default.node_sound_glass_defaults(), @@ -896,7 +896,7 @@ stairs.register_stair_inner( "glass", "default:glass", - {cracky = 3}, + {cracky = 3, oddly_breakable_by_hand = 3}, {"stairs_glass_stairside.png^[transformR270", "default_glass.png", "stairs_glass_stairside.png^[transformFX", "default_glass.png", "default_glass.png", "stairs_glass_stairside.png"}, @@ -909,7 +909,7 @@ stairs.register_stair_outer( "glass", "default:glass", - {cracky = 3}, + {cracky = 3, oddly_breakable_by_hand = 3}, {"stairs_glass_stairside.png^[transformR90", "default_glass.png", "stairs_glass_outer_stairside.png", "stairs_glass_stairside.png", "stairs_glass_stairside.png^[transformR90","stairs_glass_outer_stairside.png"}, diff -Nru minetest-5.2.0/games/minetest_game/mods/stairs/locale/stairs.id.tr minetest-5.3.0/games/minetest_game/mods/stairs/locale/stairs.id.tr --- minetest-5.2.0/games/minetest_game/mods/stairs/locale/stairs.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/stairs/locale/stairs.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Tangga Kaca +Glass Slab=Lempengan Kaca +Inner Glass Stair=Tangga Kaca Dalam +Outer Glass Stair=Tangga Kaca Luar +Obsidian Glass Stair=Tangga Kaca Obsidian +Obsidian Glass Slab=Lempengan Kaca Obsidian +Inner Obsidian Glass Stair=Tangga Kaca Obsidian Dalam +Outer Obsidian Glass Stair=Tangga Kaca Obsidian Luar +Wooden Stair=Tangga Kayu +Inner Wooden Stair=Tangga Kayu Dalam +Outer Wooden Stair=Tangga Kayu Luar +Wooden Slab=Lempengan Kayu +Jungle Wood Stair=Tangga Kayu Rimba +Inner Jungle Wood Stair=Tangga Kayu Rimba Dalam +Outer Jungle Wood Stair=Tangga Kayu Rimba Luar +Jungle Wood Slab=Lempengan Kayu Rimba +Pine Wood Stair=Tangga Kayu Pinus +Inner Pine Wood Stair=Tangga Kayu Pinus Dalam +Outer Pine Wood Stair=Tangga Kayu Pinus Luar +Pine Wood Slab=Lempengan Kayu Pinus +Acacia Wood Stair=Tangga Kayu Akasia +Inner Acacia Wood Stair=Tangga Kayu Akasia Dalam +Outer Acacia Wood Stair=Tangga Kayu Akasia Luar +Acacia Wood Slab=Lempengan Kayu Akasia +Aspen Wood Stair=Tangga Kayu Aspen +Inner Aspen Wood Stair=Tangga Kayu Aspen Dalam +Outer Aspen Wood Stair=Tangga Kayu Aspen Luar +Aspen Wood Slab=Lempengan Kayu Aspen +Stone Stair=Tangga Batu +Inner Stone Stair=Tangga Batu Dalam +Outer Stone Stair=Tangga Batu Luar +Stone Slab=Lempengan Batu +Cobblestone Stair=Tangga Bongkahan Batu +Inner Cobblestone Stair=Tangga Bongkahan Batu Dalam +Outer Cobblestone Stair=Tangga Bongkahan Batu Luar +Cobblestone Slab=Lempengan Bongkahan Batu +Mossy Cobblestone Stair=Tangga Bongkahan Batu Berlumut +Inner Mossy Cobblestone Stair=Tangga Bongkahan Batu Berlumut Dalam +Outer Mossy Cobblestone Stair=Tangga Bongkahan Batu Berlumut Luar +Mossy Cobblestone Slab=Lempengan Bongkahan Batu Berlumut +Stone Brick Stair=Tangga Tembok Batu +Inner Stone Brick Stair=Tangga Tembok Batu Dalam +Outer Stone Brick Stair=Tangga Tembok Batu Luar +Stone Brick Slab=Lempengan Tembok Batu +Stone Block Stair=Tangga Balok Batu +Inner Stone Block Stair=Tangga Balok Batu Dalam +Outer Stone Block Stair=Tangga Balok Batu Luar +Stone Block Slab=Lempengan Balok Batu +Desert Stone Stair=Tangga Batu Gurun +Inner Desert Stone Stair=Tangga Batu Gurun Dalam +Outer Desert Stone Stair=Tangga Batu Gurun Luar +Desert Stone Slab=Lempengan Batu Gurun +Desert Cobblestone Stair=Tangga Bongkahan Batu Gurun +Inner Desert Cobblestone Stair=Tangga Bongkahan Batu Gurun Dalam +Outer Desert Cobblestone Stair=Tangga Bongkahan Batu Gurun Luar +Desert Cobblestone Slab=Lempengan Bongkahan Batu Gurun +Desert Stone Brick Stair=Tangga Tembok Batu Gurun +Inner Desert Stone Brick Stair=Tangga Tembok Batu Gurun Dalam +Outer Desert Stone Brick Stair=Tangga Tembok Batu Gurun Luar +Desert Stone Brick Slab=Lempengan Tembok Batu Gurun +Desert Stone Block Stair=Tangga Balok Batu Gurun +Inner Desert Stone Block Stair=Tangga Balok Batu Gurun Dalam +Outer Desert Stone Block Stair=Tangga Balok Batu Gurun Luar +Desert Stone Block Slab=Lempengan Balok Batu Gurun +Sandstone Stair=Tangga Batu Pasir +Inner Sandstone Stair=Tangga Batu Pasir Dalam +Outer Sandstone Stair=Tangga Batu Pasir Luar +Sandstone Slab=Lempengan Batu Pasir +Sandstone Brick Stair=Tangga Tembok Batu Pasir +Inner Sandstone Brick Stair=Tangga Tembok Batu Pasir Dalam +Outer Sandstone Brick Stair=Tangga Tembok Batu Pasir Luar +Sandstone Brick Slab=Lempengan Tembok Batu Pasir +Sandstone Block Stair=Tangga Balok Batu Pasir +Inner Sandstone Block Stair=Tangga Balok Batu Pasir Dalam +Outer Sandstone Block Stair=Tangga Balok Batu Pasir Luar +Sandstone Block Slab=Lempengan Balok Batu Pasir +Desert Sandstone Stair=Tangga Batu Pasir Gurun +Inner Desert Sandstone Stair=Tangga Batu Pasir Gurun Dalam +Outer Desert Sandstone Stair=Tangga Batu Pasir Gurun Luar +Desert Sandstone Slab=Lempengan Batu Pasir Gurun +Desert Sandstone Brick Stair=Tangga Tembok Batu Pasir Gurun +Inner Desert Sandstone Brick Stair=Tangga Tembok Batu Pasir Gurun Dalam +Outer Desert Sandstone Brick Stair=Tangga Tembok Batu Pasir Gurun Luar +Desert Sandstone Brick Slab=Lempengan Tembok Batu Pasir Gurun +Desert Sandstone Block Stair=Tangga Balok Batu Pasir Gurun +Inner Desert Sandstone Block Stair=Tangga Balok Batu Pasir Gurun Dalam +Outer Desert Sandstone Block Stair=Tangga Balok Batu Pasir Gurun Luar +Desert Sandstone Block Slab=Lempengan Balok Batu Pasir Gurun +Silver Sandstone Stair=Tangga Batu Pasir Perak +Inner Silver Sandstone Stair=Tangga Batu Pasir Perak Dalam +Outer Silver Sandstone Stair=Tangga Batu Pasir Perak Luar +Silver Sandstone Slab=Lempengan Batu Pasir Perak +Silver Sandstone Brick Stair=Tangga Tembok Batu Pasir Perak +Inner Silver Sandstone Brick Stair=Tangga Tembok Batu Pasir Perak Dalam +Outer Silver Sandstone Brick Stair=Tangga Tembok Batu Pasir Perak Luar +Silver Sandstone Brick Slab=Lempengan Tembok Batu Pasir Perak +Silver Sandstone Block Stair=Tangga Balok Batu Pasir Perak +Inner Silver Sandstone Block Stair=Tangga Balok Batu Pasir Perak Dalam +Outer Silver Sandstone Block Stair=Tangga Balok Batu Pasir Perak Luar +Silver Sandstone Block Slab=Lempengan Balok Batu Pasir Perak +Obsidian Stair=Tangga Obsidian +Inner Obsidian Stair=Tangga Obsidian Dalam +Outer Obsidian Stair=Tangga Obsidian Luar +Obsidian Slab=Lempengan Obsidian +Obsidian Brick Stair=Tangga Tembok Obsidian +Inner Obsidian Brick Stair=Tangga Tembok Obsidian Dalam +Outer Obsidian Brick Stair=Tangga Tembok Obsidian Luar +Obsidian Brick Slab=Lempengan Tembok Obsidian +Obsidian Block Stair=Tangga Balok Obsidian +Inner Obsidian Block Stair=Tangga Balok Obsidian Dalam +Outer Obsidian Block Stair=Tangga Balok Obsidian Luar +Obsidian Block Slab=Lempengan Balok Obsidian +Brick Stair=Tangga Bata +Inner Brick Stair=Tangga Bata Dalam +Outer Brick Stair=Tangga Bata Luar +Brick Slab=Lempengan Bata +Steel Block Stair=Tangga Balok Baja +Inner Steel Block Stair=Tangga Balok Baja Dalam +Outer Steel Block Stair=Tangga Balok Baja Luar +Steel Block Slab=Lempengan Balok Baja +Tin Block Stair=Tangga Balok Timah +Inner Tin Block Stair=Tangga Balok Timah Dalam +Outer Tin Block Stair=Tangga Balok Timah Luar +Tin Block Slab=Lempengan Balok Timah +Copper Block Stair=Tangga Balok Tembaga +Inner Copper Block Stair=Tangga Balok Tembaga Dalam +Outer Copper Block Stair=Tangga Balok Tembaga Luar +Copper Block Slab=Lempengan Balok Tembaga +Bronze Block Stair=Tangga Balok Perunggu +Inner Bronze Block Stair=Tangga Balok Perunggu Dalam +Outer Bronze Block Stair=Tangga Balok Perunggu Luar +Bronze Block Slab=Lempengan Balok Perunggu +Gold Block Stair=Tangga Balok Emas +Inner Gold Block Stair=Tangga Balok Emas Dalam +Outer Gold Block Stair=Tangga Balok Emas Luar +Gold Block Slab=Lempengan Balok Emas +Ice Stair=Tangga Es +Inner Ice Stair=Tangga Es Dalam +Outer Ice Stair=Tangga Es Luar +Ice Slab=Lempengan Es +Snow Block Stair=Tangga Balok Salju +Inner Snow Block Stair=Tangga Balok Salju Dalam +Outer Snow Block Stair=Tangga Balok Salju Luar +Snow Block Slab=Lempengan Balok Salju diff -Nru minetest-5.2.0/games/minetest_game/mods/tnt/init.lua minetest-5.3.0/games/minetest_game/mods/tnt/init.lua --- minetest-5.2.0/games/minetest_game/mods/tnt/init.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/tnt/init.lua 2020-07-09 21:13:28.000000000 +0000 @@ -22,7 +22,7 @@ -- Fill a list with data for content IDs, after all nodes are registered local cid_data = {} -minetest.after(0, function() +minetest.register_on_mods_loaded(function() for name, def in pairs(minetest.registered_nodes) do cid_data[minetest.get_content_id(name)] = { name = name, @@ -163,13 +163,9 @@ local damage = (4 / dist) * radius if obj:is_player() then - -- we knock the player back 1.0 node, and slightly upwards - -- TODO: switch to add_player_velocity() introduced in 5.1 local dir = vector.normalize(vector.subtract(obj_pos, pos)) - local moveoff = vector.multiply(dir, dist + 1.0) - local newpos = vector.add(pos, moveoff) - newpos = vector.add(newpos, {x = 0, y = 0.2, z = 0}) - obj:set_pos(newpos) + local moveoff = vector.multiply(dir, 2 / dist * radius) + obj:add_player_velocity(moveoff) obj:set_hp(obj:get_hp() - damage) else @@ -238,12 +234,16 @@ -- we just dropped some items. Look at the items entities and pick -- one of them to use as texture local texture = "tnt_blast.png" --fallback texture + local node local most = 0 for name, stack in pairs(drops) do local count = stack:get_count() if count > most then most = count local def = minetest.registered_nodes[name] + if def then + node = { name = name } + end if def and def.tiles and def.tiles[1] then texture = def.tiles[1] end @@ -261,9 +261,11 @@ maxacc = {x = 0, y = -10, z = 0}, minexptime = 0.8, maxexptime = 2.0, - minsize = radius * 0.66, - maxsize = radius * 2, + minsize = radius * 0.33, + maxsize = radius, texture = texture, + -- ^ only as fallback for clients without support for `node` parameter + node = node, collisiondetection = true, }) end @@ -292,10 +294,15 @@ local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) local data = vm1:get_data() local count = 0 - local c_tnt = minetest.get_content_id("tnt:tnt") + local c_tnt local c_tnt_burning = minetest.get_content_id("tnt:tnt_burning") local c_tnt_boom = minetest.get_content_id("tnt:boom") local c_air = minetest.get_content_id("air") + if enable_tnt then + c_tnt = minetest.get_content_id("tnt:tnt") + else + c_tnt = c_tnt_burning -- tnt is not registered if disabled + end -- make sure we still have explosion even when centre node isnt tnt related if explode_center then count = 1 @@ -401,7 +408,7 @@ def.damage_radius = def.damage_radius or def.radius * 2 local meta = minetest.get_meta(pos) local owner = meta:get_string("owner") - if not def.explode_center then + if not def.explode_center and def.ignore_protection ~= true then minetest.set_node(pos, {name = "tnt:boom"}) end local sound = def.sound or "tnt_explode" diff -Nru minetest-5.2.0/games/minetest_game/mods/tnt/locale/tnt.id.tr minetest-5.3.0/games/minetest_game/mods/tnt/locale/tnt.id.tr --- minetest-5.2.0/games/minetest_game/mods/tnt/locale/tnt.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/tnt/locale/tnt.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Bubuk Mesiu +TNT Stick=Tongkat TNT +TNT=TNT diff -Nru minetest-5.2.0/games/minetest_game/mods/vessels/locale/template.txt minetest-5.3.0/games/minetest_game/mods/vessels/locale/template.txt --- minetest-5.2.0/games/minetest_game/mods/vessels/locale/template.txt 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/vessels/locale/template.txt 2020-07-09 21:13:28.000000000 +0000 @@ -1,8 +1,8 @@ # textdomain: vessels +Empty Vessels Shelf= +Vessels Shelf (@1 items)= Vessels Shelf= Empty Glass Bottle= Empty Drinking Glass= Empty Heavy Steel Bottle= Glass Fragments= -Empty Vessels Shelf= -Vessels Shelf (@1 items)= diff -Nru minetest-5.2.0/games/minetest_game/mods/vessels/locale/vessels.id.tr minetest-5.3.0/games/minetest_game/mods/vessels/locale/vessels.id.tr --- minetest-5.2.0/games/minetest_game/mods/vessels/locale/vessels.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/vessels/locale/vessels.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Rak Bejana Kosong +Vessels Shelf (@1 items)=Rak Bejana (@1 barang) +Vessels Shelf=Rak Bejana +Empty Glass Bottle=Botol Kaca Kosong +Empty Drinking Glass=Gelas Minum Kosong +Empty Heavy Steel Bottle=Botol Baja Berat Kosong +Glass Fragments=Pecahan Kaca diff -Nru minetest-5.2.0/games/minetest_game/mods/walls/locale/walls.id.tr minetest-5.3.0/games/minetest_game/mods/walls/locale/walls.id.tr --- minetest-5.2.0/games/minetest_game/mods/walls/locale/walls.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/walls/locale/walls.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Tembok Bongkahan Batu +Mossy Cobblestone Wall=Tembok Bongkahan Batu Berlumut +Desert Cobblestone Wall=Tembok Bongkahan Batu Gurun diff -Nru minetest-5.2.0/games/minetest_game/mods/weather/init.lua minetest-5.3.0/games/minetest_game/mods/weather/init.lua --- minetest-5.2.0/games/minetest_game/mods/weather/init.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/weather/init.lua 2020-07-09 21:13:28.000000000 +0000 @@ -82,18 +82,26 @@ nobj_speedx = nobj_speedx or minetest.get_perlin(np_speedx) nobj_speedz = nobj_speedz or minetest.get_perlin(np_speedz) - local n_density = nobj_density:get_2d({x = time, y = 0}) - local n_thickness = nobj_thickness:get_2d({x = time, y = 0}) - local n_speedx = nobj_speedx:get_2d({x = time, y = 0}) - local n_speedz = nobj_speedz:get_2d({x = time, y = 0}) + local n_density = nobj_density:get_2d({x = time, y = 0}) -- 0 to 1 + local n_thickness = nobj_thickness:get_2d({x = time, y = 0}) -- 0 to 1 + local n_speedx = nobj_speedx:get_2d({x = time, y = 0}) -- -1 to 1 + local n_speedz = nobj_speedz:get_2d({x = time, y = 0}) -- -1 to 1 for _, player in ipairs(minetest.get_connected_players()) do local humid = minetest.get_humidity(player:get_pos()) + -- Default and classic density value is 0.4, make this happen + -- at humidity midvalue 50 when n_density is at midvalue 0.5. + -- density_max = 0.25 at humid = 0. + -- density_max = 0.8 at humid = 50. + -- density_max = 1.35 at humid = 100. + local density_max = 0.8 + ((humid - 50) / 50) * 0.55 player:set_clouds({ - density = rangelim(humid / 100, 0.25, 1.0) * n_density, + -- Range limit density_max to always have occasional + -- small scattered clouds at extreme low humidity. + density = rangelim(density_max, 0.2, 1.0) * n_density, thickness = math.max(math.floor( rangelim(32 * humid / 100, 8, 32) * n_thickness - ), 1), + ), 2), speed = {x = n_speedx * 4, z = n_speedz * 4}, }) end diff -Nru minetest-5.2.0/games/minetest_game/mods/wool/locale/wool.id.tr minetest-5.3.0/games/minetest_game/mods/wool/locale/wool.id.tr --- minetest-5.2.0/games/minetest_game/mods/wool/locale/wool.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/wool/locale/wool.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Wol Putih +Grey Wool=Wol Abu +Dark Grey Wool=Wol Abu Tua +Black Wool=Wol Hitam +Violet Wool=Wol Ungu +Blue Wool=Wol Biru +Cyan Wool=Wol Sian +Dark Green Wool=Wol Hijau Tua +Green Wool=Wol Hijau +Yellow Wool=Wol Kuning +Brown Wool=Wol Cokelat +Orange Wool=Wol Oranye +Red Wool=Wol Merah +Magenta Wool=Wol Magenta +Pink Wool=Wol Jambon diff -Nru minetest-5.2.0/games/minetest_game/mods/xpanes/init.lua minetest-5.3.0/games/minetest_game/mods/xpanes/init.lua --- minetest-5.2.0/games/minetest_game/mods/xpanes/init.lua 2020-04-05 17:47:10.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/xpanes/init.lua 2020-07-09 21:13:28.000000000 +0000 @@ -223,7 +223,7 @@ description = S("Steel Bar Door"), inventory_image = "xpanes_item_steel_bar.png", protected = true, - groups = {cracky = 1, level = 2}, + groups = {node = 1, cracky = 1, level = 2}, sounds = default.node_sound_metal_defaults(), sound_open = "xpanes_steel_bar_door_open", sound_close = "xpanes_steel_bar_door_close", @@ -241,7 +241,7 @@ tile_front = "xpanes_trapdoor_steel_bar.png", tile_side = "xpanes_trapdoor_steel_bar_side.png", protected = true, - groups = {cracky = 1, level = 2, door = 1}, + groups = {node = 1, cracky = 1, level = 2, door = 1}, sounds = default.node_sound_metal_defaults(), sound_open = "xpanes_steel_bar_door_open", sound_close = "xpanes_steel_bar_door_close", diff -Nru minetest-5.2.0/games/minetest_game/mods/xpanes/locale/xpanes.id.tr minetest-5.3.0/games/minetest_game/mods/xpanes/locale/xpanes.id.tr --- minetest-5.2.0/games/minetest_game/mods/xpanes/locale/xpanes.id.tr 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/games/minetest_game/mods/xpanes/locale/xpanes.id.tr 2020-07-09 21:13:28.000000000 +0000 @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Panel Kaca +Obsidian Glass Pane=Panel Kaca Obsidian +Steel Bars=Batang Baja +Steel Bar Door=Pintu Batang Baja +Steel Bar Trapdoor=Pintu Kolong Batang Baja diff -Nru minetest-5.2.0/games/minimal/game.conf minetest-5.3.0/games/minimal/game.conf --- minetest-5.2.0/games/minimal/game.conf 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/game.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -name = Minimal development test - Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/menu/background.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/menu/background.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/menu/icon.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/menu/icon.png differ diff -Nru minetest-5.2.0/games/minimal/mods/bucket/init.lua minetest-5.3.0/games/minimal/mods/bucket/init.lua --- minetest-5.2.0/games/minimal/mods/bucket/init.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/bucket/init.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ --- bucket (Minetest 0.4 mod) --- A bucket, which can pick up water and lava - -minetest.register_alias("bucket", "bucket:bucket_empty") -minetest.register_alias("bucket_water", "bucket:bucket_water") -minetest.register_alias("bucket_lava", "bucket:bucket_lava") - -minetest.register_craft({ - output = 'bucket:bucket_empty 1', - recipe = { - {'default:steel_ingot', '', 'default:steel_ingot'}, - {'', 'default:steel_ingot', ''}, - } -}) - -bucket = {} -bucket.liquids = {} - --- Register a new liquid --- source = name of the source node --- flowing = name of the flowing node --- itemname = name of the new bucket item (or nil if liquid is not takeable) --- inventory_image = texture of the new bucket item (ignored if itemname == nil) --- This function can be called from any mod (that depends on bucket). -function bucket.register_liquid(source, flowing, itemname, inventory_image) - bucket.liquids[source] = { - source = source, - flowing = flowing, - itemname = itemname, - } - bucket.liquids[flowing] = bucket.liquids[source] - - if itemname ~= nil then - minetest.register_craftitem(itemname, { - inventory_image = inventory_image, - stack_max = 1, - liquids_pointable = true, - on_use = function(itemstack, user, pointed_thing) - -- Must be pointing to node - if pointed_thing.type ~= "node" then - return - end - -- Check if pointing to a liquid - n = minetest.get_node(pointed_thing.under) - if bucket.liquids[n.name] == nil then - -- Not a liquid - minetest.add_node(pointed_thing.above, {name=source}) - elseif n.name ~= source then - -- It's a liquid - minetest.add_node(pointed_thing.under, {name=source}) - end - return {name="bucket:bucket_empty"} - end - }) - end -end - -minetest.register_craftitem("bucket:bucket_empty", { - inventory_image = "bucket.png", - stack_max = 1, - liquids_pointable = true, - on_use = function(itemstack, user, pointed_thing) - -- Must be pointing to node - if pointed_thing.type ~= "node" then - return - end - -- Check if pointing to a liquid source - n = minetest.get_node(pointed_thing.under) - liquiddef = bucket.liquids[n.name] - if liquiddef ~= nil and liquiddef.source == n.name and liquiddef.itemname ~= nil then - minetest.add_node(pointed_thing.under, {name="air"}) - return {name=liquiddef.itemname} - end - end, -}) - -bucket.register_liquid( - "default:water_source", - "default:water_flowing", - "bucket:bucket_water", - "bucket_water.png" -) - -bucket.register_liquid( - "default:lava_source", - "default:lava_flowing", - "bucket:bucket_lava", - "bucket_lava.png" -) - -minetest.register_craft({ - type = "fuel", - recipe = "bucket:bucket_lava", - burntime = 60, -}) diff -Nru minetest-5.2.0/games/minimal/mods/bucket/mod.conf minetest-5.3.0/games/minimal/mods/bucket/mod.conf --- minetest-5.2.0/games/minimal/mods/bucket/mod.conf 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/bucket/mod.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -name = bucket -description = Minimal bucket to place and pick up liquids -depends = default Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/bucket/textures/bucket_lava.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/bucket/textures/bucket_lava.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/bucket/textures/bucket.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/bucket/textures/bucket.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/bucket/textures/bucket_water.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/bucket/textures/bucket_water.png differ diff -Nru minetest-5.2.0/games/minimal/mods/default/init.lua minetest-5.3.0/games/minimal/mods/default/init.lua --- minetest-5.2.0/games/minimal/mods/default/init.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/default/init.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,1837 +0,0 @@ --- default (Minetest 0.4 mod) --- Most default stuff - --- The API documentation in here was moved into doc/lua_api.txt - -WATER_ALPHA = 160 -WATER_VISC = 1 -LAVA_VISC = 7 -LIGHT_MAX = 14 - --- Definitions made by this mod that other mods can use too -default = {} - --- Load other files -dofile(minetest.get_modpath("default").."/mapgen.lua") - --- Set a noticeable inventory formspec for players -minetest.register_on_joinplayer(function(player) - local cb = function(player) - minetest.chat_send_player(player:get_player_name(), "This is the [minimal] \"Minimal Development Test\" game. Use [minetest_game] for the real thing.") - player:set_attribute("test_attribute", "test_me") - player:set_attribute("remove_this", nil) - end - minetest.after(2.0, cb, player) -end) - --- --- Tool definition --- - --- The hand -minetest.register_item(":", { - type = "none", - wield_image = "wieldhand.png", - wield_scale = {x=1,y=1,z=2.5}, - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level = 0, - groupcaps = { - fleshy = {times={[2]=2.00, [3]=1.00}, uses=0, maxlevel=1}, - crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1}, - snappy = {times={[3]=0.40}, uses=0, maxlevel=1}, - oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40}, uses=0, maxlevel=3}, - }, - damage_groups = {fleshy=1}, - } -}) - --- --- Picks --- - -minetest.register_tool("default:pick_wood", { - description = "Wooden Pickaxe", - inventory_image = "default_tool_woodpick.png", - tool_capabilities = { - max_drop_level=0, - groupcaps={ - cracky={times={[2]=2.00, [3]=1.20}, uses=10, maxlevel=1} - }, - damage_groups = {fleshy=2}, - }, -}) -minetest.register_tool("default:pick_stone", { - description = "Stone Pickaxe", - inventory_image = "default_tool_stonepick.png", - tool_capabilities = { - max_drop_level=0, - groupcaps={ - cracky={times={[1]=2.00, [2]=1.20, [3]=0.80}, uses=20, maxlevel=1} - }, - damage_groups = {fleshy=3}, - }, -}) -minetest.register_tool("default:pick_steel", { - description = "Steel Pickaxe", - inventory_image = "default_tool_steelpick.png", - tool_capabilities = { - max_drop_level=1, - groupcaps={ - cracky={times={[1]=4.00, [2]=1.60, [3]=1.00}, uses=10, maxlevel=2} - }, - damage_groups = {fleshy=4}, - }, -}) -minetest.register_tool("default:pick_mese", { - description = "Mese Pickaxe", - inventory_image = "default_tool_mesepick.png", - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=3, - groupcaps={ - cracky={times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3}, - crumbly={times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3}, - snappy={times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3} - }, - damage_groups = {fleshy=4}, - }, -}) - --- --- Shovels --- - -minetest.register_tool("default:shovel_wood", { - description = "Wooden Shovel", - inventory_image = "default_tool_woodshovel.png", - tool_capabilities = { - max_drop_level=0, - groupcaps={ - crumbly={times={[1]=2.00, [2]=0.80, [3]=0.50}, uses=10, maxlevel=1} - }, - damage_groups = {fleshy=2}, - }, -}) -minetest.register_tool("default:shovel_stone", { - description = "Stone Shovel", - inventory_image = "default_tool_stoneshovel.png", - tool_capabilities = { - max_drop_level=0, - groupcaps={ - crumbly={times={[1]=1.20, [2]=0.50, [3]=0.30}, uses=20, maxlevel=1} - }, - damage_groups = {fleshy=3}, - }, -}) -minetest.register_tool("default:shovel_steel", { - description = "Steel Shovel", - inventory_image = "default_tool_steelshovel.png", - tool_capabilities = { - max_drop_level=1, - groupcaps={ - crumbly={times={[1]=1.00, [2]=0.70, [3]=0.60}, uses=10, maxlevel=2} - }, - damage_groups = {fleshy=4}, - }, -}) - --- --- Axes --- - -minetest.register_tool("default:axe_wood", { - description = "Wooden Axe", - inventory_image = "default_tool_woodaxe.png", - tool_capabilities = { - max_drop_level=0, - groupcaps={ - choppy={times={[2]=1.40, [3]=0.80}, uses=10, maxlevel=1}, - fleshy={times={[2]=1.50, [3]=0.80}, uses=10, maxlevel=1} - }, - damage_groups = {fleshy=2}, - }, -}) -minetest.register_tool("default:axe_stone", { - description = "Stone Axe", - inventory_image = "default_tool_stoneaxe.png", - tool_capabilities = { - max_drop_level=0, - groupcaps={ - choppy={times={[1]=1.50, [2]=1.00, [3]=0.60}, uses=20, maxlevel=1}, - fleshy={times={[2]=1.30, [3]=0.70}, uses=20, maxlevel=1} - }, - damage_groups = {fleshy=3}, - }, -}) -minetest.register_tool("default:axe_steel", { - description = "Steel Axe", - inventory_image = "default_tool_steelaxe.png", - tool_capabilities = { - max_drop_level=1, - groupcaps={ - choppy={times={[1]=2.00, [2]=1.60, [3]=1.00}, uses=10, maxlevel=2}, - fleshy={times={[2]=1.10, [3]=0.60}, uses=40, maxlevel=1} - }, - damage_groups = {fleshy=3}, - }, -}) - --- --- Swords --- - -minetest.register_tool("default:sword_wood", { - description = "Wooden Sword", - inventory_image = "default_tool_woodsword.png", - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=0, - groupcaps={ - fleshy={times={[2]=1.10, [3]=0.60}, uses=10, maxlevel=1}, - snappy={times={[2]=1.00, [3]=0.50}, uses=10, maxlevel=1}, - choppy={times={[3]=1.00}, uses=20, maxlevel=0} - }, - damage_groups = {fleshy=2}, - } -}) -minetest.register_tool("default:sword_stone", { - description = "Stone Sword", - inventory_image = "default_tool_stonesword.png", - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=0, - groupcaps={ - fleshy={times={[2]=0.80, [3]=0.40}, uses=20, maxlevel=1}, - snappy={times={[2]=0.80, [3]=0.40}, uses=20, maxlevel=1}, - choppy={times={[3]=0.90}, uses=20, maxlevel=0} - }, - damage_groups = {fleshy=4}, - } -}) -minetest.register_tool("default:sword_steel", { - description = "Steel Sword", - inventory_image = "default_tool_steelsword.png", - tool_capabilities = { - full_punch_interval = 1.0, - max_drop_level=1, - groupcaps={ - fleshy={times={[1]=2.00, [2]=0.80, [3]=0.40}, uses=10, maxlevel=2}, - snappy={times={[2]=0.70, [3]=0.30}, uses=40, maxlevel=1}, - choppy={times={[3]=0.70}, uses=40, maxlevel=0} - }, - damage_groups = {fleshy=6}, - } -}) - --- --- Crafting definition --- - -minetest.register_craft({ - output = 'default:wood 4', - recipe = { - {'default:tree'}, - } -}) - -minetest.register_craft({ - output = 'default:stick 4', - recipe = { - {'default:wood'}, - } -}) - -minetest.register_craft({ - output = 'default:fence_wood 2', - recipe = { - {'default:stick', 'default:stick', 'default:stick'}, - {'default:stick', 'default:stick', 'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:sign_wall', - recipe = { - {'default:wood', 'default:wood', 'default:wood'}, - {'default:wood', 'default:wood', 'default:wood'}, - {'', 'default:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:torch 4', - recipe = { - {'default:coal_lump'}, - {'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:pick_wood', - recipe = { - {'default:wood', 'default:wood', 'default:wood'}, - {'', 'default:stick', ''}, - {'', 'default:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:pick_stone', - recipe = { - {'default:cobble', 'default:cobble', 'default:cobble'}, - {'', 'default:stick', ''}, - {'', 'default:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:pick_steel', - recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'', 'default:stick', ''}, - {'', 'default:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:pick_mese', - recipe = { - {'default:mese', 'default:mese', 'default:mese'}, - {'', 'default:stick', ''}, - {'', 'default:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:shovel_wood', - recipe = { - {'default:wood'}, - {'default:stick'}, - {'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:shovel_stone', - recipe = { - {'default:cobble'}, - {'default:stick'}, - {'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:shovel_steel', - recipe = { - {'default:steel_ingot'}, - {'default:stick'}, - {'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:axe_wood', - recipe = { - {'default:wood', 'default:wood'}, - {'default:wood', 'default:stick'}, - {'', 'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:axe_stone', - recipe = { - {'default:cobble', 'default:cobble'}, - {'default:cobble', 'default:stick'}, - {'', 'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:axe_steel', - recipe = { - {'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:stick'}, - {'', 'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:sword_wood', - recipe = { - {'default:wood'}, - {'default:wood'}, - {'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:sword_stone', - recipe = { - {'default:cobble'}, - {'default:cobble'}, - {'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:sword_steel', - recipe = { - {'default:steel_ingot'}, - {'default:steel_ingot'}, - {'default:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:rail 15', - recipe = { - {'default:steel_ingot', '', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:stick', 'default:steel_ingot'}, - {'default:steel_ingot', '', 'default:steel_ingot'}, - } -}) - -minetest.register_craft({ - output = 'default:chest', - recipe = { - {'default:wood', 'default:wood', 'default:wood'}, - {'default:wood', '', 'default:wood'}, - {'default:wood', 'default:wood', 'default:wood'}, - } -}) - -minetest.register_craft({ - output = 'default:chest_locked', - recipe = { - {'default:wood', 'default:wood', 'default:wood'}, - {'default:wood', 'default:steel_ingot', 'default:wood'}, - {'default:wood', 'default:wood', 'default:wood'}, - } -}) - -minetest.register_craft({ - output = 'default:furnace', - recipe = { - {'default:cobble', 'default:cobble', 'default:cobble'}, - {'default:cobble', '', 'default:cobble'}, - {'default:cobble', 'default:cobble', 'default:cobble'}, - } -}) - -minetest.register_craft({ - output = 'default:steelblock', - recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - } -}) - -minetest.register_craft({ - output = 'default:sandstone', - recipe = { - {'default:sand', 'default:sand'}, - {'default:sand', 'default:sand'}, - } -}) - -minetest.register_craft({ - output = 'default:clay', - recipe = { - {'default:clay_lump', 'default:clay_lump'}, - {'default:clay_lump', 'default:clay_lump'}, - } -}) - -minetest.register_craft({ - output = 'default:brick', - recipe = { - {'default:clay_brick', 'default:clay_brick'}, - {'default:clay_brick', 'default:clay_brick'}, - } -}) - -minetest.register_craft({ - output = 'default:paper', - recipe = { - {'default:papyrus', 'default:papyrus', 'default:papyrus'}, - } -}) - -minetest.register_craft({ - output = 'default:book', - recipe = { - {'default:paper'}, - {'default:paper'}, - {'default:paper'}, - } -}) - -minetest.register_craft({ - output = 'default:bookshelf', - recipe = { - {'default:wood', 'default:wood', 'default:wood'}, - {'default:book', 'default:book', 'default:book'}, - {'default:wood', 'default:wood', 'default:wood'}, - } -}) - -minetest.register_craft({ - output = 'default:ladder', - recipe = { - {'default:stick', '', 'default:stick'}, - {'default:stick', 'default:stick', 'default:stick'}, - {'default:stick', '', 'default:stick'}, - } -}) - --- Tool repair -minetest.register_craft({ - type = "toolrepair", - additional_wear = -0.02, -}) - --- --- Cooking recipes --- - -minetest.register_craft({ - type = "cooking", - output = "default:glass", - recipe = "default:sand", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:coal_lump", - recipe = "default:tree", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:stone", - recipe = "default:cobble", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:steel_ingot", - recipe = "default:iron_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:clay_brick", - recipe = "default:clay_lump", -}) - --- --- Fuels --- - -minetest.register_craft({ - type = "fuel", - recipe = "default:tree", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:junglegrass", - burntime = 2, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:leaves", - burntime = 1, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:cactus", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:papyrus", - burntime = 1, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:bookshelf", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:fence_wood", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:ladder", - burntime = 5, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:wood", - burntime = 7, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:mese", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:lava_source", - burntime = 60, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:torch", - burntime = 4, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:sign_wall", - burntime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:chest", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:chest_locked", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:nyancat", - burntime = 1, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:nyancat_rainbow", - burntime = 1, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:sapling", - burntime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:apple", - burntime = 3, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:coal_lump", - burntime = 40, -}) - --- --- Node definitions --- - --- Default node sounds - -function default.node_sound_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="", gain=1.0} - table.dug = table.dug or - {name="default_dug_node", gain=1.0} - return table -end - -function default.node_sound_stone_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_hard_footstep", gain=0.2} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_dirt_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="", gain=0.5} - --table.dug = table.dug or - -- {name="default_dirt_break", gain=0.5} - table.place = table.place or - {name="default_grass_footstep", gain=0.5} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_sand_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_grass_footstep", gain=0.25} - --table.dug = table.dug or - -- {name="default_dirt_break", gain=0.25} - table.dug = table.dug or - {name="", gain=0.25} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_wood_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_hard_footstep", gain=0.3} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_leaves_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_grass_footstep", gain=0.25} - table.dig = table.dig or - {name="default_dig_crumbly", gain=0.4} - table.dug = table.dug or - {name="", gain=1.0} - default.node_sound_defaults(table) - return table -end - -function default.node_sound_glass_defaults(table) - table = table or {} - table.footstep = table.footstep or - {name="default_stone_footstep", gain=0.25} - table.dug = table.dug or - {name="default_break_glass", gain=1.0} - default.node_sound_defaults(table) - return table -end - --- Register nodes - -minetest.register_node("default:stone", { - description = "Stone", - tiles ={"default_stone.png"}, - groups = {cracky=3}, - drop = 'default:cobble', - legacy_mineral = true, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:stone_with_coal", { - description = "Stone with coal", - tiles ={"default_stone.png^default_mineral_coal.png"}, - groups = {cracky=3}, - drop = 'default:coal_lump', - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:stone_with_iron", { - description = "Stone with iron", - tiles ={"default_stone.png^default_mineral_iron.png"}, - groups = {cracky=3}, - drop = 'default:iron_lump', - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:dirt_with_grass", { - description = "Dirt with grass", - tiles ={"default_grass.png", "default_dirt.png", - {name = "default_dirt.png^default_grass_side.png", - tileable_vertical = false}}, - groups = {crumbly=3, soil=1}, - drop = 'default:dirt', - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.4}, - }), -}) - -minetest.register_node("default:dirt_with_grass_footsteps", { - description = "Dirt with grass and footsteps", - tiles ={"default_grass_footsteps.png", "default_dirt.png", - {name = "default_dirt.png^default_grass_side.png", - tileable_vertical = false}}, - groups = {crumbly=3, soil=1}, - drop = 'default:dirt', - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.4}, - }), -}) - -minetest.register_node("default:dirt", { - description = "Dirt", - tiles ={"default_dirt.png"}, - groups = {crumbly=3, soil=1}, - sounds = default.node_sound_dirt_defaults(), -}) - -minetest.register_node("default:sand", { - description = "Sand", - tiles ={"default_sand.png"}, - groups = {crumbly=3, falling_node=1}, - sounds = default.node_sound_sand_defaults(), -}) - -minetest.register_node("default:gravel", { - description = "Gravel", - tiles ={"default_gravel.png"}, - groups = {crumbly=2, falling_node=1}, - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_gravel_footstep", gain=0.45}, - }), -}) - -minetest.register_node("default:sandstone", { - description = "Sandstone", - tiles ={"default_sandstone.png"}, - groups = {crumbly=2,cracky=2}, - drop = 'default:sand', - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:clay", { - description = "Clay", - tiles ={"default_clay.png"}, - groups = {crumbly=3}, - drop = 'default:clay_lump 4', - sounds = default.node_sound_dirt_defaults({ - footstep = "", - }), -}) - -minetest.register_node("default:brick", { - description = "Brick", - tiles ={"default_brick.png"}, - is_ground_content = false, - groups = {cracky=3}, - drop = 'default:clay_brick 4', - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:tree", { - description = "Tree", - tiles ={"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, - is_ground_content = false, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:junglegrass", { - description = "Jungle Grass", - drawtype = "plantlike", - visual_scale = 1.3, - tiles ={"default_junglegrass.png"}, - inventory_image = "default_junglegrass.png", - wield_image = "default_junglegrass.png", - paramtype = "light", - walkable = false, - groups = {snappy=3,attached_node=1}, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("default:leaves", { - description = "Leaves", - drawtype = "allfaces_optional", - visual_scale = 1.3, - tiles ={"default_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy=3}, - drop = { - max_items = 1, - items = { - { - -- player will get sapling with 1/20 chance - items = {'default:sapling'}, - rarity = 20, - }, - { - -- player will get leaves only if he get no saplings, - -- this is because max_items is 1 - items = {'default:leaves'}, - } - } - }, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("default:cactus", { - description = "Cactus", - tiles ={"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"}, - groups = {snappy=2,choppy=3}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:papyrus", { - description = "Papyrus", - drawtype = "plantlike", - tiles ={"default_papyrus.png"}, - inventory_image = "default_papyrus.png", - wield_image = "default_papyrus.png", - paramtype = "light", - walkable = false, - groups = {snappy=3}, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("default:bookshelf", { - description = "Bookshelf", - tiles ={"default_wood.png", "default_wood.png", "default_bookshelf.png"}, - is_ground_content = false, - groups = {snappy=2,choppy=3,oddly_breakable_by_hand=2}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:glass", { - description = "Glass", - drawtype = "glasslike", - tiles ={"default_glass.png"}, - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3}, - sounds = default.node_sound_glass_defaults(), -}) - -minetest.register_node("default:fence_wood", { - description = "Wooden Fence", - drawtype = "fencelike", - tiles ={"default_wood.png"}, - inventory_image = "default_fence.png", - wield_image = "default_fence.png", - paramtype = "light", - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, - }, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:rail", { - description = "Rail", - drawtype = "raillike", - tiles ={"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"}, - inventory_image = "default_rail.png", - wield_image = "default_rail.png", - paramtype = "light", - is_ground_content = false, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, - }, - groups = {bendy=2,snappy=1,dig_immediate=2}, -}) - -minetest.register_node("default:ladder", { - description = "Ladder", - drawtype = "signlike", - tiles ={"default_ladder.png"}, - inventory_image = "default_ladder.png", - wield_image = "default_ladder.png", - paramtype = "light", - paramtype2 = "wallmounted", - is_ground_content = false, - walkable = false, - climbable = true, - selection_box = { - type = "wallmounted", - --wall_top = = - --wall_bottom = = - --wall_side = = - }, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3}, - legacy_wallmounted = true, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:wood", { - description = "Wood", - tiles ={"default_wood.png"}, - is_ground_content = false, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:mese", { - description = "Mese", - tiles ={"default_mese.png"}, - groups = {cracky=1,level=2}, - sounds = default.node_sound_defaults(), -}) - -minetest.register_node("default:cloud", { - description = "Cloud", - tiles ={"default_cloud.png"}, - is_ground_content = false, - sounds = default.node_sound_defaults(), -}) - -minetest.register_node("default:water_flowing", { - description = "Water (flowing)", - drawtype = "flowingliquid", - tiles = {"default_water.png"}, - special_tiles = { - {name = "default_water.png", backface_culling = false}, - {name = "default_water.png", backface_culling = true}, - }, - alpha = WATER_ALPHA, - paramtype = "light", - paramtype2 = "flowingliquid", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "default:water_flowing", - liquid_alternative_source = "default:water_source", - liquid_viscosity = WATER_VISC, - post_effect_color = {a = 64, r = 100, g = 100, b = 200}, - groups = {water = 3, liquid = 3}, -}) - -minetest.register_node("default:water_source", { - description = "Water", - drawtype = "liquid", - tiles = {"default_water.png"}, - special_tiles = { - -- New-style water source material (mostly unused) - {name = "default_water.png", backface_culling = false}, - }, - alpha = WATER_ALPHA, - paramtype = "light", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "default:water_flowing", - liquid_alternative_source = "default:water_source", - liquid_viscosity = WATER_VISC, - post_effect_color = {a = 64, r = 100, g = 100, b = 200}, - groups = {water = 3, liquid = 3}, -}) - -minetest.register_node("default:river_water_source", { - description = "River Water Source", - drawtype = "liquid", - tiles = {"default_river_water.png"}, - special_tiles = { - -- New-style water source material (mostly unused) - {name = "default_river_water.png", backface_culling = false}, - }, - alpha = 160, - paramtype = "light", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "default:river_water_flowing", - liquid_alternative_source = "default:river_water_source", - liquid_viscosity = 1, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a = 103, r = 30, g = 76, b = 90}, - groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1}, -}) - -minetest.register_node("default:river_water_flowing", { - description = "Flowing River Water", - drawtype = "flowingliquid", - tiles = {"default_river_water.png"}, - special_tiles = { - {name = "default_river_water.png", backface_culling = false}, - {name = "default_river_water.png", backface_culling = true}, - }, - alpha = 160, - paramtype = "light", - paramtype2 = "flowingliquid", - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drop = "", - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "default:river_water_flowing", - liquid_alternative_source = "default:river_water_source", - liquid_viscosity = 1, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a = 103, r = 30, g = 76, b = 90}, - groups = {water = 3, liquid = 3, puts_out_fire = 1, - not_in_creative_inventory = 1, cools_lava = 1}, -}) - -minetest.register_node("default:lava_flowing", { - description = "Lava (flowing)", - inventory_image = minetest.inventorycube("default_lava.png"), - drawtype = "flowingliquid", - tiles ={"default_lava.png"}, - special_tiles = { - { - image="default_lava_flowing_animated.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3} - }, - { - image="default_lava_flowing_animated.png", - backface_culling=true, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3} - }, - }, - paramtype = "light", - light_source = LIGHT_MAX - 1, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "default:lava_flowing", - liquid_alternative_source = "default:lava_source", - liquid_viscosity = LAVA_VISC, - damage_per_second = 4*2, - post_effect_color = {a=192, r=255, g=64, b=0}, - groups = {lava=3, liquid=2, hot=3}, -}) - -minetest.register_node("default:lava_source", { - description = "Lava", - inventory_image = minetest.inventorycube("default_lava.png"), - drawtype = "liquid", - --tiles ={"default_lava.png"}, - tiles = { - { - name = "default_lava_source_animated.png", - animation = {type="sheet_2d", frames_w=3, frames_h=2, frame_length=0.5} - } - }, - special_tiles = { - -- New-style lava source material (mostly unused) - {name="default_lava.png", backface_culling=false}, - }, - paramtype = "light", - light_source = LIGHT_MAX - 1, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "default:lava_flowing", - liquid_alternative_source = "default:lava_source", - liquid_viscosity = LAVA_VISC, - damage_per_second = 4*2, - post_effect_color = {a=192, r=255, g=64, b=0}, - groups = {lava=3, liquid=2, hot=3}, -}) - -minetest.register_node("default:torch", { - description = "Torch", - drawtype = "torchlike", - tiles ={"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"}, - inventory_image = "default_torch_on_floor.png", - wield_image = "default_torch_on_floor.png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - light_source = LIGHT_MAX-1, - selection_box = { - type = "wallmounted", - wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1}, - wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1}, - wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1}, - }, - groups = {choppy=2,dig_immediate=3,attached_node=1}, - legacy_wallmounted = true, - sounds = default.node_sound_defaults(), -}) - -minetest.register_node("default:sign_wall", { - description = "Sign", - drawtype = "signlike", - tiles ={"default_sign_wall.png"}, - inventory_image = "default_sign_wall.png", - wield_image = "default_sign_wall.png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - selection_box = { - type = "wallmounted", - --wall_top = - --wall_bottom = - --wall_side = - }, - groups = {choppy=2,dig_immediate=2,attached_node=1}, - legacy_wallmounted = true, - sounds = default.node_sound_defaults(), - on_construct = function(pos) - --local n = minetest.get_node(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", "field[text;;${text}]") - meta:set_string("infotext", "\"\"") - end, - on_receive_fields = function(pos, formname, fields, sender) - --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields)) - local meta = minetest.get_meta(pos) - fields.text = fields.text or "" - print((sender:get_player_name() or "").." wrote \""..fields.text.. - "\" to sign at "..minetest.pos_to_string(pos)) - meta:set_string("text", fields.text) - meta:set_string("infotext", '"'..fields.text..'"') - end, -}) - -minetest.register_node("default:chest", { - description = "Chest", - tiles ={"default_chest.png^[sheet:2x2:0,0", "default_chest.png^[sheet:2x2:0,0", - "default_chest.png^[sheet:2x2:1,0", "default_chest.png^[sheet:2x2:1,0", - "default_chest.png^[sheet:2x2:1,0", "default_chest.png^[sheet:2x2:0,1"}, - paramtype2 = "facedir", - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", - "size[8,9]".. - "list[current_name;main;0,0;8,4;]".. - "list[current_player;main;0,5;8,4;]" .. - "listring[]") - meta:set_string("infotext", "Chest") - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, -}) - -local function has_locked_chest_privilege(meta, player) - if player:get_player_name() ~= meta:get_string("owner") then - return false - end - return true -end - -minetest.register_node("default:chest_locked", { - description = "Locked Chest", - tiles ={"default_chest.png^[sheet:2x2:0,0", "default_chest.png^[sheet:2x2:0,0", - "default_chest.png^[sheet:2x2:1,0", "default_chest.png^[sheet:2x2:1,0", - "default_chest.png^[sheet:2x2:1,0", "default_chest.png^[sheet:2x2:1,1"}, - paramtype2 = "facedir", - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_wood_defaults(), - after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - local pname = - placer and placer:get_player_name() or "" - meta:set_string("owner", pname) - meta:set_string("infotext", "Locked Chest (owned by ".. - meta:get_string("owner")..")") - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", - "size[8,9]".. - "list[current_name;main;0,0;8,4;]".. - "list[current_player;main;0,5;8,4;]" .. - "listring[]") - meta:set_string("infotext", "Locked Chest") - meta:set_string("owner", "") - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - -- this is not really the intended usage but works for testing purposes: - meta:mark_as_private("owner") - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a locked chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return count - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a locked chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a locked chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return stack:get_count() - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in locked chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to locked chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from locked chest at "..minetest.pos_to_string(pos)) - end, -}) - -default.furnace_inactive_formspec = - "size[8,9]".. - "image[2,2;1,1;default_furnace_fire_bg.png]".. - "list[current_name;fuel;2,3;1,1;]".. - "list[current_name;src;2,1;1,1;]".. - "list[current_name;dst;5,1;2,2;]".. - "list[current_player;main;0,5;8,4;]" .. - "listring[current_name;dst]" .. - "listring[current_player;main]" .. - "listring[current_name;src]" .. - "listring[current_player;main]" - -minetest.register_node("default:furnace", { - description = "Furnace", - tiles ={"default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"}, - paramtype2 = "facedir", - groups = {cracky=2}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_stone_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", default.furnace_inactive_formspec) - meta:set_string("infotext", "Furnace") - local inv = meta:get_inventory() - inv:set_size("fuel", 1) - inv:set_size("src", 1) - inv:set_size("dst", 4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - if not inv:is_empty("fuel") then - return false - elseif not inv:is_empty("dst") then - return false - elseif not inv:is_empty("src") then - return false - end - return true - end, -}) - -minetest.register_node("default:furnace_active", { - description = "Furnace", - tiles ={"default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front_active.png"}, - paramtype2 = "facedir", - light_source = 8, - drop = "default:furnace", - groups = {cracky=2}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_stone_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", default.furnace_inactive_formspec) - meta:set_string("infotext", "Furnace"); - local inv = meta:get_inventory() - inv:set_size("fuel", 1) - inv:set_size("src", 1) - inv:set_size("dst", 4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - if not inv:is_empty("fuel") then - return false - elseif not inv:is_empty("dst") then - return false - elseif not inv:is_empty("src") then - return false - end - return true - end, -}) - -function swap_node(pos,name) - local node = minetest.get_node(pos) - if node.name == name then - return - end - node.name = name - minetest.swap_node(pos, node) -end - -minetest.register_abm({ - nodenames = {"default:furnace","default:furnace_active"}, - interval = 1.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = minetest.get_meta(pos) - for i, name in ipairs({ - "fuel_totaltime", - "fuel_time", - "src_totaltime", - "src_time" - }) do - if meta:get_string(name) == "" then - meta:set_float(name, 0.0) - end - end - - local inv = meta:get_inventory() - - local srclist = inv:get_list("src") - local cooked = nil - - if srclist then - cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - end - - local was_active = false - - if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then - was_active = true - meta:set_float("fuel_time", meta:get_float("fuel_time") + 1) - meta:set_float("src_time", meta:get_float("src_time") + 1) - if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then - -- check if there's room for output in "dst" list - if inv:room_for_item("dst",cooked.item) then - -- Put result in "dst" list - inv:add_item("dst", cooked.item) - -- take stuff from "src" list - srcstack = inv:get_stack("src", 1) - srcstack:take_item() - inv:set_stack("src", 1, srcstack) - else - print("Could not insert '"..cooked.item:to_string().."'") - end - meta:set_string("src_time", 0) - end - end - - if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then - local percent = math.floor(meta:get_float("fuel_time") / - meta:get_float("fuel_totaltime") * 100) - meta:set_string("infotext","Furnace active: "..percent.."%") - swap_node(pos,"default:furnace_active") - meta:set_string("formspec", - "size[8,9]".. - "image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:".. - (100-percent)..":default_furnace_fire_fg.png]".. - "list[current_name;fuel;2,3;1,1;]".. - "list[current_name;src;2,1;1,1;]".. - "list[current_name;dst;5,1;2,2;]".. - "list[current_player;main;0,5;8,4;]" .. - "listring[current_name;dst]" .. - "listring[current_player;main]" .. - "listring[current_name;src]" .. - "listring[current_player;main]") - return - end - - local fuel = nil - local cooked = nil - local fuellist = inv:get_list("fuel") - local srclist = inv:get_list("src") - - if srclist then - cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - end - if fuellist then - fuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) - end - - if fuel.time <= 0 then - meta:set_string("infotext","Furnace out of fuel") - swap_node(pos,"default:furnace") - meta:set_string("formspec", default.furnace_inactive_formspec) - return - end - - if cooked.item:is_empty() then - if was_active then - meta:set_string("infotext","Furnace is empty") - swap_node(pos,"default:furnace") - meta:set_string("formspec", default.furnace_inactive_formspec) - end - return - end - - meta:set_string("fuel_totaltime", fuel.time) - meta:set_string("fuel_time", 0) - - local stack = inv:get_stack("fuel", 1) - stack:take_item() - inv:set_stack("fuel", 1, stack) - end, -}) - -minetest.register_node("default:cobble", { - description = "Cobble", - tiles ={"default_cobble.png"}, - is_ground_content = false, - groups = {cracky=3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:mossycobble", { - description = "Mossy Cobble", - tiles ={"default_mossycobble.png"}, - is_ground_content = false, - groups = {cracky=3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:steelblock", { - description = "Steel Block", - tiles ={"default_steel_block.png"}, - is_ground_content = false, - groups = {snappy=1,bendy=2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:nyancat", { - description = "Nyancat", - tiles ={"default_nc_side.png", "default_nc_side.png", "default_nc_side.png", - "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"}, - inventory_image = "default_nc_front.png", - paramtype2 = "facedir", - groups = {cracky=2}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_defaults(), -}) - -minetest.register_node("default:nyancat_rainbow", { - description = "Nyancat Rainbow", - tiles ={"default_nc_rb.png"}, - inventory_image = "default_nc_rb.png", - is_ground_content = false, - groups = {cracky=2}, - sounds = default.node_sound_defaults(), -}) - -minetest.register_node("default:sapling", { - description = "Sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles ={"default_sapling.png"}, - inventory_image = "default_sapling.png", - wield_image = "default_sapling.png", - paramtype = "light", - walkable = false, - groups = {snappy=2,dig_immediate=3,attached_node=1}, - sounds = default.node_sound_defaults(), -}) - -minetest.register_node("default:apple", { - description = "Apple", - drawtype = "plantlike", - visual_scale = 1.0, - tiles ={"default_apple.png"}, - inventory_image = "default_apple.png", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - walkable = false, - groups = {fleshy=3,dig_immediate=3}, - on_use = minetest.item_eat(4), - sounds = default.node_sound_defaults(), -}) - --- --- Grow tree function --- - -local c_air = minetest.get_content_id("air") -local c_ignore = minetest.get_content_id("ignore") -local c_tree = minetest.get_content_id("default:tree") -local c_leaves = minetest.get_content_id("default:leaves") -local c_apple = minetest.get_content_id("default:apple") -function default.grow_tree(data, a, pos, is_apple_tree, seed) - --[[ - NOTE: Tree-placing code is currently duplicated in the engine - and in games that have saplings; both are deprecated but not - replaced yet - ]]-- - local pr = PseudoRandom(seed) - local th = pr:next(4, 5) - local x, y, z = pos.x, pos.y, pos.z - for yy = y, y+th-1 do - local vi = a:index(x, yy, z) - if a:contains(x, yy, z) and (data[vi] == c_air or yy == y) then - data[vi] = c_tree - end - end - y = y+th-1 -- (x, y, z) is now last piece of trunk - local leaves_a = VoxelArea:new{MinEdge={x=-2, y=-1, z=-2}, MaxEdge={x=2, y=2, z=2}} - local leaves_buffer = {} - - -- Force leaves near the trunk - local d = 1 - for xi = -d, d do - for yi = -d, d do - for zi = -d, d do - leaves_buffer[leaves_a:index(xi, yi, zi)] = true - end - end - end - - -- Add leaves randomly - for iii = 1, 8 do - local d = 1 - local xx = pr:next(leaves_a.MinEdge.x, leaves_a.MaxEdge.x - d) - local yy = pr:next(leaves_a.MinEdge.y, leaves_a.MaxEdge.y - d) - local zz = pr:next(leaves_a.MinEdge.z, leaves_a.MaxEdge.z - d) - - for xi = 0, d do - for yi = 0, d do - for zi = 0, d do - leaves_buffer[leaves_a:index(xx+xi, yy+yi, zz+zi)] = true - end - end - end - end - - -- Add the leaves - for xi = leaves_a.MinEdge.x, leaves_a.MaxEdge.x do - for yi = leaves_a.MinEdge.y, leaves_a.MaxEdge.y do - for zi = leaves_a.MinEdge.z, leaves_a.MaxEdge.z do - if a:contains(x+xi, y+yi, z+zi) then - local vi = a:index(x+xi, y+yi, z+zi) - if data[vi] == c_air or data[vi] == c_ignore then - if leaves_buffer[leaves_a:index(xi, yi, zi)] then - if is_apple_tree and pr:next(1, 100) <= 10 then - data[vi] = c_apple - else - data[vi] = c_leaves - end - end - end - end - end - end - end -end - --- --- ABMs --- - -minetest.register_abm({ - nodenames = {"default:sapling"}, - interval = 10, - chance = 50, - action = function(pos, node) - if minetest.get_item_group(minetest.get_node( - {x = pos.x, y = pos.y - 1, z = pos.z}).name, "soil") == 0 then - return - end - print("A sapling grows into a tree at "..minetest.pos_to_string(pos)) - local vm = minetest.get_voxel_manip() - local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16}) - local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp} - local data = vm:get_data() - default.grow_tree(data, a, pos, math.random(1, 4) == 1, math.random(1,100000)) - vm:set_data(data) - vm:write_to_map(data) - vm:update_map() - end -}) - -minetest.register_abm({ - nodenames = {"default:dirt"}, - interval = 2, - chance = 200, - action = function(pos, node) - local above = {x=pos.x, y=pos.y+1, z=pos.z} - local name = minetest.get_node(above).name - local nodedef = minetest.registered_nodes[name] - if nodedef and (nodedef.sunlight_propagates or nodedef.paramtype == "light") - and nodedef.liquidtype == "none" - and (minetest.get_node_light(above) or 0) >= 13 then - if name == "default:snow" or name == "default:snowblock" then - minetest.set_node(pos, {name = "default:dirt_with_snow"}) - else - minetest.set_node(pos, {name = "default:dirt_with_grass"}) - end - end - end -}) - -minetest.register_abm({ - nodenames = {"default:dirt_with_grass"}, - interval = 2, - chance = 20, - action = function(pos, node) - local above = {x=pos.x, y=pos.y+1, z=pos.z} - local name = minetest.get_node(above).name - local nodedef = minetest.registered_nodes[name] - if name ~= "ignore" and nodedef - and not ((nodedef.sunlight_propagates or nodedef.paramtype == "light") - and nodedef.liquidtype == "none") then - minetest.set_node(pos, {name = "default:dirt"}) - end - end -}) - --- --- Crafting items --- - -minetest.register_craftitem("default:stick", { - description = "Stick", - inventory_image = "default_stick.png", -}) - -minetest.register_craftitem("default:paper", { - description = "Paper", - inventory_image = "default_paper.png", -}) - -minetest.register_craftitem("default:book", { - description = "Book", - inventory_image = "default_book.png", -}) - -minetest.register_craftitem("default:coal_lump", { - description = "Lump of coal", - inventory_image = "default_coal_lump.png", -}) - -minetest.register_craftitem("default:iron_lump", { - description = "Lump of iron", - inventory_image = "default_iron_lump.png", -}) - -minetest.register_craftitem("default:clay_lump", { - description = "Lump of clay", - inventory_image = "default_clay_lump.png", -}) - -minetest.register_craftitem("default:steel_ingot", { - description = "Steel ingot", - inventory_image = "default_steel_ingot.png", -}) - -minetest.register_craftitem("default:clay_brick", { - description = "Clay brick", - inventory_image = "default_steel_ingot.png", - inventory_image = "default_clay_brick.png", -}) - -minetest.register_craftitem("default:scorched_stuff", { - description = "Scorched stuff", - inventory_image = "default_scorched_stuff.png", -}) - --- --- Support old code --- - -function default.spawn_falling_node(p, nodename) - spawn_falling_node(p, nodename) -end - --- Horrible stuff to support old code --- Don't use this and never do what this does, it's completely wrong! --- (More specifically, the client and the C++ code doesn't get the group) -function default.register_falling_node(nodename, texture) - minetest.log("error", debug.traceback()) - minetest.log('error', "WARNING: default.register_falling_node is deprecated") - if minetest.registered_nodes[nodename] then - minetest.registered_nodes[nodename].groups.falling_node = 1 - end -end - --- --- Global callbacks --- - --- Global environment step function -function on_step(dtime) - -- print("on_step") -end -minetest.register_globalstep(on_step) - -function on_placenode(p, node) - --print("on_placenode") -end -minetest.register_on_placenode(on_placenode) - -function on_dignode(p, node) - --print("on_dignode") -end -minetest.register_on_dignode(on_dignode) - -function on_punchnode(p, node) -end -minetest.register_on_punchnode(on_punchnode) diff -Nru minetest-5.2.0/games/minimal/mods/default/mapgen.lua minetest-5.3.0/games/minimal/mods/default/mapgen.lua --- minetest-5.2.0/games/minimal/mods/default/mapgen.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/default/mapgen.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,137 +0,0 @@ --- --- Aliases for map generator outputs --- - - -minetest.register_alias("mapgen_stone", "default:stone") -minetest.register_alias("mapgen_dirt", "default:dirt") -minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass") -minetest.register_alias("mapgen_sand", "default:sand") -minetest.register_alias("mapgen_water_source", "default:water_source") -minetest.register_alias("mapgen_river_water_source", "default:river_water_source") -minetest.register_alias("mapgen_lava_source", "default:lava_source") -minetest.register_alias("mapgen_gravel", "default:gravel") - -minetest.register_alias("mapgen_tree", "default:tree") -minetest.register_alias("mapgen_leaves", "default:leaves") -minetest.register_alias("mapgen_apple", "default:apple") -minetest.register_alias("mapgen_junglegrass", "default:junglegrass") - -minetest.register_alias("mapgen_cobble", "default:cobble") -minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") -minetest.register_alias("mapgen_mossycobble", "default:mossycobble") - - --- --- Ore generation --- - - --- Blob ore first to avoid other ores inside blobs - -minetest.register_ore({ - ore_type = "blob", - ore = "default:clay", - wherein = {"default:sand"}, - clust_scarcity = 24*24*24, - clust_size = 7, - y_min = -15, - y_max = 0, - noise_threshold = 0, - noise_params = { - offset=0.35, - scale=0.2, - spread={x=5, y=5, z=5}, - seed=-316, - octaves=1, - persist=0.5 - }, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_coal", - wherein = "default:stone", - clust_scarcity = 8*8*8, - clust_num_ores = 8, - clust_size = 3, - y_min = -31000, - y_max = 64, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_iron", - wherein = "default:stone", - clust_scarcity = 12*12*12, - clust_num_ores = 3, - clust_size = 2, - y_min = -15, - y_max = 2, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_iron", - wherein = "default:stone", - clust_scarcity = 9*9*9, - clust_num_ores = 5, - clust_size = 3, - y_min = -63, - y_max = -16, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_iron", - wherein = "default:stone", - clust_scarcity = 7*7*7, - clust_num_ores = 5, - clust_size = 3, - y_min = -31000, - y_max = -64, -}) - - --- --- Register biomes for biome API --- - - -minetest.clear_registered_biomes() -minetest.clear_registered_decorations() - -minetest.register_biome({ - name = "default:grassland", - --node_dust = "", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 1, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - y_min = 5, - y_max = 31000, - heat_point = 50, - humidity_point = 50, -}) - -minetest.register_biome({ - name = "default:grassland_ocean", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 2, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - y_min = -31000, - y_max = 4, - heat_point = 50, - humidity_point = 50, -}) - diff -Nru minetest-5.2.0/games/minimal/mods/default/mod.conf minetest-5.3.0/games/minimal/mods/default/mod.conf --- minetest-5.2.0/games/minimal/mods/default/mod.conf 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/default/mod.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -name = default -description = Minimal default, adds basic nodes Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/sounds/default_grass_footstep.1.ogg and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/sounds/default_grass_footstep.1.ogg differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_apple.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_apple.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_book.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_book.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_bookshelf.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_bookshelf.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_brick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_brick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_cactus_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_cactus_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_cactus_top.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_cactus_top.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_chest.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_chest.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_clay_brick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_clay_brick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_clay_lump.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_clay_lump.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_clay.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_clay.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_cloud.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_cloud.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_coal_lump.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_coal_lump.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_cobble.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_cobble.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_dirt.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_dirt.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_fence.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_fence.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_furnace_fire_bg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_furnace_fire_bg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_furnace_fire_fg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_furnace_fire_fg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_furnace_front_active.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_furnace_front_active.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_furnace_front.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_furnace_front.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_furnace_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_furnace_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_glass.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_glass.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_grass_footsteps.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_grass_footsteps.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_grass.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_grass.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_grass_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_grass_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_gravel.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_gravel.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_iron_lump.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_iron_lump.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_junglegrass.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_junglegrass.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_ladder.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_ladder.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_lava_flowing_animated.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_lava_flowing_animated.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_lava.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_lava.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_lava_source_animated.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_lava_source_animated.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_leaves.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_leaves.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_mese.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_mese.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_mineral_coal.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_mineral_coal.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_mineral_iron.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_mineral_iron.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_mossycobble.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_mossycobble.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_nc_back.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_nc_back.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_nc_front.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_nc_front.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_nc_rb.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_nc_rb.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_nc_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_nc_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_paper.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_paper.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_papyrus.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_papyrus.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_rail_crossing.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_rail_crossing.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_rail_curved.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_rail_curved.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_rail.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_rail.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_rail_t_junction.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_rail_t_junction.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_river_water.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_river_water.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_sand.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_sand.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_sandstone.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_sandstone.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_sapling.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_sapling.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_scorched_stuff.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_scorched_stuff.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_sign_wall.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_sign_wall.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_steel_block.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_steel_block.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_steel_ingot.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_steel_ingot.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_stick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_stick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_stone.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_stone.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tnt_bottom.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tnt_bottom.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tnt_side.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tnt_side.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tnt_top.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tnt_top.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_mesepick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_mesepick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_steelaxe.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_steelaxe.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_steelpick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_steelpick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_steelshovel.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_steelshovel.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_steelsword.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_steelsword.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_stoneaxe.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_stoneaxe.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_stonepick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_stonepick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_stoneshovel.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_stoneshovel.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_stonesword.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_stonesword.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_woodaxe.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_woodaxe.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_woodpick.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_woodpick.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_woodshovel.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_woodshovel.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tool_woodsword.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tool_woodsword.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_torch_on_ceiling.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_torch_on_ceiling.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_torch_on_floor.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_torch_on_floor.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_torch.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_torch.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tree.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tree.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_tree_top.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_tree_top.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_water.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_water.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/default_wood.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/default_wood.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/default/textures/treeprop.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/default/textures/treeprop.png differ diff -Nru minetest-5.2.0/games/minimal/mods/experimental/init.lua minetest-5.3.0/games/minimal/mods/experimental/init.lua --- minetest-5.2.0/games/minimal/mods/experimental/init.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/experimental/init.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,822 +0,0 @@ --- --- Experimental things --- - -dofile(minetest.get_modpath("experimental").."/modchannels.lua") - --- For testing random stuff - -experimental = {} - -function experimental.print_to_everything(msg) - minetest.log("action", msg) - minetest.chat_send_all(msg) -end - ---[[ -experimental.player_visual_index = 0 -function switch_player_visual() - for _, obj in pairs(minetest.get_connected_players()) do - if experimental.player_visual_index == 0 then - obj:set_properties({visual="upright_sprite"}) - else - obj:set_properties({visual="cube"}) - end - end - experimental.player_visual_index = (experimental.player_visual_index + 1) % 2 - minetest.after(1.0, switch_player_visual) -end -minetest.after(1.0, switch_player_visual) -]] - -minetest.register_node("experimental:soundblock", { - tiles = {"unknown_node.png", "default_tnt_bottom.png", - "default_tnt_side.png", "default_tnt_side.png", - "default_tnt_side.png", "default_tnt_side.png"}, - inventory_image = minetest.inventorycube("unknown_node.png", - "default_tnt_side.png", "default_tnt_side.png"), - groups = {dig_immediate=3}, -}) - -minetest.register_alias("sb", "experimental:soundblock") - -minetest.register_abm({ - nodenames = {"experimental:soundblock"}, - interval = 1, - chance = 1, - action = function(p0, node, _, _) - minetest.sound_play("default_grass_footstep", {pos=p0, gain=0.5}) - end, -}) - ---[[ -stepsound = -1 -function test_sound() - print("test_sound") - stepsound = minetest.sound_play("default_grass_footstep", {gain=1.0}) - minetest.after(2.0, test_sound) - --minetest.after(0.1, test_sound_stop) -end -function test_sound_stop() - print("test_sound_stop") - minetest.sound_stop(stepsound) - minetest.after(2.0, test_sound) -end -test_sound() ---]] - -function on_step(dtime) - -- print("experimental on_step") - --[[ - objs = minetest.get_objects_inside_radius({x=0,y=0,z=0}, 10) - for k, obj in pairs(objs) do - name = obj:get_player_name() - if name then - print(name.." at "..dump(obj:getpos())) - print(name.." dir: "..dump(obj:get_look_dir())) - print(name.." pitch: "..dump(obj:get_look_pitch())) - print(name.." yaw: "..dump(obj:get_look_yaw())) - else - print("Some object at "..dump(obj:getpos())) - end - end - --]] - --[[ - if experimental.t1 == nil then - experimental.t1 = 0 - end - experimental.t1 = experimental.t1 + dtime - if experimental.t1 >= 2 then - experimental.t1 = experimental.t1 - 2 - minetest.log("verbose", "time of day is "..minetest.get_timeofday()) - if experimental.day then - minetest.log("verbose", "forcing day->night") - experimental.day = false - minetest.set_timeofday(0.0) - else - minetest.log("verbose", "forcing night->day") - experimental.day = true - minetest.set_timeofday(0.5) - end - minetest.log("verbose", "time of day is "..minetest.get_timeofday()) - end - --]] -end -minetest.register_globalstep(on_step) - --- --- Random stuff --- - --- --- TNT (not functional) --- - -minetest.register_craft({ - output = 'experimental:tnt', - recipe = { - {'default:wood'}, - {'default:coal_lump'}, - {'default:wood'} - } -}) - -minetest.register_node("experimental:tnt", { - tiles = {"default_tnt_top.png", "default_tnt_bottom.png", - "default_tnt_side.png", "default_tnt_side.png", - "default_tnt_side.png", "default_tnt_side.png"}, - inventory_image = minetest.inventorycube("default_tnt_top.png", - "default_tnt_side.png", "default_tnt_side.png"), - drop = '', -- Get nothing - material = { - diggability = "not", - }, -}) - -minetest.register_on_punchnode(function(p, node) - if node.name == "experimental:tnt" then - minetest.remove_node(p) - minetest.add_entity(p, "experimental:tnt") - minetest.check_for_falling(p) - end -end) - -local TNT = { - -- Static definition - physical = true, -- Collides with things - -- weight = 5, - collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, - visual = "cube", - textures = {"default_tnt_top.png", "default_tnt_bottom.png", - "default_tnt_side.png", "default_tnt_side.png", - "default_tnt_side.png", "default_tnt_side.png"}, - -- Initial value for our timer - timer = 0, - -- Number of punches required to defuse - health = 1, - blinktimer = 0, - blinkstatus = true, -} - --- Called when a TNT object is created -function TNT:on_activate(staticdata) - print("TNT:on_activate()") - self.object:setvelocity({x=0, y=4, z=0}) - self.object:setacceleration({x=0, y=-10, z=0}) - self.object:settexturemod("^[brighten") - self.object:set_armor_groups({immortal=1}) -end - --- Called periodically -function TNT:on_step(dtime) - --print("TNT:on_step()") - self.timer = self.timer + dtime - self.blinktimer = self.blinktimer + dtime - if self.blinktimer > 0.5 then - self.blinktimer = self.blinktimer - 0.5 - if self.blinkstatus then - self.object:settexturemod("") - else - self.object:settexturemod("^[brighten") - end - self.blinkstatus = not self.blinkstatus - end -end - --- Called when object is punched -function TNT:on_punch(hitter) - print("TNT:on_punch()") - self.health = self.health - 1 - if self.health <= 0 then - self.object:remove() - hitter:get_inventory():add_item("main", "experimental:tnt") - --hitter:set_hp(hitter:get_hp() - 1) - end -end - --- Called when object is right-clicked -function TNT:on_rightclick(clicker) - --pos = self.object:getpos() - --pos = {x=pos.x, y=pos.y+0.1, z=pos.z} - --self.object:moveto(pos, false) -end - ---print("TNT dump: "..dump(TNT)) ---print("Registering TNT"); -minetest.register_entity("experimental:tnt", TNT) - --- Add TNT's old name also -minetest.register_alias("TNT", "experimental:tnt") - --- --- The dummyball! --- - -minetest.register_entity("experimental:dummyball", { - initial_properties = { - hp_max = 20, - physical = false, - collisionbox = {-0.4,-0.4,-0.4, 0.4,0.4,0.4}, - visual = "sprite", - visual_size = {x=1, y=1}, - textures = {"experimental_dummyball.png"}, - spritediv = {x=1, y=3}, - initial_sprite_basepos = {x=0, y=0}, - }, - - phase = 0, - phasetimer = 0, - - on_activate = function(self, staticdata) - minetest.log("action", "Dummyball activated!") - end, - - on_step = function(self, dtime) - self.phasetimer = self.phasetimer + dtime - if self.phasetimer > 2.0 then - self.phasetimer = self.phasetimer - 2.0 - self.phase = self.phase + 1 - if self.phase >= 3 then - self.phase = 0 - end - self.object:setsprite({x=0, y=self.phase}) - phasearmor = { - [0]={cracky=3}, - [1]={crumbly=3}, - [2]={fleshy=3} - } - self.object:set_armor_groups(phasearmor[self.phase]) - end - end, - - on_punch = function(self, hitter) - end, -}) - -minetest.register_on_chat_message(function(name, message) - local cmd = "/dummyball" - if message:sub(0, #cmd) == cmd then - count = tonumber(message:sub(#cmd+1)) or 1 - if not minetest.get_player_privs(name)["give"] then - minetest.chat_send_player(name, "you don't have permission to spawn (give)") - return true -- Handled chat message - end - if not minetest.get_player_privs(name)["interact"] then - minetest.chat_send_player(name, "you don't have permission to interact") - return true -- Handled chat message - end - if count >= 2 and not minetest.get_player_privs(name)["server"] then - minetest.chat_send_player(name, "you don't have " .. - "permission to spawn multiple " .. - "dummyballs (server)") - return true -- Handled chat message - end - local player = minetest.get_player_by_name(name) - if player == nil then - print("Unable to spawn entity, player is nil") - return true -- Handled chat message - end - local entityname = "experimental:dummyball" - local p = player:getpos() - p.y = p.y + 1 - for i = 1,count do - minetest.add_entity(p, entityname) - end - minetest.chat_send_player(name, '"'..entityname - ..'" spawned '..tostring(count)..' time(s).'); - return true -- Handled chat message - end -end) - --- --- A test entity for testing animated and yaw-modulated sprites --- - -minetest.register_entity("experimental:testentity", { - -- Static definition - physical = true, -- Collides with things - -- weight = 5, - collisionbox = {-0.7,-1.35,-0.7, 0.7,1.0,0.7}, - --collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, - visual = "sprite", - visual_size = {x=2, y=3}, - textures = {"dungeon_master.png^[makealpha:128,0,0^[makealpha:128,128,0"}, - spritediv = {x=6, y=5}, - initial_sprite_basepos = {x=0, y=0}, - - on_activate = function(self, staticdata) - print("testentity.on_activate") - self.object:setsprite({x=0,y=0}, 1, 0, true) - --self.object:setsprite({x=0,y=0}, 4, 0.3, true) - - -- Set gravity - self.object:setacceleration({x=0, y=-10, z=0}) - -- Jump a bit upwards - self.object:setvelocity({x=0, y=10, z=0}) - end, - - on_punch = function(self, hitter) - self.object:remove() - hitter:add_to_inventory('craft testobject1 1') - end, - on_death = function(self, killer) - print("testentity.on_death") - end -}) - --- --- More random stuff --- - -minetest.register_on_respawnplayer(function(player) - print("on_respawnplayer") - -- player:setpos({x=0, y=30, z=0}) - -- return true -end) - -minetest.register_on_generated(function(minp, maxp) - --print("on_generated: minp="..dump(minp).." maxp="..dump(maxp)) - --cp = {x=(minp.x+maxp.x)/2, y=(minp.y+maxp.y)/2, z=(minp.z+maxp.z)/2} - --minetest.add_node(cp, {name="sand"}) -end) - --- Example setting get ---print("setting max_users = " .. dump(minetest.setting_get("max_users"))) ---print("setting asdf = " .. dump(minetest.setting_get("asdf"))) - -minetest.register_on_chat_message(function(name, message) - --[[print("on_chat_message: name="..dump(name).." message="..dump(message)) - local cmd = "/testcommand" - if message:sub(0, #cmd) == cmd then - print(cmd.." invoked") - return true - end - local cmd = "/help" - if message:sub(0, #cmd) == cmd then - print("script-overridden help command") - minetest.chat_send_all("script-overridden help command") - return true - end]] -end) - --- Grow papyrus on TNT every 10 seconds ---[[minetest.register_abm({ - nodenames = {"TNT"}, - interval = 10.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - print("TNT ABM action") - pos.y = pos.y + 1 - minetest.add_node(pos, {name="papyrus"}) - end, -})]] - --- Replace texts of alls signs with "foo" every 10 seconds ---[[minetest.register_abm({ - nodenames = {"sign_wall"}, - interval = 10.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - print("ABM: Sign text changed") - local meta = minetest.get_meta(pos) - meta:set_text("foo") - end, -})]] - ---[[local ncpos = nil -local ncq = 1 -local ncstuff = { - {2, 1, 0, 3}, {3, 0, 1, 2}, {4, -1, 0, 1}, {5, -1, 0, 1}, {6, 0, -1, 0}, - {7, 0, -1, 0}, {8, 1, 0, 3}, {9, 1, 0, 3}, {10, 1, 0, 3}, {11, 0, 1, 2}, - {12, 0, 1, 2}, {13, 0, 1, 2}, {14, -1, 0, 1}, {15, -1, 0, 1}, {16, -1, 0, 1}, - {17, -1, 0, 1}, {18, 0, -1, 0}, {19, 0, -1, 0}, {20, 0, -1, 0}, {21, 0, -1, 0}, - {22, 1, 0, 3}, {23, 1, 0, 3}, {24, 1, 0, 3}, {25, 1, 0, 3}, {10, 0, 1, 2} -} -local ncold = {} -local nctime = nil - -minetest.register_abm({ - nodenames = {"dirt_with_grass"}, - interval = 100000.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if ncpos ~= nil then - return - end - - if pos.x % 16 ~= 8 or pos.z % 16 ~= 8 then - return - end - - pos.y = pos.y + 1 - n = minetest.get_node(pos) - print(dump(n)) - if n.name ~= "air" then - return - end - - pos.y = pos.y + 2 - ncpos = pos - nctime = os.clock() - minetest.add_node(ncpos, {name="nyancat"}) - end -}) - -minetest.register_abm({ - nodenames = {"nyancat"}, - interval = 1.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if ncpos == nil then - return - end - if pos.x == ncpos.x and pos.y == ncpos.y and pos.z == ncpos.z then - clock = os.clock() - if clock - nctime < 0.1 then - return - end - nctime = clock - - s0 = ncstuff[ncq] - ncq = s0[1] - s1 = ncstuff[ncq] - p0 = pos - p1 = {x = p0.x + s0[2], y = p0.y, z = p0.z + s0[3]} - p2 = {x = p1.x + s1[2], y = p1.y, z = p1.z + s1[3]} - table.insert(ncold, 1, p0) - while #ncold >= 10 do - minetest.add_node(ncold[#ncold], {name="air"}) - table.remove(ncold, #ncold) - end - minetest.add_node(p0, {name="nyancat_rainbow"}) - minetest.add_node(p1, {name="nyancat", param1=s0[4]}) - minetest.add_node(p2, {name="air"}) - ncpos = p1 - end - end, -})--]] - -minetest.register_node("experimental:tester_node_1", { - description = "Tester Node 1 (construct/destruct/timer)", - tiles = {"wieldhand.png"}, - groups = {oddly_breakable_by_hand=2}, - sounds = default.node_sound_wood_defaults(), - -- This was known to cause a bug in minetest.item_place_node() when used - -- via minetest.place_node(), causing a placer with no position - paramtype2 = "facedir", - - on_construct = function(pos) - experimental.print_to_everything("experimental:tester_node_1:on_construct("..minetest.pos_to_string(pos)..")") - local meta = minetest.get_meta(pos) - meta:set_string("mine", "test") - local timer = minetest.get_node_timer(pos) - timer:start(4, 3) - end, - - after_place_node = function(pos, placer) - experimental.print_to_everything("experimental:tester_node_1:after_place_node("..minetest.pos_to_string(pos)..")") - local meta = minetest.get_meta(pos) - if meta:get_string("mine") == "test" then - experimental.print_to_everything("correct metadata found") - else - experimental.print_to_everything("incorrect metadata found") - end - end, - - on_destruct = function(pos) - experimental.print_to_everything("experimental:tester_node_1:on_destruct("..minetest.pos_to_string(pos)..")") - end, - - after_destruct = function(pos) - experimental.print_to_everything("experimental:tester_node_1:after_destruct("..minetest.pos_to_string(pos)..")") - end, - - after_dig_node = function(pos, oldnode, oldmetadata, digger) - experimental.print_to_everything("experimental:tester_node_1:after_dig_node("..minetest.pos_to_string(pos)..")") - end, - - on_timer = function(pos, elapsed) - experimental.print_to_everything("on_timer(): elapsed="..dump(elapsed)) - return true - end, -}) - -minetest.register_node("experimental:tiled", { - description = "Tiled stone", - tiles = {{ - name = "experimental_tiled.png", - align_style = "world", - scale = 8, - }}, - groups = {cracky=2}, -}) - -stairs.register_stair_and_slab("tiled_n", "experimental:tiled", - {cracky=2}, - {{name="experimental_tiled.png", align_style="node", scale=8}}, - "Tiled stair (node-aligned)", - "Tiled slab (node-aligned)") - -stairs.register_stair_and_slab("tiled", "experimantal:tiled", - {cracky=2}, - {{name="experimental_tiled.png", align_style="world", scale=8}}, - "Tiled stair", - "Tiled slab") - -minetest.register_craft({ - output = 'experimental:tiled 4', - recipe = { - {'default:cobble', '', 'default:cobble'}, - {'', '', ''}, - {'default:cobble', '', 'default:cobble'}, - } -}) - -minetest.register_craft({ - output = 'stairs:stair_tiled', - recipe = {{'stairs:stair_tiled_n'}} -}) - -minetest.register_craft({ - output = 'stairs:stair_tiled_n', - recipe = {{'stairs:stair_tiled'}} -}) - -minetest.register_craft({ - output = 'stairs:slab_tiled', - recipe = {{'stairs:slab_tiled_n'}} -}) - -minetest.register_craft({ - output = 'stairs:slab_tiled_n', - recipe = {{'stairs:slab_tiled'}} -}) - -minetest.register_craftitem("experimental:tester_tool_1", { - description = "Tester Tool 1", - inventory_image = "experimental_tester_tool_1.png", - on_use = function(itemstack, user, pointed_thing) - --print(dump(pointed_thing)) - if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - if node.name == "experimental:tester_node_1" or node.name == "default:chest" then - local p = pointed_thing.under - minetest.log("action", "Tester tool used at "..minetest.pos_to_string(p)) - if node.name == "experimental:tester_node_1" then - minetest.dig_node(p) - else - minetest.get_meta(p):mark_as_private({"infotext", "formspec"}) - minetest.chat_send_player(user:get_player_name(), "Verify that chest is unusable now.") - end - else - local p = pointed_thing.above - minetest.log("action", "Tester tool used at "..minetest.pos_to_string(p)) - minetest.place_node(p, {name="experimental:tester_node_1"}) - end - end - end, -}) - -minetest.register_craft({ - output = 'experimental:tester_tool_1', - recipe = { - {'group:crumbly'}, - {'group:crumbly'}, - } -}) - -minetest.register_craftitem("experimental:tester_tool_2", { - description = "Tester Tool 2", - inventory_image = "experimental_tester_tool_1.png^[invert:g", - on_use = function(itemstack, user, pointed_thing) - local pos = minetest.get_pointed_thing_position(pointed_thing, true) - if pos == nil then return end - pos = vector.add(pos, {x=0, y=0.5, z=0}) - local tex, anim - if math.random(0, 1) == 0 then - tex = "default_lava_source_animated.png" - anim = {type="sheet_2d", frames_w=3, frames_h=2, frame_length=0.5} - else - tex = "default_lava_flowing_animated.png" - anim = {type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3} - end - - minetest.add_particle({ - pos = pos, - velocity = {x=0, y=0, z=0}, - acceleration = {x=0, y=0.04, z=0}, - expirationtime = 6, - collisiondetection = true, - texture = tex, - animation = anim, - size = 4, - glow = math.random(0, 5), - }) - end, -}) - --- Test the disable_repair=1 group -minetest.register_tool("experimental:unrepairable_tool", { - description = "Unrepairable Tool", - wield_image = "default_stone.png", - inventory_image = "default_stone.png", - tool_capabilities = { - groupcaps = { - cracky = { - times = {3, 2, 1}, - } - } - }, - groups = { disable_repair = 1 } -}) - -minetest.register_tool("experimental:repairable_tool", { - description = "Repairable Tool", - wield_image = "default_dirt.png", - inventory_image = "default_dirt.png", - tool_capabilities = { - groupcaps = { - cracky = { - times = {3, 2, 1}, - } - } - }, -}) - -minetest.register_craft({ - output = 'experimental:tester_tool_2', - recipe = { - {'group:crumbly','group:crumbly'}, - } -}) - ---[[minetest.register_on_joinplayer(function(player) - minetest.after(3, function() - player:set_inventory_formspec("size[8,7.5]".. - "image[1,0.6;1,2;player.png]".. - "list[current_player;main;0,3.5;8,4;]".. - "list[current_player;craft;3,0;3,3;]".. - "list[current_player;craftpreview;7,1;1,1;]") - end) -end)]] - --- Create a detached inventory -local inv = minetest.create_detached_inventory("test_inventory", { - allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) - experimental.print_to_everything("allow move asked") - return count -- Allow all - end, - allow_put = function(inv, listname, index, stack, player) - experimental.print_to_everything("allow put asked") - return 1 -- Allow only 1 - end, - allow_take = function(inv, listname, index, stack, player) - experimental.print_to_everything("allow take asked") - return 4 -- Allow 4 at max - end, - on_move = function(inv, from_list, from_index, to_list, to_index, count, player) - experimental.print_to_everything(player:get_player_name().." moved items") - end, - on_put = function(inv, listname, index, stack, player) - experimental.print_to_everything(player:get_player_name().." put items") - end, - on_take = function(inv, listname, index, stack, player) - experimental.print_to_everything(player:get_player_name().." took items") - end, -}) -inv:set_size("main", 4*6) -inv:add_item("main", "experimental:tester_tool_1") -inv:add_item("main", "experimental:tnt 5") - -minetest.register_chatcommand("test1", { - params = "", - description = "Test 1: Modify player's inventory view", - func = function(name, param) - local player = minetest.get_player_by_name(name) - if not player then - return - end - player:set_inventory_formspec( - "size[13,7.5]".. - "image[6,0.6;1,2;player.png]".. - "list[current_player;main;5,3.5;8,4;]".. - "list[current_player;craft;8,0;3,3;]".. - "list[current_player;craftpreview;12,1;1,1;]".. - "list[detached:test_inventory;main;0,0;4,6;0]".. - "button[0.5,7;2,1;button1;Button 1]".. - "button_exit[2.5,7;2,1;button2;Exit Button]" - ) - minetest.chat_send_player(name, "Done."); - end, -}) - -minetest.register_chatcommand("test_bulk_set_node", { - params = "", - description = "Test 2: bulk set a node", - func = function(name, param) - local player = minetest.get_player_by_name(name) - if not player then - return - end - local pos_list = {} - local ppos = player:get_pos() - local i = 1 - for x=2,10 do - for y=2,10 do - for z=2,10 do - pos_list[i] = {x=ppos.x + x,y = ppos.y + y,z = ppos.z + z} - i = i + 1 - end - end - end - minetest.bulk_set_node(pos_list, {name = "default:stone"}) - minetest.chat_send_player(name, "Done."); - end, -}) - -minetest.register_chatcommand("bench_bulk_set_node", { - params = "", - description = "Test 3: bulk set a node (bench)", - func = function(name, param) - local player = minetest.get_player_by_name(name) - if not player then - return - end - local pos_list = {} - local ppos = player:get_pos() - local i = 1 - for x=2,100 do - for y=2,100 do - for z=2,100 do - pos_list[i] = {x=ppos.x + x,y = ppos.y + y,z = ppos.z + z} - i = i + 1 - end - end - end - - minetest.chat_send_player(name, "Benching bulk set node. Warming up..."); - - -- warm up with default:stone to prevent having different callbacks - -- due to different node topology - minetest.bulk_set_node(pos_list, {name = "default:stone"}) - - minetest.chat_send_player(name, "Warming up finished, now benching..."); - - local start_time = os.clock() - for i=1,#pos_list do - minetest.set_node(pos_list[i], {name = "default:stone"}) - end - local middle_time = os.clock() - minetest.bulk_set_node(pos_list, {name = "default:stone"}) - local end_time = os.clock() - minetest.chat_send_player(name, - string.format("Bench results: set_node loop[%.2fms], bulk_set_node[%.2fms]", - (middle_time - start_time) * 1000, - (end_time - middle_time) * 1000 - ) - ); - end, -}) - -local formspec_test_active = false - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formspec_test_active then - experimental.print_to_everything("Inventory fields 1: player="..player:get_player_name()..", fields="..dump(fields)) - end -end) -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formspec_test_active then - experimental.print_to_everything("Inventory fields 2: player="..player:get_player_name()..", fields="..dump(fields)) - return true -- Disable the first callback - end -end) -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formspec_test_active then - experimental.print_to_everything("Inventory fields 3: player="..player:get_player_name()..", fields="..dump(fields)) - end -end) - -minetest.register_chatcommand("test_formspec", { - param = "", - description = "Test 4: Toggle formspec test", - func = function(name, param) - formspec_test_active = not formspec_test_active - if formspec_test_active then - minetest.chat_send_player(name, "Formspec test enabled!") - else - minetest.chat_send_player(name, "Formspec test disabled!") - end - end -}) - -minetest.log("info", "experimental modname="..dump(minetest.get_current_modname())) -minetest.log("info", "experimental modpath="..dump(minetest.get_modpath("experimental"))) -minetest.log("info", "experimental worldpath="..dump(minetest.get_worldpath())) - - -core.register_on_mods_loaded(function() - core.log("action", "Yeah experimental loaded mods.") -end) - --- END diff -Nru minetest-5.2.0/games/minimal/mods/experimental/modchannels.lua minetest-5.3.0/games/minimal/mods/experimental/modchannels.lua --- minetest-5.2.0/games/minimal/mods/experimental/modchannels.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/experimental/modchannels.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ --- --- Mod channels experimental handlers --- -local mod_channel = core.mod_channel_join("experimental_preview") - -core.register_on_modchannel_message(function(channel, sender, message) - print("[minimal][modchannels] Server received message `" .. message - .. "` on channel `" .. channel .. "` from sender `" .. sender .. "`") - - if mod_channel:is_writeable() then - mod_channel:send_all("experimental answers to preview") - mod_channel:leave() - end -end) - -print("[minimal][modchannels] Code loaded!") diff -Nru minetest-5.2.0/games/minimal/mods/experimental/mod.conf minetest-5.3.0/games/minimal/mods/experimental/mod.conf --- minetest-5.2.0/games/minimal/mods/experimental/mod.conf 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/experimental/mod.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -name = experimental -description = Minimal mod to test features -depends = default, stairs Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/experimental/textures/experimental_dummyball.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/experimental/textures/experimental_dummyball.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/experimental/textures/experimental_tester_tool_1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/experimental/textures/experimental_tester_tool_1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/experimental/textures/experimental_tiled.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/experimental/textures/experimental_tiled.png differ diff -Nru minetest-5.2.0/games/minimal/mods/give_initial_stuff/init.lua minetest-5.3.0/games/minimal/mods/give_initial_stuff/init.lua --- minetest-5.2.0/games/minimal/mods/give_initial_stuff/init.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/give_initial_stuff/init.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -minetest.register_on_newplayer(function(player) - print("[minimal] giving initial stuff to player") - player:get_inventory():add_item('main', 'default:pick_stone') - player:get_inventory():add_item('main', 'default:torch 99') - player:get_inventory():add_item('main', 'default:cobble 99') - player:get_inventory():add_item('main', 'default:wood 99') - player:get_inventory():add_item('main', 'default:axe_steel') - player:get_inventory():add_item('main', 'default:shovel_steel') - player:get_inventory():add_item('main', 'default:pick_wood') - player:get_inventory():add_item('main', 'default:pick_steel') - player:get_inventory():add_item('main', 'default:pick_mese') - player:get_inventory():add_item('main', 'default:mese 99') - player:get_inventory():add_item('main', 'default:water_source 99') - player:get_inventory():add_item('main', 'experimental:tester_tool_1') -end) - diff -Nru minetest-5.2.0/games/minimal/mods/give_initial_stuff/mod.conf minetest-5.3.0/games/minimal/mods/give_initial_stuff/mod.conf --- minetest-5.2.0/games/minimal/mods/give_initial_stuff/mod.conf 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/give_initial_stuff/mod.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -name = give_initial_stuff -description = Gives items to players on join -depends = default diff -Nru minetest-5.2.0/games/minimal/mods/legacy/init.lua minetest-5.3.0/games/minimal/mods/legacy/init.lua --- minetest-5.2.0/games/minimal/mods/legacy/init.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/legacy/init.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ --- legacy (Minetest 0.4 mod) --- Provides as much backwards-compatibility as feasible - --- --- Aliases to support loading 0.3 and old 0.4 worlds and inventories --- - -minetest.register_alias("stone", "default:stone") -minetest.register_alias("stone_with_coal", "default:stone_with_coal") -minetest.register_alias("stone_with_iron", "default:stone_with_iron") -minetest.register_alias("dirt_with_grass", "default:dirt_with_grass") -minetest.register_alias("dirt_with_grass_footsteps", "default:dirt_with_grass_footsteps") -minetest.register_alias("dirt", "default:dirt") -minetest.register_alias("sand", "default:sand") -minetest.register_alias("gravel", "default:gravel") -minetest.register_alias("sandstone", "default:sandstone") -minetest.register_alias("clay", "default:clay") -minetest.register_alias("brick", "default:brick") -minetest.register_alias("tree", "default:tree") -minetest.register_alias("jungletree", "default:jungletree") -minetest.register_alias("junglegrass", "default:junglegrass") -minetest.register_alias("leaves", "default:leaves") -minetest.register_alias("cactus", "default:cactus") -minetest.register_alias("papyrus", "default:papyrus") -minetest.register_alias("bookshelf", "default:bookshelf") -minetest.register_alias("glass", "default:glass") -minetest.register_alias("wooden_fence", "default:fence_wood") -minetest.register_alias("rail", "default:rail") -minetest.register_alias("ladder", "default:ladder") -minetest.register_alias("wood", "default:wood") -minetest.register_alias("mese", "default:mese") -minetest.register_alias("cloud", "default:cloud") -minetest.register_alias("water_flowing", "default:water_flowing") -minetest.register_alias("water_source", "default:water_source") -minetest.register_alias("lava_flowing", "default:lava_flowing") -minetest.register_alias("lava_source", "default:lava_source") -minetest.register_alias("torch", "default:torch") -minetest.register_alias("sign_wall", "default:sign_wall") -minetest.register_alias("furnace", "default:furnace") -minetest.register_alias("chest", "default:chest") -minetest.register_alias("locked_chest", "default:chest_locked") -minetest.register_alias("cobble", "default:cobble") -minetest.register_alias("mossycobble", "default:mossycobble") -minetest.register_alias("steelblock", "default:steelblock") -minetest.register_alias("nyancat", "default:nyancat") -minetest.register_alias("nyancat_rainbow", "default:nyancat_rainbow") -minetest.register_alias("sapling", "default:sapling") -minetest.register_alias("apple", "default:apple") - -minetest.register_alias("WPick", "default:pick_wood") -minetest.register_alias("STPick", "default:pick_stone") -minetest.register_alias("SteelPick", "default:pick_steel") -minetest.register_alias("MesePick", "default:pick_mese") -minetest.register_alias("WShovel", "default:shovel_wood") -minetest.register_alias("STShovel", "default:shovel_stone") -minetest.register_alias("SteelShovel", "default:shovel_steel") -minetest.register_alias("WAxe", "default:axe_wood") -minetest.register_alias("STAxe", "default:axe_stone") -minetest.register_alias("SteelAxe", "default:axe_steel") -minetest.register_alias("WSword", "default:sword_wood") -minetest.register_alias("STSword", "default:sword_stone") -minetest.register_alias("SteelSword", "default:sword_steel") - -minetest.register_alias("Stick", "default:stick") -minetest.register_alias("paper", "default:paper") -minetest.register_alias("book", "default:book") -minetest.register_alias("lump_of_coal", "default:coal_lump") -minetest.register_alias("lump_of_iron", "default:iron_lump") -minetest.register_alias("lump_of_clay", "default:clay_lump") -minetest.register_alias("steel_ingot", "default:steel_ingot") -minetest.register_alias("clay_brick", "default:clay_brick") -minetest.register_alias("scorched_stuff", "default:scorched_stuff") - --- --- Old items --- - -minetest.register_craftitem(":rat", { - description = "Rat", - inventory_image = "rat.png", - on_drop = function(item, dropper, pos) - item:take_item() - return item - end, - on_place = function(item, dropped, pointed) - pos = minetest.get_pointed_thing_position(pointed, true) - if pos ~= nil then - item:take_item() - return item - end - end -}) - -minetest.register_craftitem(":cooked_rat", { - description = "Cooked rat", - inventory_image = "cooked_rat.png", - on_use = minetest.item_eat(6), -}) - -minetest.register_craftitem(":firefly", { - description = "Firefly", - inventory_image = "firefly.png", - on_drop = function(item, dropper, pos) - item:take_item() - return item - end, - on_place = function(item, dropped, pointed) - pos = minetest.get_pointed_thing_position(pointed, true) - if pos ~= nil then - item:take_item() - return item - end - end -}) - -minetest.register_craft({ - type = "cooking", - output = "cooked_rat", - recipe = "rat", -}) - -minetest.register_craft({ - type = "cooking", - output = "scorched_stuff", - recipe = "cooked_rat", -}) - --- END diff -Nru minetest-5.2.0/games/minimal/mods/legacy/mod.conf minetest-5.3.0/games/minimal/mods/legacy/mod.conf --- minetest-5.2.0/games/minimal/mods/legacy/mod.conf 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/legacy/mod.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -name = legacy -description = Aliases allowing support for 0.3.x worlds -depends = default Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/legacy/textures/apple_iron.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/legacy/textures/apple_iron.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/legacy/textures/cooked_rat.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/legacy/textures/cooked_rat.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/legacy/textures/dungeon_master.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/legacy/textures/dungeon_master.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/legacy/textures/fireball.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/legacy/textures/fireball.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/legacy/textures/firefly.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/legacy/textures/firefly.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/legacy/textures/oerkki1_damaged.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/legacy/textures/oerkki1_damaged.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/legacy/textures/oerkki1.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/legacy/textures/oerkki1.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/legacy/textures/rat.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/legacy/textures/rat.png differ diff -Nru minetest-5.2.0/games/minimal/mods/stairs/init.lua minetest-5.3.0/games/minimal/mods/stairs/init.lua --- minetest-5.2.0/games/minimal/mods/stairs/init.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/stairs/init.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -stairs = {} - --- Node will be called stairs:stair_ -function stairs.register_stair(subname, recipeitem, groups, images, description) - minetest.register_node(":stairs:stair_" .. subname, { - description = description, - drawtype = "nodebox", - tiles = images, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = true, - groups = groups, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.5, 0.5}, - }, - }, - }) - - minetest.register_craft({ - output = 'stairs:stair_' .. subname .. ' 4', - recipe = { - {recipeitem, "", ""}, - {recipeitem, recipeitem, ""}, - {recipeitem, recipeitem, recipeitem}, - }, - }) -end - --- Node will be called stairs:slab_ -function stairs.register_slab(subname, recipeitem, groups, images, description) - minetest.register_node(":stairs:slab_" .. subname, { - description = description, - drawtype = "nodebox", - tiles = images, - paramtype = "light", - is_ground_content = true, - groups = groups, - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - }, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - }, - }) - - minetest.register_craft({ - output = 'stairs:slab_' .. subname .. ' 3', - recipe = { - {recipeitem, recipeitem, recipeitem}, - }, - }) -end - --- Nodes will be called stairs:{stair,slab}_ -function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab) - stairs.register_stair(subname, recipeitem, groups, images, desc_stair) - stairs.register_slab(subname, recipeitem, groups, images, desc_slab) -end - -stairs.register_stair_and_slab("wood", "default:wood", - {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - {"default_wood.png"}, - "Wooden stair", - "Wooden slab") - -stairs.register_stair_and_slab("stone", "default:stone", - {cracky=3}, - {"default_stone.png"}, - "Stone stair", - "Stone slab") - -stairs.register_stair_and_slab("cobble", "default:cobble", - {cracky=3}, - {"default_cobble.png"}, - "Cobble stair", - "Cobble slab") - -stairs.register_stair_and_slab("brick", "default:brick", - {cracky=3}, - {"default_brick.png"}, - "Brick stair", - "Brick slab") - -stairs.register_stair_and_slab("sandstone", "default:sandstone", - {crumbly=2,cracky=2}, - {"default_sandstone.png"}, - "Sandstone stair", - "Sandstone slab") diff -Nru minetest-5.2.0/games/minimal/mods/stairs/mod.conf minetest-5.3.0/games/minimal/mods/stairs/mod.conf --- minetest-5.2.0/games/minimal/mods/stairs/mod.conf 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/stairs/mod.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -name = stairs -description = Adds stairs and slabs -depends = default diff -Nru minetest-5.2.0/games/minimal/mods/test/crafting.lua minetest-5.3.0/games/minimal/mods/test/crafting.lua --- minetest-5.2.0/games/minimal/mods/test/crafting.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/test/crafting.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -local function test_clear_craft() - minetest.log("info", "Testing clear_craft") - -- Clearing by output - minetest.register_craft({ - output = "foo", - recipe = {{"bar"}} - }) - minetest.register_craft({ - output = "foo 4", - recipe = {{"foo", "bar"}} - }) - assert(#minetest.get_all_craft_recipes("foo") == 2) - minetest.clear_craft({output="foo"}) - assert(minetest.get_all_craft_recipes("foo") == nil) - -- Clearing by input - minetest.register_craft({ - output = "foo 4", - recipe = {{"foo", "bar"}} - }) - assert(#minetest.get_all_craft_recipes("foo") == 1) - minetest.clear_craft({recipe={{"foo", "bar"}}}) - assert(minetest.get_all_craft_recipes("foo") == nil) -end -test_clear_craft() - -local function test_get_craft_result() - minetest.log("info", "test_get_craft_result()") - -- normal - local input = { - method = "normal", - width = 2, - items = {"", "default:coal_lump", "", "default:stick"} - } - minetest.log("info", "torch crafting input: "..dump(input)) - local output, decremented_input = minetest.get_craft_result(input) - minetest.log("info", "torch crafting output: "..dump(output)) - minetest.log("info", "torch crafting decremented input: "..dump(decremented_input)) - assert(output.item) - minetest.log("info", "torch crafting output.item:to_table(): "..dump(output.item:to_table())) - assert(output.item:get_name() == "default:torch") - assert(output.item:get_count() == 4) - -- fuel - local input = { - method = "fuel", - width = 1, - items = {"default:coal_lump"} - } - minetest.log("info", "coal fuel input: "..dump(input)) - local output, decremented_input = minetest.get_craft_result(input) - minetest.log("info", "coal fuel output: "..dump(output)) - minetest.log("info", "coal fuel decremented input: "..dump(decremented_input)) - assert(output.time) - assert(output.time > 0) - -- cook - local input = { - method = "cooking", - width = 1, - items = {"default:cobble"} - } - minetest.log("info", "cobble cooking input: "..dump(output)) - local output, decremented_input = minetest.get_craft_result(input) - minetest.log("info", "cobble cooking output: "..dump(output)) - minetest.log("info", "cobble cooking decremented input: "..dump(decremented_input)) - assert(output.time) - assert(output.time > 0) - assert(output.item) - minetest.log("info", "cobble cooking output.item:to_table(): "..dump(output.item:to_table())) - assert(output.item:get_name() == "default:stone") - assert(output.item:get_count() == 1) -end -test_get_craft_result() diff -Nru minetest-5.2.0/games/minimal/mods/test/formspec.lua minetest-5.3.0/games/minimal/mods/test/formspec.lua --- minetest-5.2.0/games/minimal/mods/test/formspec.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/test/formspec.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,229 +0,0 @@ -local color = minetest.colorize - -local clip_fs = [[ - style_type[label,button,image_button,item_image_button, - tabheader,scrollbar,table,animated_image - ,field,textarea,checkbox,dropdown;noclip=%c] - - label[0,0;A clipping test] - button[0,1;3,0.8;x;A clipping test] - image_button[0,2;3,0.8;bubble.png;x2;A clipping test] - item_image_button[0,3;3,0.8;default:sword_steel;x3;A clipping test] - tabheader[0,4.7;3,0.63;x4;Clip,Test,Text,Tabs;1;false;false] - field[0,5;3,0.8;x5;Title;] - textarea[0,6;3,1;x6;Title;] - checkbox[0,7.5;x7;This is a test;true] - dropdown[0,8;3,0.8;x8;Select An Item,One,Two,Three,Four,Five;1] - scrollbar[0,9;3,0.8;horizontal;x9;3] - tablecolumns[text;text] - table[0,10;3,1;x10;one,two,three,four;1] - animated_image[-0.5,11;4.5,1;;test_animation.png;4;100] -]] - - -local style_fs = [[ - style[one_btn1;bgcolor=red;textcolor=yellow;bgcolor_hovered=orange; - bgcolor_pressed=purple] - button[0,0;2.5,0.8;one_btn1;Button] - - style[one_btn2;border=false;textcolor=cyan] ]].. - "button[0,1.05;2.5,0.8;one_btn2;Text " .. color("#FF0", "Yellow") .. [[] - - style[one_btn3;bgimg=bubble.png;bgimg_hovered=default_apple.png; - bgimg_pressed=heart.png] - button[0,2.1;1,1;one_btn3;Bor] - - style[one_btn4;bgimg=bubble.png;bgimg_hovered=default_apple.png; - bgimg_pressed=heart.png;border=false] - button[1.25,2.1;1,1;one_btn4;Bub] - - style[one_btn5;bgimg=bubble.png;bgimg_hovered=default_apple.png; - bgimg_pressed=heart.png;border=false;alpha=false] - button[0,3.35;1,1;one_btn5;Alph] - - style[one_btn6;border=true] - image_button[0,4.6;1,1;bubble.png;one_btn6;Border] - - style[one_btn7;border=false] - image_button[1.25,4.6;1,1;bubble.png;one_btn7;NoBor] - - style[one_btn8;border=false] - image_button[0,5.85;1,1;bubble.png;one_btn8;Border;false;true;heart.png] - - style[one_btn9;border=true] - image_button[1.25,5.85;1,1;bubble.png;one_btn9;NoBor;false;false;heart.png] - - style[one_btn10;alpha=false] - image_button[0,7.1;1,1;bubble.png;one_btn10;NoAlpha] - - style[one_btn11;alpha=true] - image_button[1.25,7.1;1,1;bubble.png;one_btn11;Alpha] - - style[one_btn12;border=true] - item_image_button[0,8.35;1,1;default:sword_steel;one_btn12;Border] - - style[one_btn13;border=false] - item_image_button[1.25,8.35;1,1;default:sword_steel;one_btn13;NoBor] - - style[one_btn14;border=false;bgimg=test_bg.png;bgimg_hovered=test_bg_hovered.png;bgimg_pressed=test_bg_pressed.png;fgimg=bubble.png;fgimg_hovered=default_apple.png;fgimg_pressed=heart.png] - image_button[0,9.6;1,1;bubble.png;one_btn14;Bg] - - style[one_btn15;border=false;bgimg=test_bg.png;bgimg_hovered=test_bg_hovered.png;bgimg_pressed=test_bg_pressed.png] - item_image_button[1.25,9.6;1,1;default:sword_steel;one_btn15;Bg] - - style[one_btn16;border=false;bgimg=test_bg_9slice.png;bgimg_hovered=test_bg_9slice_hovered.png;bgimg_pressed=test_bg_9slice_pressed.png;bgimg_middle=4,6] - button[2.5,9.6;2,1;one_btn16;9-Slice Bg] - - - - container[2.75,0] - - style[one_tb1;textcolor=Yellow] - tabheader[0,3;2.5,0.63;one_tb1;Yellow,Text,Tabs;1;false;false] - - style[one_f1;textcolor=yellow] - field[0,4.25;2.5,0.8;one_f1;Field One;Yellow Text] - - style[one_f2;border=false;textcolor=cyan] - field[0,5.75;2.5,0.8;one_f2;Field Two;Borderless Cyan Text] - - style[one_f3;textcolor=yellow] - textarea[0,7.025;2.5,0.8;one_f3;Label;]] .. - minetest.formspec_escape("Yellow Text\nLine two") .. [[ ] - - style[one_f4;border=false;textcolor=cyan] - textarea[0,8.324999999999999;2.5,0.8;one_f4;Label;]] .. - minetest.formspec_escape("Borderless Cyan Text\nLine two") .. [[ ] - - container_end[] -]] - ---style_type[label;textcolor=green] ---label[0,0;Green] ---style_type[label;textcolor=blue] ---label[0,1;Blue] ---style_type[label;textcolor=;border=true] ---label[1.2,0;Border] ---style_type[label;border=true;bgcolor=red] ---label[1.2,1;Background] ---style_type[label;border=;bgcolor=] ---label[0.75,2;Reset] - - -local pages = { - [[ - formspec_version[3] - size[12,12] - image_button[0,0;1,1;logo.png;;1x1] - image_button[1,0;2,2;logo.png;;2x2] - button[0,2;1,1;;1x1] - button[1,2;2,2;;2x2] - item_image[0,4;1,1;air] - item_image[1,4;2,2;air] - item_image_button[0,6;1,1;test:node;;1x1] - item_image_button[1,6;2,2;test:node;;2x2] - field[3,.5;3,.5;name;Field;text] - pwdfield[6,.5;3,1;name;Password Field] - field[3,1;3,1;;Read-Only Field;text] - textarea[3,2;3,.5;name;Textarea;text] - textarea[6,2;3,2;name;Textarea;text\nmore text] - textarea[3,3;3,1;;Read-Only Textarea;text\nmore text] - textlist[3,4;3,2;name;Textlist,Perfect Coordinates;1;false] - tableoptions[highlight=#ABCDEF75;background=#00000055;border=false] - table[6,4;3,2;name;Table,Cool Stuff,Foo,Bar;2] - dropdown[3,6;3,1;name;This,is,a,dropdown;1] - dropdown[6,6;3,2;name;I,am,a,bigger,dropdown;5] - image[0,8;3,2;ignore.png] - box[3,7;3,1;#00A3FF] - checkbox[3,8;name;Check me!;false] - checkbox[3,9;name;Uncheck me now!;true] - scrollbar[0,11.5;11.5,.5;horizontal;name;500] - scrollbar[11.5,0;.5,11.5;vertical;name;0] - list[current_player;main;6,8;3,2;1] - button[9,0;2.5,1;name;] - button[9,1;2.5,1;name;] - button[9,2;2.5,1;name;] ]].. - "label[9,0.5;This is a label.\nLine\nLine\nLine\nEnd]".. - [[button[9,3;1,1;name;] - vertlabel[9,4;VERT] - label[10,3;HORIZ] - tabheader[6.5,0;6,0.65;name;Tab 1,Tab 2,Tab 3,Secrets;1;false;false] - ]], - - "formspec_version[3]size[12,12]" .. - ("label[0.375,0.375;Styled - %s %s]"):format( - color("#F00", "red text"), - color("#77FF00CC", "green text")) .. - "label[6.375,0.375;Unstyled]" .. - "box[0,0.75;12,0.1;#999]" .. - "box[6,0.85;0.1,11.15;#999]" .. - "container[0.375,1.225]" .. - style_fs .. - "container_end[]container[6.375,1.225]" .. - style_fs:gsub("one_", "two_"):gsub("style%[[^%]]+%]", ""):gsub("style_type%[[^%]]+%]", "") .. - "container_end[]", - - "formspec_version[3]size[12,13]" .. - "label[0.1,0.5;Clip]" .. - "container[-2.5,1]" .. clip_fs:gsub("%%c", "false") .. "container_end[]" .. - "label[11,0.5;Noclip]" .. - "container[11.5,1]" .. clip_fs:gsub("%%c", "true") .. "container_end[]", - - [[ - formspec_version[3] - size[12,12] - animated_image[0.5,0.5;1,1;;test_animation.png;4;100] - animated_image[0.5,1.75;1,1;;test_animation.jpg;4;100] - animated_image[1.75,0.5;1,1;;test_animation.png;100;100] - animated_image[3,0.5;1,1;ani_img_1;test_animation.png;4;1000] - button[4.25,0.5;1,1;ani_btn_1;Current -Number] - animated_image[3,1.75;1,1;ani_img_2;test_animation.png;4;1000;2] - button[4.25,1.75;1,1;ani_btn_2;Current -Number] - animated_image[3,3;1,1;;test_animation.png;4;0] - animated_image[3,4.25;1,1;;test_animation.png;4;0;3] - animated_image[5.5,0.5;5,2;;test_animation.png;4;100] - animated_image[5.5,2.75;5,2;;test_animation.jpg;4;100] - ]] -} - -local function show_test_formspec(pname, page_id) - page_id = page_id or 2 - - local fs = pages[page_id] .. "tabheader[0,0;6,0.65;maintabs;Real Coord,Styles,Noclip,MiscEle;" .. page_id .. ";false;false]" - - minetest.show_formspec(pname, "test:formspec", fs) -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "test:formspec" then - return false - end - - if fields.maintabs then - show_test_formspec(player:get_player_name(), tonumber(fields.maintabs)) - return true - end - - if fields.ani_img_1 and fields.ani_btn_1 then - minetest.chat_send_all(fields.ani_img_1) - elseif fields.ani_img_2 and fields.ani_btn_2 then - minetest.chat_send_all(fields.ani_img_2) - end -end) - -minetest.register_node("test:node", { - tiles = { "air.png" } -}) - -minetest.register_chatcommand("formspec", { - func = function(name) - if not minetest.get_player_by_name(name) then - return false, "You need to be online!" - end - - show_test_formspec(name) - return true, "Opened formspec" - end, -}) diff -Nru minetest-5.2.0/games/minimal/mods/test/init.lua minetest-5.3.0/games/minimal/mods/test/init.lua --- minetest-5.2.0/games/minimal/mods/test/init.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/test/init.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ --- --- Minimal Development Test --- Mod: test --- - - --- Try out PseudoRandom -pseudo = PseudoRandom(13) -assert(pseudo:next() == 22290) -assert(pseudo:next() == 13854) - -local modpath = minetest.get_modpath("test") -dofile(modpath .. "/player.lua") -dofile(modpath .. "/formspec.lua") -dofile(modpath .. "/crafting.lua") diff -Nru minetest-5.2.0/games/minimal/mods/test/mod.conf minetest-5.3.0/games/minimal/mods/test/mod.conf --- minetest-5.2.0/games/minimal/mods/test/mod.conf 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/test/mod.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -name = test -description = Adds unit tests for the engine -optional_depends = default diff -Nru minetest-5.2.0/games/minimal/mods/test/player.lua minetest-5.3.0/games/minimal/mods/test/player.lua --- minetest-5.2.0/games/minimal/mods/test/player.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/games/minimal/mods/test/player.lua 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ --- --- Minimal Development Test --- Mod: test --- - --- --- HP Change Reasons --- -local expect = nil -local function run_hpchangereason_tests(player) - expect = { type = "set_hp", from = "mod" } - player:set_hp(3) - assert(expect == nil) - - expect = { a = 234, type = "set_hp", from = "mod" } - player:set_hp(7, { a= 234 }) - assert(expect == nil) - - expect = { df = 3458973454, type = "fall", from = "mod" } - player:set_hp(10, { type = "fall", df = 3458973454 }) - assert(expect == nil) -end -minetest.register_on_player_hpchange(function(player, hp, reason) - if not expect then - return - end - - for key, value in pairs(reason) do - assert(expect[key] == value) - end - - for key, value in pairs(expect) do - assert(reason[key] == value) - end - - expect = nil -end) - - -local function run_player_meta_tests(player) - local meta = player:get_meta() - meta:set_string("foo", "bar") - assert(meta:contains("foo")) - assert(meta:get_string("foo") == "bar") - assert(meta:get("foo") == "bar") - - local meta2 = player:get_meta() - assert(meta2:get_string("foo") == "bar") - assert(meta2:get("foo") == "bar") - assert(meta:equals(meta2)) - assert(player:get_attribute("foo") == "bar") - - meta:set_string("bob", "dillan") - assert(meta:get_string("foo") == "bar") - assert(meta:get_string("bob") == "dillan") - assert(meta:get("bob") == "dillan") - assert(meta2:get_string("foo") == "bar") - assert(meta2:get_string("bob") == "dillan") - assert(meta2:get("bob") == "dillan") - assert(meta:equals(meta2)) - assert(player:get_attribute("foo") == "bar") - assert(player:get_attribute("bob") == "dillan") - - meta:set_string("foo", "") - assert(not meta:contains("foo")) - assert(meta:get("foo") == nil) - assert(meta:get_string("foo") == "") - assert(meta:equals(meta2)) -end - -local function run_player_tests(player) - run_hpchangereason_tests(player) - run_player_meta_tests(player) - minetest.chat_send_all("All tests pass!") -end -minetest.register_on_joinplayer(run_player_tests) Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/test/textures/test_animation.jpg and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/test/textures/test_animation.jpg differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/test/textures/test_animation.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/test/textures/test_animation.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/test/textures/test_bg_9slice_hovered.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/test/textures/test_bg_9slice_hovered.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/test/textures/test_bg_9slice.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/test/textures/test_bg_9slice.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/test/textures/test_bg_9slice_pressed.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/test/textures/test_bg_9slice_pressed.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/test/textures/test_bg_hovered.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/test/textures/test_bg_hovered.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/test/textures/test_bg.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/test/textures/test_bg.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/games/minimal/mods/test/textures/test_bg_pressed.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/games/minimal/mods/test/textures/test_bg_pressed.png differ diff -Nru minetest-5.2.0/.github/workflows/build.yml minetest-5.3.0/.github/workflows/build.yml --- minetest-5.2.0/.github/workflows/build.yml 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/.github/workflows/build.yml 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,289 @@ +name: build + +# build on c/cpp changes or workflow changes +on: + push: + paths: + - 'lib/**.[ch]' + - 'lib/**.cpp' + - 'src/**.[ch]' + - 'src/**.cpp' + - '**/CMakeLists.txt' + - 'cmake/Modules/**' + - 'util/buildbot/**' + - 'util/ci/**' + - '.github/workflows/**.yml' + pull_request: + paths: + - 'lib/**.[ch]' + - 'lib/**.cpp' + - 'src/**.[ch]' + - 'src/**.cpp' + - '**/CMakeLists.txt' + - 'cmake/Modules/**' + - 'util/buildbot/**' + - 'util/ci/**' + - '.github/workflows/**.yml' + +jobs: + # This is our minor gcc compiler + gcc_6: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install deps + run: | + sudo apt-get install g++-6 gcc-6 -qyy + source ./util/ci/common.sh + install_linux_deps + + - name: Build + run: | + ./util/ci/build.sh + env: + CC: gcc-6 + CXX: g++-6 + + - name: Test + run: | + ./bin/minetest --run-unittests + + # This is the current gcc compiler (available in bionic) + gcc_8: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install deps + run: | + sudo apt-get install g++-8 gcc-8 -qyy + source ./util/ci/common.sh + install_linux_deps + + - name: Build + run: | + ./util/ci/build.sh + env: + CC: gcc-8 + CXX: g++-8 + + - name: Test + run: | + ./bin/minetest --run-unittests + + # This is our minor clang compiler + clang_3_9: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install deps + run: | + sudo apt-get install clang-3.9 -qyy + source ./util/ci/common.sh + install_linux_deps + + - name: Build + run: | + ./util/ci/build.sh + env: + CC: clang-3.9 + CXX: clang++-3.9 + + - name: Test + run: | + ./bin/minetest --run-unittests + + # This is the current clang version + clang_9: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install deps + run: | + sudo apt-get install clang-9 valgrind -qyy + source ./util/ci/common.sh + install_linux_deps + env: + WITH_LUAJIT: 1 + + - name: Build + run: | + ./util/ci/build.sh + env: + CC: clang-9 + CXX: clang++-9 + + - name: Test + run: | + ./bin/minetest --run-unittests + + - name: Valgrind + run: | + valgrind --leak-check=full --leak-check-heuristics=all --undef-value-errors=no --error-exitcode=9 ./bin/minetest --run-unittests + + # Build with prometheus-cpp (server-only) + clang_9_prometheus: + name: "clang_9 (PROMETHEUS=1)" + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install deps + run: | + sudo apt-get install clang-9 -qyy + source ./util/ci/common.sh + install_linux_deps + + - name: Build prometheus-cpp + run: | + ./util/ci/build_prometheus_cpp.sh + + - name: Build + run: | + ./util/ci/build.sh + env: + CC: clang-9 + CXX: clang++-9 + CMAKE_FLAGS: "-DENABLE_PROMETHEUS=1 -DBUILD_CLIENT=0" + + - name: Test + run: | + ./bin/minetestserver --run-unittests + + # Build without freetype (client-only) + clang_9_no_freetype: + name: "clang_9 (FREETYPE=0)" + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install deps + run: | + sudo apt-get install clang-9 -qyy + source ./util/ci/common.sh + install_linux_deps + + - name: Build + run: | + ./util/ci/build.sh + env: + CC: clang-9 + CXX: clang++-9 + CMAKE_FLAGS: "-DENABLE_FREETYPE=0 -DBUILD_SERVER=0" + + - name: Test + run: | + ./bin/minetest --run-unittests + + docker: + name: "Docker image" + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Build docker image + run: | + docker build . + + win32: + name: "MinGW cross-compiler (32-bit)" + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install compiler + run: | + sudo apt-get install gettext -qyy + wget http://minetest.kitsunemimi.pw/mingw-w64-i686_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz + sudo tar -xaf mingw.tar.xz -C /usr + + - name: Build + run: | + EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin32.sh winbuild + env: + NO_MINETEST_GAME: 1 + NO_PACKAGE: 1 + + win64: + name: "MinGW cross-compiler (64-bit)" + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install compiler + run: | + sudo apt-get install gettext -qyy + wget http://minetest.kitsunemimi.pw/mingw-w64-x86_64_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz + sudo tar -xaf mingw.tar.xz -C /usr + + - name: Build + run: | + EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin64.sh winbuild + env: + NO_MINETEST_GAME: 1 + NO_PACKAGE: 1 + + msvc: + name: VS 2019 ${{ matrix.config.arch }}-${{ matrix.type }} + runs-on: windows-2019 + env: + VCPKG_VERSION: c7ab9d3110813979a873b2dbac630a9ab79850dc +# 2020.04 + vcpkg_packages: irrlicht zlib curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit + 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 + } + type: [portable] +# type: [portable, installer] +# The installer type is working, but disabled, to save runner jobs. +# Enable it, when working on the installer. + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Restore from cache and run vcpkg + uses: lukka/run-vcpkg@v2 + with: + vcpkgArguments: ${{env.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}} ` + -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" ` + -DCMAKE_BUILD_TYPE=Release ` + -DENABLE_POSTGRESQL=OFF ` + -DRUN_IN_PLACE=${{ contains(matrix.type, 'portable') }} . + + - name: Build + run: cmake --build . --config Release + + - name: CPack + run: | + If ($env:TYPE -eq "installer") + { + cpack -G WIX -B "$env:GITHUB_WORKSPACE\Package" + } + ElseIf($env:TYPE -eq "portable") + { + cpack -G ZIP -B "$env:GITHUB_WORKSPACE\Package" + } + env: + TYPE: ${{matrix.type}} + + - name: Package Clean + run: rm -r $env:GITHUB_WORKSPACE\Package\_CPack_Packages + + - uses: actions/upload-artifact@v1 + with: + name: msvc-${{ matrix.config.arch }}-${{ matrix.type }} + path: .\Package\ diff -Nru minetest-5.2.0/.github/workflows/cpp_lint.yml minetest-5.3.0/.github/workflows/cpp_lint.yml --- minetest-5.2.0/.github/workflows/cpp_lint.yml 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/.github/workflows/cpp_lint.yml 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,54 @@ +name: cpp_lint + +# lint on c/cpp changes or workflow changes +on: + push: + paths: + - 'lib/**.[ch]' + - 'lib/**.cpp' + - 'src/**.[ch]' + - 'src/**.cpp' + - '**/CMakeLists.txt' + - 'cmake/Modules/**' + - 'util/ci/**' + - '.github/workflows/**.yml' + pull_request: + paths: + - 'lib/**.[ch]' + - 'lib/**.cpp' + - 'src/**.[ch]' + - 'src/**.cpp' + - '**/CMakeLists.txt' + - 'cmake/Modules/**' + - 'util/ci/**' + - '.github/workflows/**.yml' + +jobs: + clang_format: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install clang-format + run: | + sudo apt-get install clang-format-9 -qyy + + - name: Run clang-format + run: | + source ./util/ci/lint.sh + perform_lint + env: + CLANG_FORMAT: clang-format-9 + + clang_tidy: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install deps + run: | + sudo apt-get install clang-tidy-9 -qyy + source ./util/ci/common.sh + install_linux_deps + + - name: Run clang-tidy + run: | + ./util/ci/clang-tidy.sh diff -Nru minetest-5.2.0/.github/workflows/lua_lint.yml minetest-5.3.0/.github/workflows/lua_lint.yml --- minetest-5.2.0/.github/workflows/lua_lint.yml 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/.github/workflows/lua_lint.yml 2020-07-09 21:13:20.000000000 +0000 @@ -0,0 +1,32 @@ +name: lua_lint + +# Lint on lua changes on builtin or if workflow changed +on: + push: + paths: + - 'builtin/**.lua' + - '.github/workflows/**.yml' + pull_request: + paths: + - 'builtin/**.lua' + - '.github/workflows/**.yml' + +jobs: + luacheck: + name: "Builtin Luacheck and Unit Tests" + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Install luarocks + run: | + sudo apt-get install luarocks -qyy + + - name: Install luarocks tools + run: | + luarocks install --local luacheck + luarocks install --local busted + + - name: Run checks + run: | + $HOME/.luarocks/bin/luacheck builtin + $HOME/.luarocks/bin/busted builtin diff -Nru minetest-5.2.0/.gitlab-ci.yml minetest-5.3.0/.gitlab-ci.yml --- minetest-5.2.0/.gitlab-ci.yml 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/.gitlab-ci.yml 2020-07-09 21:13:20.000000000 +0000 @@ -12,7 +12,7 @@ MINETEST_GAME_REPO: "https://github.com/minetest/minetest_game.git" CONTAINER_IMAGE: registry.gitlab.com/$CI_PROJECT_PATH -.build_template: &build_definition +.build_template: stage: build script: - mkdir cmakebuild @@ -27,7 +27,7 @@ paths: - artifact/* -.debpkg_template: &debpkg_template +.debpkg_template: stage: package before_script: - apt-get update -y @@ -47,7 +47,7 @@ paths: - ./*.deb -.debpkg_install: &debpkg_install +.debpkg_install: stage: deploy before_script: - apt-get update -y @@ -62,7 +62,7 @@ # Jessie build:debian-8: - <<: *build_definition + extends: .build_template image: debian:8 before_script: - echo "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main" > /etc/apt/sources.list.d/uptodate-toolchain.list @@ -74,46 +74,70 @@ CXX: g++-6 package:debian-8: + extends: .debpkg_template image: debian:8 dependencies: - build:debian-8 variables: LEVELDB_PKG: libleveldb1 - <<: *debpkg_template deploy:debian-8: + extends: .debpkg_install image: debian:8 dependencies: - package:debian-8 variables: LEVELDB_PKG: libleveldb1 - <<: *debpkg_install # Stretch build:debian-9: - <<: *build_definition + extends: .build_template image: debian:9 before_script: - apt-get update -y - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev package:debian-9: + extends: .debpkg_template image: debian:9 dependencies: - build:debian-9 variables: LEVELDB_PKG: libleveldb1v5 - <<: *debpkg_template deploy:debian-9: + extends: .debpkg_install image: debian:9 dependencies: - package:debian-9 variables: LEVELDB_PKG: libleveldb1v5 - <<: *debpkg_install +# Stretch + +build:debian-10: + extends: .build_template + image: debian:10 + before_script: + - apt-get update -y + - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev + +package:debian-10: + extends: .debpkg_template + image: debian:10 + dependencies: + - build:debian-10 + variables: + LEVELDB_PKG: libleveldb1d + +deploy:debian-10: + extends: .debpkg_install + image: debian:10 + dependencies: + - package:debian-10 + variables: + LEVELDB_PKG: libleveldb1d ## ## Ubuntu ## @@ -121,7 +145,7 @@ # Trusty build:ubuntu-14.04: - <<: *build_definition + extends: .build_template image: ubuntu:trusty before_script: - echo "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main" > /etc/apt/sources.list.d/uptodate-toolchain.list @@ -133,102 +157,53 @@ CXX: g++-6 package:ubuntu-14.04: + extends: .debpkg_template image: ubuntu:trusty dependencies: - build:ubuntu-14.04 variables: LEVELDB_PKG: libleveldb1 - <<: *debpkg_template deploy:ubuntu-14.04: + extends: .debpkg_install image: ubuntu:trusty dependencies: - package:ubuntu-14.04 variables: LEVELDB_PKG: libleveldb1 - <<: *debpkg_install # Xenial build:ubuntu-16.04: - <<: *build_definition + extends: .build_template image: ubuntu:xenial before_script: - apt-get update -y - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev package:ubuntu-16.04: + extends: .debpkg_template image: ubuntu:xenial dependencies: - build:ubuntu-16.04 variables: LEVELDB_PKG: libleveldb1v5 - <<: *debpkg_template deploy:ubuntu-16.04: + extends: .debpkg_install image: ubuntu:xenial dependencies: - package:ubuntu-16.04 variables: LEVELDB_PKG: libleveldb1v5 - <<: *debpkg_install - -# Yakkety - -#build:ubuntu-16.10: -# <<: *build_definition -# image: ubuntu:yakkety -# before_script: -# - apt-get update -y -# - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev - -#package:ubuntu-16.10: -# image: ubuntu:yakkety -# dependencies: -# - build:ubuntu-16.10 -# variables: -# LEVELDB_PKG: libleveldb1v5 -# <<: *debpkg_template - -#deploy:ubuntu-16.10: -# image: ubuntu:yakkety -# dependencies: -# - package:ubuntu-16.10 -# variables: -# LEVELDB_PKG: libleveldb1v5 -# <<: *debpkg_install - -# Zesty - -#build:ubuntu-17.04: -# <<: *build_definition -# image: ubuntu:zesty -# before_script: -# - apt-get update -y -# - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev - -#package:ubuntu-17.04: -# image: ubuntu:zesty -# dependencies: -# - build:ubuntu-17.04 -# variables: -# LEVELDB_PKG: libleveldb1v5 -# <<: *debpkg_template - -#deploy:ubuntu-17.04: -# image: ubuntu:zesty -# dependencies: -# - package:ubuntu-17.04 -# variables: -# LEVELDB_PKG: libleveldb1v5 -# <<: *debpkg_install ## ## Fedora ## +# Do we need to support this old version ? build:fedora-24: - <<: *build_definition + extends: .build_template image: fedora:24 before_script: - dnf -y install make automake gcc gcc-c++ kernel-devel cmake libcurl* openal* libvorbis* libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel bzip2-libs gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel doxygen spatialindex-devel bzip2-devel @@ -238,17 +213,16 @@ ## Mingw for Windows ## -.generic_win_template: &generic_win_template +.generic_win_template: image: ubuntu:bionic before_script: - apt-get update -y - apt-get install -y wget xz-utils unzip git cmake gettext - wget -q http://minetest.kitsunemimi.pw/mingw-w64-${WIN_ARCH}_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz - - sed -e "s|%PREFIX%|${WIN_ARCH}-w64-mingw32|" -e "s|%ROOTPATH%|/usr/${WIN_ARCH}-w64-mingw32|" < util/travis/toolchain_mingw.cmake.in > ${TOOLCHAIN_OUTPUT} - tar -xaf mingw.tar.xz -C /usr -.build_win_template: &build_win_template - <<: *generic_win_template +.build_win_template: + extends: .generic_win_template stage: build artifacts: when: on_success @@ -256,8 +230,8 @@ paths: - build/* -.package_win_template: &package_win_template - <<: *generic_win_template +.package_win_template: + extends: .generic_win_template stage: package script: - cd build/minetest/_build @@ -275,40 +249,36 @@ - minetest-win-*/* build:win32: - <<: *build_win_template + extends: .build_win_template script: - ./util/buildbot/buildwin32.sh build variables: NO_PACKAGE: "1" WIN_ARCH: "i686" - TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw.cmake" package:win32: - <<: *package_win_template + extends: .package_win_template dependencies: - build:win32 variables: NO_PACKAGE: "1" WIN_ARCH: "i686" - TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw.cmake" build:win64: - <<: *build_win_template + extends: .build_win_template script: - ./util/buildbot/buildwin64.sh build variables: NO_PACKAGE: "1" WIN_ARCH: "x86_64" - TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw64.cmake" package:win64: - <<: *package_win_template + extends: .package_win_template dependencies: - build:win64 variables: NO_PACKAGE: "1" WIN_ARCH: "x86_64" - TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw64.cmake" package:docker: stage: package @@ -325,9 +295,8 @@ pages: stage: deploy - image: python:3.7 + image: python:3.8 before_script: - - pip install pip==18.1 - pip install git+https://github.com/Python-Markdown/markdown.git - pip install git+https://github.com/mkdocs/mkdocs.git - pip install pygments @@ -338,3 +307,4 @@ - public only: - master + diff -Nru minetest-5.2.0/LICENSE.txt minetest-5.3.0/LICENSE.txt --- minetest-5.2.0/LICENSE.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/LICENSE.txt 2020-07-09 21:13:20.000000000 +0000 @@ -21,6 +21,12 @@ paramat: textures/base/pack/menu_header.png + textures/base/pack/next_icon.png + textures/base/pack/prev_icon.png + +rubenwardy, paramat: + textures/base/pack/start_icon.png + textures/base/pack/end_icon.png erlehmann: misc/minetest-icon-24x24.png diff -Nru minetest-5.2.0/minetest.conf.example minetest-5.3.0/minetest.conf.example --- minetest-5.2.0/minetest.conf.example 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/minetest.conf.example 2020-07-09 21:13:21.000000000 +0000 @@ -254,7 +254,7 @@ # Key for toggling display of minimap. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 # type: key -# keymap_minimap = KEY_F9 +# keymap_minimap = KEY_KEY_V # Key for taking screenshots. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 @@ -469,7 +469,7 @@ # Key for switching between first- and third-person camera. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 # type: key -# keymap_camera_mode = KEY_F7 +# keymap_camera_mode = KEY_KEY_C # Key for increasing the viewing range. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 @@ -636,10 +636,6 @@ # type: int min: 0 max: 1 # parallax_occlusion_mode = 1 -# Strength of parallax. -# type: float -# 3d_paralax_strength = 0.025 - # Number of parallax occlusion iterations. # type: int # parallax_occlusion_iterations = 4 @@ -823,6 +819,10 @@ # type: enum values: none, anaglyph, interlaced, topbottom, sidebyside, crossview, pageflip # 3d_mode = none +# Strength of 3D mode parallax. +# type: float +# 3d_paralax_strength = 0.025 + # In-game chat console height, between 0.1 (10%) and 1.0 (100%). # type: float min: 0.1 max: 1 # console_height = 0.6 @@ -1071,9 +1071,15 @@ # type: filepath # fallback_font_path = fonts/DroidSansFallbackFull.ttf -# Path to save screenshots at. +# Font size of the recent chat text and chat prompt in point (pt). +# Value 0 will use the default font size. +# type: int +# chat_font_size = 0 + +# Path to save screenshots at. Can be an absolute or relative path. +# The folder will be created if it doesn't already exist. # type: path -# screenshot_path = +# screenshot_path = screenshots # Format of screenshots. # type: enum values: png, jpg, bmp, pcx, ppm, tga @@ -1136,6 +1142,13 @@ # type: int min: 1 max: 65535 # remote_port = 30000 +# Prometheus listener address. +# If minetest is compiled with ENABLE_PROMETHEUS option enabled, +# enable metrics listener for Prometheus on that address. +# Metrics can be fetch on http://127.0.0.1:30000/metrics +# type: string +# prometheus_listener_address = 127.0.0.1:30000 + # Save the map received by the client on disk. # type: bool # enable_local_map_saving = false @@ -1292,6 +1305,11 @@ # type: int # item_entity_ttl = 900 +# Specifies the default stack size of nodes, items and tools. +# Note that mods or games may explicitly set a stack for certain (or all) items. +# type: int +# default_stack_max = 99 + # Enable players getting damage and dying. # type: bool # enable_damage = false @@ -1382,7 +1400,7 @@ # active block stuff, stated in mapblocks (16 nodes). # In active blocks objects are loaded and ABMs run. # This is also the minimum range in which active objects (mobs) are maintained. -# This should be configured together with active_object_range. +# This should be configured together with active_object_send_range_blocks. # type: int # active_block_range = 3 @@ -1662,7 +1680,7 @@ # Set the language. Leave empty to use the system language. # A restart is required after changing this. -# type: enum values: , ar, ca, cs, da, de, dv, el, eo, es, et, eu, fil, fr, hu, id, it, ja, ja_KS, jbo, kk, kn, lo, lt, ms, my, nb, nl, nn, pl, pt, pt_BR, ro, ru, sl, sr_Cyrl, sv, sw, th, tr, uk, vi +# type: enum values: , ar, ca, cs, da, de, dv, el, en, eo, es, et, eu, fil, fr, hu, id, it, ja, ja_KS, jbo, kk, kn, lo, lt, ms, my, nb, nl, nn, pl, pt, pt_BR, ro, ru, sl, sr_Cyrl, sv, sw, th, tr, uk, vi # language = # Level of logging to be written to debug.txt: @@ -1683,6 +1701,10 @@ # type: int # debug_log_size_max = 50 +# Minimal level of logging to be written to chat. +# type: enum values: , none, error, warning, action, info, verbose +# chat_log_level = error + # Enable IPv6 support (for both client and server). # Required for IPv6 connections to work at all. # type: bool @@ -2149,7 +2171,9 @@ ## Mapgen V7 # Map generation attributes specific to Mapgen v7. -# 'ridges' enables the rivers. +# 'ridges': Rivers. +# 'floatlands': Floating land masses in the atmosphere. +# 'caverns': Giant caves deep underground. # type: flags possible values: mountains, ridges, floatlands, caverns, nomountains, noridges, nofloatlands, nocaverns # mgv7_spflags = mountains,ridges,nofloatlands,caverns @@ -2157,6 +2181,51 @@ # type: int # mgv7_mount_zero_level = 0 +# Lower Y limit of floatlands. +# type: int +# mgv7_floatland_ymin = 1024 + +# Upper Y limit of floatlands. +# type: int +# mgv7_floatland_ymax = 4096 + +# Y-distance over which floatlands taper from full density to nothing. +# Tapering starts at this distance from the Y limit. +# For a solid floatland layer, this controls the height of hills/mountains. +# Must be less than or equal to half the distance between the Y limits. +# type: int +# mgv7_floatland_taper = 256 + +# Exponent of the floatland tapering. Alters the tapering behaviour. +# Value = 1.0 creates a uniform, linear tapering. +# Values > 1.0 create a smooth tapering suitable for the default separated +# floatlands. +# Values < 1.0 (for example 0.25) create a more defined surface level with +# flatter lowlands, suitable for a solid floatland layer. +# type: float +# mgv7_float_taper_exp = 2.0 + +# Adjusts the density of the floatland layer. +# Increase value to increase density. Can be positive or negative. +# Value = 0.0: 50% of volume is floatland. +# Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test +# to be sure) creates a solid floatland layer. +# type: float +# mgv7_floatland_density = -0.6 + +# Surface level of optional water placed on a solid floatland layer. +# Water is disabled by default and will only be placed if this value is set +# to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the +# upper tapering). +# ***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***: +# When enabling water placement the floatlands must be configured and tested +# to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other +# required value depending on 'mgv7_np_floatland'), to avoid +# server-intensive extreme water flow and to avoid vast flooding of the +# world surface below. +# type: int +# mgv7_floatland_ywater = -31000 + # Controls width of tunnels, a smaller value creates wider tunnels. # Value >= 10.0 completely disables generation of tunnels and avoids the # intensive noise calculations. @@ -2328,6 +2397,22 @@ # flags = # } +# 3D noise defining structure of floatlands. +# If altered from the default, the noise 'scale' (0.7 by default) may need +# to be adjusted, as floatland tapering functions best when this noise has +# a value range of approximately -2.0 to 2.0. +# type: noise_params_3d +# mgv7_np_floatland = { +# offset = 0, +# scale = 0.7, +# spread = (384, 96, 384), +# seed = 1009, +# octaves = 4, +# persistence = 0.75, +# lacunarity = 1.618, +# flags = +# } + # 3D noise defining giant caverns. # type: noise_params_3d # mgv7_np_cavern = { @@ -3251,19 +3336,16 @@ # emergequeue_limit_total = 512 # Maximum number of blocks to be queued that are to be loaded from file. -# Set to blank for an appropriate amount to be chosen automatically. +# This limit is enforced per player. # type: int # emergequeue_limit_diskonly = 64 # Maximum number of blocks to be queued that are to be generated. -# Set to blank for an appropriate amount to be chosen automatically. +# This limit is enforced per player. # type: int # emergequeue_limit_generate = 64 # Number of emerge threads to use. -# WARNING: Currently there are multiple bugs that may cause crashes when -# 'num_emerge_threads' is larger than 1. Until this warning is removed it is -# strongly recommended this value is set to the default '1'. # Value 0: # - Automatic selection. The number of emerge threads will be # - 'number of processors - 2', with a lower limit of 1. diff -Nru minetest-5.2.0/misc/net.minetest.minetest.appdata.xml minetest-5.3.0/misc/net.minetest.minetest.appdata.xml --- minetest-5.2.0/misc/net.minetest.minetest.appdata.xml 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/misc/net.minetest.minetest.appdata.xml 2020-07-09 21:13:21.000000000 +0000 @@ -62,6 +62,6 @@ minetest sfan5@live.de - + diff -Nru minetest-5.2.0/misc/net.minetest.minetest.desktop minetest-5.3.0/misc/net.minetest.minetest.desktop --- minetest-5.2.0/misc/net.minetest.minetest.desktop 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/misc/net.minetest.minetest.desktop 2020-07-09 21:13:21.000000000 +0000 @@ -11,6 +11,7 @@ Exec=minetest Icon=minetest Terminal=false +PrefersNonDefaultGPU=true Type=Application Categories=Game;Simulation; StartupNotify=false diff -Nru minetest-5.2.0/misc/winresource.rc minetest-5.3.0/misc/winresource.rc --- minetest-5.2.0/misc/winresource.rc 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/misc/winresource.rc 2020-07-09 21:13:21.000000000 +0000 @@ -1,6 +1,8 @@ #include +#include #include #include + #ifndef USE_CMAKE_CONFIG_H #define USE_CMAKE_CONFIG_H #endif @@ -13,6 +15,10 @@ #define BUILDMODE "RUN_IN_PLACE=0" #endif +#ifdef __MINGW32__ +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "minetest.exe.manifest" +#endif + LANGUAGE 0, SUBLANG_NEUTRAL 130 ICON "minetest-icon.ico" diff -Nru minetest-5.2.0/po/ar/minetest.po minetest-5.3.0/po/ar/minetest.po --- minetest-5.2.0/po/ar/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/ar/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-03-01 19:51+0000\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-27 20:41+0000\n" "Last-Translator: abidin toumi \n" "Language-Team: Arabic \n" @@ -18,7 +18,7 @@ "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.0-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -28,9 +28,13 @@ msgid "You died" msgstr "مِت" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "موافق" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" -msgstr "" +msgstr "حدث خطأ في برنامج Lua النصي:" #: builtin/fstk/ui.lua msgid "An error occurred:" @@ -41,10 +45,6 @@ msgstr "القائمة الرئيسية" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "موافق" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "أعد الإتصال" @@ -100,7 +100,7 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "" +msgstr "عطل حزمة التعديلات" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -108,17 +108,23 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "" +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 "" +msgstr "التعديل:" #: builtin/mainmenu/dlg_config_world.lua msgid "No (optional) dependencies" @@ -134,7 +140,7 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "" +msgstr "وصف حزمة التعديلات غير متوفر." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" @@ -162,16 +168,16 @@ msgstr "كل الحزم" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "عُد" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "عُد للقائمة الرئيسة" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "تنزيل وتثبيت $1, يرجى الإنتظار..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "يحمل..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -189,7 +195,7 @@ #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" -msgstr "" +msgstr "التعديلات" #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" @@ -216,15 +222,51 @@ msgid "Update" msgstr "حدِث" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +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 "Download a game, such as Minetest Game, from minetest.net" msgstr "نزِّل لعبة,مثل لعبة Minetest, من minetest.net" @@ -232,28 +274,148 @@ msgid "Download one from minetest.net" msgstr "نزِّل لعبة من minetest.net" +#: 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 +#, fuzzy +msgid "Floating landmasses in the sky" +msgstr "أرض عائمة في السماء" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Floatlands (experimental)" +msgstr "أراضيٌ عائمة (تجريبية)" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" 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 "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/dlg_settings_advanced.lua msgid "Seed" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 "Warning: The Development Test is meant for developers." +msgstr "تحذير: إختبار التطور موجه للمطورين." + +#: builtin/mainmenu/dlg_create_world.lua msgid "World name" msgstr "إسم العالم" @@ -289,21 +451,22 @@ #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "" +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 "" +"اسم حزمة التعديلات هذه مصرح في modpack.conf لذا أي تسمية سيتم استبدالها." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" -msgstr "" +msgstr "(الإعداد بدون وصف)" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "2D Noise" -msgstr "" +msgstr "ضوضاء 2D" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "< Back to Settings page" @@ -335,7 +498,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" -msgstr "" +msgstr "المُعادل" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Persistance" @@ -355,7 +518,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Scale" -msgstr "" +msgstr "تكبير/تصغير" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select directory" @@ -430,19 +593,19 @@ #: builtin/mainmenu/pkgmgr.lua msgid "$1 mods" -msgstr "" +msgstr "$1 تعديلات" #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" -msgstr "" +msgstr "فشل تثبيت $1 في $2" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" -msgstr "" +msgstr "تثبيت تعديل: لا يمكن ايجاد الاسم الحقيقي التعديل$1" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find suitable folder name for modpack $1" -msgstr "" +msgstr "تثبيت تعديل: لا يمكن العصور على اسم مجلد مناسب لحزمة التعديلات $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install: Unsupported file type \"$1\" or broken archive" @@ -466,7 +629,7 @@ #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a mod as a $1" -msgstr "" +msgstr "فشل تثبيت التعديل كـ $1" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a modpack as a $1" @@ -474,31 +637,31 @@ #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "" +msgstr "تصفح المحتوى عبر الانترنت" #: builtin/mainmenu/tab_content.lua msgid "Content" -msgstr "" +msgstr "المحتوى" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" -msgstr "" +msgstr "عطل حزمة الإكساء" #: builtin/mainmenu/tab_content.lua msgid "Information:" -msgstr "" +msgstr "معلومات:" #: builtin/mainmenu/tab_content.lua msgid "Installed Packages:" -msgstr "" +msgstr "الحومة المثبتت:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." -msgstr "" +msgstr "بدون اعتماديات." #: builtin/mainmenu/tab_content.lua msgid "No package description available" -msgstr "" +msgstr "لايتوفر وصف للحزمة" #: builtin/mainmenu/tab_content.lua msgid "Rename" @@ -506,31 +669,31 @@ #: builtin/mainmenu/tab_content.lua msgid "Uninstall Package" -msgstr "" +msgstr "أزل الحزمة" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" -msgstr "" +msgstr "إستعمال حزمة الإكساء" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" -msgstr "" +msgstr "المساهمون النشطون" #: builtin/mainmenu/tab_credits.lua msgid "Core Developers" -msgstr "" +msgstr "المطورون الرئيسيون" #: builtin/mainmenu/tab_credits.lua msgid "Credits" -msgstr "" +msgstr "إشادات" #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" -msgstr "" +msgstr "المساهمون السابقون" #: builtin/mainmenu/tab_credits.lua msgid "Previous Core Developers" -msgstr "" +msgstr "المطورون الرئيسيون السابقون" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" @@ -542,87 +705,93 @@ #: builtin/mainmenu/tab_local.lua msgid "Configure" -msgstr "" +msgstr "اضبط" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy msgid "Creative Mode" -msgstr "" +msgstr "النمط الإبداعي" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua msgid "Enable Damage" -msgstr "" +msgstr "مكن الضرر" #: builtin/mainmenu/tab_local.lua msgid "Host Game" -msgstr "" +msgstr "استضف لعبة" #: builtin/mainmenu/tab_local.lua msgid "Host Server" -msgstr "" +msgstr "استضف خدوم" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "ثبت العابا من ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name/Password" -msgstr "" +msgstr "الاسم\\كلمة المرور" #: builtin/mainmenu/tab_local.lua msgid "New" -msgstr "" +msgstr "جديد" #: builtin/mainmenu/tab_local.lua msgid "No world created or selected!" -msgstr "" +msgstr "لم تنشئ او تحدد عالما!" #: builtin/mainmenu/tab_local.lua msgid "Play Game" -msgstr "" +msgstr "إلعب" #: builtin/mainmenu/tab_local.lua msgid "Port" -msgstr "" +msgstr "المنفذ" #: builtin/mainmenu/tab_local.lua msgid "Select World:" -msgstr "" +msgstr "حدد العالم:" #: builtin/mainmenu/tab_local.lua msgid "Server Port" -msgstr "" +msgstr "منفذ الخدوم" #: builtin/mainmenu/tab_local.lua msgid "Start Game" -msgstr "" +msgstr "ابدأ اللعبة" #: builtin/mainmenu/tab_online.lua msgid "Address / Port" -msgstr "" +msgstr "العنوان \\ المنفذ" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" -msgstr "" +msgstr "اتصل" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy msgid "Creative mode" -msgstr "" +msgstr "النمط الإبداعي" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" -msgstr "" +msgstr "الضرر ممكن" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Del. Favorite" -msgstr "" +msgstr "حذف المفضلة" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Favorite" -msgstr "" +msgstr "المفضلة" #: builtin/mainmenu/tab_online.lua msgid "Join Game" -msgstr "" +msgstr "انضم للعبة" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Name / Password" -msgstr "" +msgstr "الاسم \\ كلمة المرور" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Ping" @@ -630,8 +799,9 @@ #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy msgid "PvP enabled" -msgstr "" +msgstr "قتال اللاعبين ممكن" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -639,7 +809,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" -msgstr "" +msgstr "سحب 3D" #: builtin/mainmenu/tab_settings.lua msgid "4x" @@ -675,11 +845,11 @@ #: builtin/mainmenu/tab_settings.lua src/client/game.cpp msgid "Change Keys" -msgstr "" +msgstr "غيِر المفاتيح" #: builtin/mainmenu/tab_settings.lua msgid "Connected Glass" -msgstr "" +msgstr "زجاج متصل" #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -703,7 +873,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "No Filter" -msgstr "" +msgstr "بدون مرشح" #: builtin/mainmenu/tab_settings.lua msgid "No Mipmap" @@ -711,23 +881,24 @@ #: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" -msgstr "" +msgstr "إبراز العقد" #: builtin/mainmenu/tab_settings.lua msgid "Node Outlining" msgstr "" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "None" -msgstr "" +msgstr "بدون" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" -msgstr "" +msgstr "اوراق معتِمة" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Water" -msgstr "" +msgstr "مياه معتمة" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Parallax Occlusion" @@ -739,7 +910,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Reset singleplayer world" -msgstr "" +msgstr "أعد تعيين عالم اللاعب المنفرد" #: builtin/mainmenu/tab_settings.lua msgid "Screen:" @@ -751,27 +922,28 @@ #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Shaders" -msgstr "" +msgstr "مُظللات" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" -msgstr "" +msgstr "مظللات (غير متوفر)" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Simple Leaves" -msgstr "" +msgstr "أوراق بسيطة" #: builtin/mainmenu/tab_settings.lua msgid "Smooth Lighting" -msgstr "" +msgstr "إضاءة سلسة" #: builtin/mainmenu/tab_settings.lua msgid "Texturing:" -msgstr "" +msgstr "الإكساء:" #: builtin/mainmenu/tab_settings.lua msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" +msgstr "لاستخدام المظللات يجب استخدام تعريف OpenGL." #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" @@ -787,7 +959,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" -msgstr "" +msgstr "اوراق متموجة" #: builtin/mainmenu/tab_settings.lua msgid "Waving Liquids" @@ -795,7 +967,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" -msgstr "" +msgstr "نباتات متموجة" #: builtin/mainmenu/tab_settings.lua msgid "Yes" @@ -803,7 +975,7 @@ #: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" -msgstr "" +msgstr "اضبط التعديلات" #: builtin/mainmenu/tab_simple_main.lua #, fuzzy @@ -832,11 +1004,11 @@ #: src/client/client.cpp msgid "Loading textures..." -msgstr "" +msgstr "يحمل الإكساء..." #: src/client/client.cpp msgid "Rebuilding shaders..." -msgstr "" +msgstr "يعيد بناء المظلِلات..." #: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" @@ -848,7 +1020,7 @@ #: src/client/clientlauncher.cpp msgid "Invalid gamespec." -msgstr "" +msgstr "مواصفات اللعبة غير صالحة." #: src/client/clientlauncher.cpp #, fuzzy @@ -857,7 +1029,7 @@ #: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." -msgstr "" +msgstr "بدون عالم محدد وعنوان معطى. لاشيء لفعله." #: src/client/clientlauncher.cpp msgid "Player name too long." @@ -1190,6 +1362,14 @@ 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 "" @@ -1221,7 +1401,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "" @@ -1799,6 +1979,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "" @@ -1809,6 +1993,14 @@ 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 "" @@ -1857,7 +2049,7 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp @@ -1902,6 +2094,16 @@ 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 "Advanced" msgstr "" @@ -1915,10 +2117,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "" @@ -2168,10 +2366,18 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" @@ -2437,6 +2643,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2745,6 +2955,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "" @@ -2854,6 +3074,34 @@ 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 "Fly key" msgstr "" @@ -2907,6 +3155,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4202,14 +4456,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4273,6 +4519,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4339,7 +4589,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4427,10 +4679,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4498,13 +4746,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4589,6 +4837,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4747,9 +4999,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4826,10 +5075,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4839,7 +5084,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4873,6 +5120,14 @@ 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 "" @@ -4941,6 +5196,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5379,6 +5646,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5401,6 +5675,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5412,15 +5690,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5537,7 +5825,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5690,6 +5978,10 @@ 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 "" @@ -6009,6 +6301,14 @@ 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 "" @@ -6039,3 +6339,12 @@ #: src/settings_translation_file.cpp msgid "cURL timeout" msgstr "" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "تنزيل وتثبيت $1, يرجى الإنتظار..." + +#~ msgid "Back" +#~ msgstr "عُد" + +#~ msgid "Ok" +#~ msgstr "موافق" diff -Nru minetest-5.2.0/po/be/minetest.po minetest-5.3.0/po/be/minetest.po --- minetest-5.2.0/po/be/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/be/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Belarusian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2019-11-19 23:04+0000\n" "Last-Translator: Viktar Vauchkevich \n" "Language-Team: Belarusian 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 "FPS in pause menu" msgstr "FPS у меню паўзы" @@ -3034,6 +3266,41 @@ msgstr "Фіксацыя віртуальнага джойсціка" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Шчыльнасць гор лятучых астравоў" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Максімальная Y падзямелля" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Мінімальная Y падзямелля" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Базавы шум лятучых астравоў" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Шчыльнасць гор лятучых астравоў" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Базавы шум лятучых астравоў" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Узровень лятучых астравоў" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Клавіша палёту" @@ -3087,6 +3354,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4715,14 +4988,6 @@ msgstr "Цэнтр сярэдняга ўздыму крывой святла" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Абмежаванне чэргаў на дыску" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4798,6 +5063,11 @@ msgstr "Ніжні ліміт Y для падзямелляў." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Ніжні ліміт Y для падзямелляў." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Скрыпт галоўнага меню" @@ -4882,9 +5152,12 @@ "а параметр «jungles» ігнаруецца." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "Атрыбуты генерацыі для генератара 7.\n" "«ridges» уключае рэкі." @@ -4974,10 +5247,6 @@ msgstr "Генератар мапы: адладка" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Генератар мапы: параметры" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Назва генератара мапы" @@ -5049,17 +5318,19 @@ msgstr "Максімальная колькасць блокаў, што можна дадаць у чаргу загрузкі." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Максімальная колькасць блокаў, што можна дадаць у чаргу генерацыі.\n" "Пакінце пустым для аўтаматычнага выбару неабходнага значэння." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Максімальная колькасць блокаў у чарзе на загрузку з файла.\n" "Пакінце пустым для аўтаматычнага выбару неабходнага значэння." @@ -5159,6 +5430,10 @@ msgstr "Метад падсвятлення абранага аб'екта." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Мінімапа" @@ -5330,11 +5605,9 @@ msgstr "Колькасць узнікаючых патокаў" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5433,10 +5706,6 @@ msgstr "Маштаб паралакснай аклюзіі" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Інтэнсіўнасць паралакснай аклюзіі" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5446,8 +5715,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Каталог для захоўвання здымкаў экрана." +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 "" @@ -5482,6 +5753,15 @@ msgstr "Паўза пры страце фокусу" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "Абмежаванне чэргаў на генерацыю" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Фізіка" @@ -5562,6 +5842,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -6082,6 +6374,13 @@ "Недасяжныя файлы будуць спампоўвацца звычайным чынам." #: 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 #, fuzzy msgid "" "Spread of light curve boost range.\n" @@ -6108,6 +6407,11 @@ msgstr "Крок шуму распаўсюджвання гор" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "Моц паралакса." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Моц згенераваных мапаў нармаляў." @@ -6119,10 +6423,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Моц паралакса." - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "Строгая праверка пратакола" @@ -6131,6 +6431,20 @@ 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 the 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 "Сінхронны SQLite" @@ -6256,6 +6570,7 @@ "Глядзіце поўны спіс прывілеяў у /privs." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The radius of the volume of blocks around every player that is subject to " "the\n" @@ -6263,7 +6578,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" "Радыус аб'ёму блокаў вакол кожнага гульца, у якім дзейнічаюць\n" "актыўныя блокі, вызначаны ў блоках мапы (16 блокаў).\n" @@ -6460,6 +6775,11 @@ msgstr "Верхні ліміт Y для падзямелляў." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Верхні ліміт Y для падзямелляў." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Аб'ёмныя аблокі замест плоскіх." @@ -6840,6 +7160,14 @@ msgstr "Y-адлегласць, на якой пячора пашырыцца да поўнага памеру." #: 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 "Y-узровень сярэдняй паверхні рэльефу." @@ -6872,174 +7200,180 @@ msgstr "Таймаўт cURL" #~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." +#~ "Map generation attributes specific to Mapgen v5.\n" +#~ "Flags that are not enabled are not modified from the default.\n" +#~ "Flags starting with 'no' are used to explicitly disable them." #~ msgstr "" -#~ "Наладка гама-кадавання для светлавых табліц. Высокія значэнні — больш " -#~ "ярчэйшыя.\n" -#~ "Гэты параметр прызначаны толькі для кліента і ігнаруецца серверам." - -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "Кіруе звужэннем астравоў горнага тыпу ніжэй сярэдняй кропкі." +#~ "Атрыбуты генерацыі мапы для генератара мапы 5.\n" +#~ "Нявызначаныя атрыбуты прадвызначана не змяняюцца.\n" +#~ "Атрыбуты, што пачынаюцца з 'no' выкарыстоўваюцца для іх выключэння." -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Цэнтр сярэдняга ўздыму крывой святла." +#~ msgid "Toggle Cinematic" +#~ msgstr "Кінематаграфічнасць" #~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ "Map generation attributes specific to Mapgen Carpathian.\n" +#~ "Flags that are not enabled are not modified from the default.\n" +#~ "Flags starting with 'no' are used to explicitly disable them." #~ msgstr "" -#~ "Кіруе шчыльнасцю горнага рэльефу лятучых астравоў.\n" -#~ "Гэты зрух дадаецца да значэння 'np_mountain'." +#~ "Атрыбуты генерацыі мапы для генератара мапы \"Карпаты\".\n" +#~ "Нявызначаныя атрыбуты прадвызначана не змяняюцца.\n" +#~ "Атрыбуты, што пачынаюцца з \"no\", выкарыстоўваюцца для іх выключэння." -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Кіруе шырынёй тунэляў. Меншае значэнне стварае больш шырокія тунэлі." +#~ msgid "Content Store" +#~ msgstr "Крама дадаткаў" -#~ msgid "Darkness sharpness" -#~ msgstr "Рэзкасць цемры" +#~ msgid "Select Package File:" +#~ msgstr "Абраць файл пакунка:" + +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Y верхняга ліміту лавы ў шырокіх пячорах." + +#~ msgid "Waving Water" +#~ msgstr "Хваляванне вады" + +#~ msgid "Whether dungeons occasionally project from the terrain." +#~ msgstr "Выступ падзямелляў па-над рэльефам." #~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ "Map generation attributes specific to Mapgen v7.\n" +#~ "'ridges' enables the rivers.\n" +#~ "Flags that are not enabled are not modified from the default.\n" +#~ "Flags starting with 'no' are used to explicitly disable them." #~ msgstr "" -#~ "Вызначае вобласці гладкага рэльефу лятучых астравоў.\n" -#~ "Гладкая паверхня з'яўляецца, калі шум больш нуля." +#~ "Атрыбуты генерацыі мапы для генератара мапы 7.\n" +#~ "Параметр \"ridges\" (хрыбты) ўключае рэкі.\n" +#~ "Нявызначаныя параметры прадвызначана не змяняюцца.\n" +#~ "Параметры, што пачынаюцца з \"no\", выкарыстоўваюцца для выключэння." + +#~ msgid "Projecting dungeons" +#~ msgstr "Праектаванне падзямелляў" #~ msgid "" -#~ "Deprecated, define and locate cave liquids using biome definitions " -#~ "instead.\n" -#~ "Y of upper limit of lava in large caves." +#~ "If enabled together with fly mode, makes move directions relative to the " +#~ "player's pitch." #~ msgstr "" -#~ "Састарэлы. Вызначае і размяшчае пячорныя вадкасці з выкарыстаннем " -#~ "азначэнняў біёму.\n" -#~ "Y верхняй мяжы лавы ў вялікіх пячорах." +#~ "Калі ўключана адначасова з рэжымам палёту, то вызначае напрамак руху " +#~ "адносна кроку гульца." -#~ msgid "Enable VBO" -#~ msgstr "Уключыць VBO" +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Y-узровень, да якога распаўсюджваюцца цені лятучых астравоў." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Уключае кінематаграфічнае танальнае адлюстраванне" +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "Y-узровень сярэдняй кропкі і паверхні азёр лятучых астравоў." -#~ msgid "Floatland base height noise" -#~ msgstr "Шум базавай вышыні лятучых астравоў" +#~ msgid "Waving water" +#~ msgstr "Хваляванне вады" -#~ msgid "Floatland base noise" -#~ msgstr "Базавы шум лятучых астравоў" +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgstr "" +#~ "Варыяцыя вышыні пагоркаў і глыбінь азёр на гладкай мясцовасці лятучых " +#~ "астравоў." -#~ msgid "Floatland level" -#~ msgstr "Узровень лятучых астравоў" +#~ msgid "" +#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgstr "" +#~ "Тыповая максімальная вышыня, вышэй і ніжэй сярэдняй кропкі гор лятучых " +#~ "астравоў." -#~ msgid "Floatland mountain density" -#~ msgstr "Шчыльнасць гор лятучых астравоў" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Гэты шрыфт будзе выкарыстоўваецца для некаторых моў." -#~ msgid "Floatland mountain exponent" -#~ msgstr "Шчыльнасць гор лятучых астравоў" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Моц сярэдняга ўздыму крывой святла." -#~ msgid "Floatland mountain height" -#~ msgstr "Вышыня гор на лятучых астравоў" +#~ msgid "Shadow limit" +#~ msgstr "Ліміт ценяў" -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "Празрыстасць цені шрыфту (ад 0 да 255)." +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Шлях да TrueTypeFont ці растравага шрыфту." -#~ msgid "Gamma" -#~ msgstr "Гама" +#~ msgid "Lightness sharpness" +#~ msgstr "Рэзкасць паваротлівасці" + +#~ msgid "Lava depth" +#~ msgstr "Глыбіня лавы" #~ msgid "IPv6 support." #~ msgstr "Падтрымка IPv6." -#~ msgid "Lava depth" -#~ msgstr "Глыбіня лавы" +#~ msgid "Gamma" +#~ msgstr "Гама" -#~ msgid "Lightness sharpness" -#~ msgstr "Рэзкасць паваротлівасці" +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "Празрыстасць цені шрыфту (ад 0 да 255)." -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Шлях да TrueTypeFont ці растравага шрыфту." +#~ msgid "Floatland mountain height" +#~ msgstr "Вышыня гор на лятучых астравоў" -#~ msgid "Shadow limit" -#~ msgstr "Ліміт ценяў" +#~ msgid "Floatland base height noise" +#~ msgstr "Шум базавай вышыні лятучых астравоў" -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Моц сярэдняга ўздыму крывой святла." +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Уключае кінематаграфічнае танальнае адлюстраванне" -#~ msgid "This font will be used for certain languages." -#~ msgstr "Гэты шрыфт будзе выкарыстоўваецца для некаторых моў." +#~ msgid "Enable VBO" +#~ msgstr "Уключыць VBO" #~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ "Deprecated, define and locate cave liquids using biome definitions " +#~ "instead.\n" +#~ "Y of upper limit of lava in large caves." #~ msgstr "" -#~ "Тыповая максімальная вышыня, вышэй і ніжэй сярэдняй кропкі гор лятучых " -#~ "астравоў." +#~ "Састарэлы. Вызначае і размяшчае пячорныя вадкасці з выкарыстаннем " +#~ "азначэнняў біёму.\n" +#~ "Y верхняй мяжы лавы ў вялікіх пячорах." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." #~ msgstr "" -#~ "Варыяцыя вышыні пагоркаў і глыбінь азёр на гладкай мясцовасці лятучых " -#~ "астравоў." - -#~ msgid "Waving water" -#~ msgstr "Хваляванне вады" +#~ "Вызначае вобласці гладкага рэльефу лятучых астравоў.\n" +#~ "Гладкая паверхня з'яўляецца, калі шум больш нуля." -#~ msgid "Y-level of floatland midpoint and lake surface." -#~ msgstr "Y-узровень сярэдняй кропкі і паверхні азёр лятучых астравоў." +#~ msgid "Darkness sharpness" +#~ msgstr "Рэзкасць цемры" -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Y-узровень, да якога распаўсюджваюцца цені лятучых астравоў." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "" +#~ "Кіруе шырынёй тунэляў. Меншае значэнне стварае больш шырокія тунэлі." #~ msgid "" -#~ "If enabled together with fly mode, makes move directions relative to the " -#~ "player's pitch." +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." #~ msgstr "" -#~ "Калі ўключана адначасова з рэжымам палёту, то вызначае напрамак руху " -#~ "адносна кроку гульца." +#~ "Кіруе шчыльнасцю горнага рэльефу лятучых астравоў.\n" +#~ "Гэты зрух дадаецца да значэння 'np_mountain'." -#~ msgid "Projecting dungeons" -#~ msgstr "Праектаванне падзямелляў" +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Цэнтр сярэдняга ўздыму крывой святла." + +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." +#~ msgstr "Кіруе звужэннем астравоў горнага тыпу ніжэй сярэдняй кропкі." #~ msgid "" -#~ "Map generation attributes specific to Mapgen v7.\n" -#~ "'ridges' enables the rivers.\n" -#~ "Flags that are not enabled are not modified from the default.\n" -#~ "Flags starting with 'no' are used to explicitly disable them." +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." #~ msgstr "" -#~ "Атрыбуты генерацыі мапы для генератара мапы 7.\n" -#~ "Параметр \"ridges\" (хрыбты) ўключае рэкі.\n" -#~ "Нявызначаныя параметры прадвызначана не змяняюцца.\n" -#~ "Параметры, што пачынаюцца з \"no\", выкарыстоўваюцца для выключэння." - -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "Выступ падзямелляў па-над рэльефам." +#~ "Наладка гама-кадавання для светлавых табліц. Высокія значэнні — больш " +#~ "ярчэйшыя.\n" +#~ "Гэты параметр прызначаны толькі для кліента і ігнаруецца серверам." -#~ msgid "Waving Water" -#~ msgstr "Хваляванне вады" +#~ msgid "Path to save screenshots at." +#~ msgstr "Каталог для захоўвання здымкаў экрана." -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Y верхняга ліміту лавы ў шырокіх пячорах." +#~ msgid "Parallax occlusion strength" +#~ msgstr "Інтэнсіўнасць паралакснай аклюзіі" -#~ msgid "Select Package File:" -#~ msgstr "Абраць файл пакунка:" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Абмежаванне чэргаў на дыску" -#~ msgid "Content Store" -#~ msgstr "Крама дадаткаў" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Спампоўванне і ўсталёўка $1. Калі ласка, пачакайце…" -#~ msgid "" -#~ "Map generation attributes specific to Mapgen Carpathian.\n" -#~ "Flags that are not enabled are not modified from the default.\n" -#~ "Flags starting with 'no' are used to explicitly disable them." -#~ msgstr "" -#~ "Атрыбуты генерацыі мапы для генератара мапы \"Карпаты\".\n" -#~ "Нявызначаныя атрыбуты прадвызначана не змяняюцца.\n" -#~ "Атрыбуты, што пачынаюцца з \"no\", выкарыстоўваюцца для іх выключэння." +#~ msgid "Back" +#~ msgstr "Назад" -#~ msgid "Toggle Cinematic" -#~ msgstr "Кінематаграфічнасць" - -#~ msgid "" -#~ "Map generation attributes specific to Mapgen v5.\n" -#~ "Flags that are not enabled are not modified from the default.\n" -#~ "Flags starting with 'no' are used to explicitly disable them." -#~ msgstr "" -#~ "Атрыбуты генерацыі мапы для генератара мапы 5.\n" -#~ "Нявызначаныя атрыбуты прадвызначана не змяняюцца.\n" -#~ "Атрыбуты, што пачынаюцца з 'no' выкарыстоўваюцца для іх выключэння." +#~ msgid "Ok" +#~ msgstr "Добра" diff -Nru minetest-5.2.0/po/ca/minetest.po minetest-5.3.0/po/ca/minetest.po --- minetest-5.2.0/po/ca/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/ca/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Catalan (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: Catalan 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 "FPS in pause menu" msgstr "" @@ -3055,6 +3277,35 @@ 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 +#, fuzzy +msgid "Floatland noise" +msgstr "Soroll de cova #1" + +#: 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 "Fly key" msgstr "" @@ -3108,6 +3359,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4624,14 +4881,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4696,6 +4945,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Límit absolut de cues emergents" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4763,7 +5017,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4860,10 +5116,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4931,13 +5183,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -5022,6 +5274,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -5181,9 +5437,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5261,10 +5514,6 @@ msgstr "Oclusió de paral·laxi" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5274,7 +5523,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -5308,6 +5559,14 @@ 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 "" @@ -5377,6 +5636,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5846,6 +6117,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5868,6 +6146,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5879,15 +6161,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -6005,7 +6297,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6165,6 +6457,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Límit absolut de cues emergents" + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "" @@ -6493,6 +6790,14 @@ 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 "" @@ -6524,6 +6829,20 @@ msgid "cURL timeout" msgstr "" +#~ msgid "Toggle Cinematic" +#~ msgstr "Activar Cinematogràfic" + +#, fuzzy +#~ msgid "Select Package File:" +#~ msgstr "Selecciona el fitxer del mod:" + +#~ msgid "Enable VBO" +#~ msgstr "Activar VBO" + +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "" +#~ "Controla l'amplada dels túnels, un valor més petit crea túnels més amples." + #, fuzzy #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " @@ -6534,16 +6853,12 @@ #~ "petits n'augmentaràn la brillantor.\n" #~ "Aquesta configuració només afecta al client, el servidor l'ignora." -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Controla l'amplada dels túnels, un valor més petit crea túnels més amples." - -#~ msgid "Enable VBO" -#~ msgstr "Activar VBO" - #, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "Selecciona el fitxer del mod:" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Descarregant $1, si us plau esperi ..." -#~ msgid "Toggle Cinematic" -#~ msgstr "Activar Cinematogràfic" +#~ msgid "Back" +#~ msgstr "Enrere" + +#~ msgid "Ok" +#~ msgstr "D'acord" diff -Nru minetest-5.2.0/po/cs/minetest.po minetest-5.3.0/po/cs/minetest.po --- minetest-5.2.0/po/cs/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/cs/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Czech (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-02-24 23:32+0000\n" -"Last-Translator: Vojtěch Šamla \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-08 20:47+0000\n" +"Last-Translator: sfan5 \n" "Language-Team: Czech \n" "Language: cs\n" @@ -12,16 +12,20 @@ "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.0-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" -msgstr "Vzkřísit" +msgstr "Oživit" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "You died" msgstr "Zemřel jsi" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Nastala chyba v Lua skriptu:" @@ -35,10 +39,6 @@ msgstr "Hlavní nabídka" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "OK" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Znovu se připojit" @@ -115,6 +115,10 @@ "jsou pouze znaky [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" @@ -160,16 +164,17 @@ msgstr "Všechny balíčky" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Zpět" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Zpět do hlavní nabídky" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Stahuji a instaluji $1, prosím čekejte..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Downloading..." +msgstr "Nahrávám..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -191,7 +196,7 @@ #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "Nelze načíst žádné balíčky" +msgstr "Nelze načíst žádný balíček" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" @@ -214,15 +219,57 @@ msgid "Update" msgstr "Aktualizovat" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Svět s názvem \"$1\" už existuje" #: 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 "Výškové ochlazení" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Altitude dry" +msgstr "Výškové ochlazení" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biome blending" +msgstr "Šum biomů" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biomes" +msgstr "Šum biomů" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caverns" +msgstr "Šum jeskynních dutin" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caves" +msgstr "Oktávy" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Vytvořit" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "Iterace" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Stáhněte si z minetest.net hru, například Minetest Game" @@ -230,25 +277,151 @@ msgid "Download one from minetest.net" msgstr "Stáhněte si jednu z minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Dungeons" +msgstr "Šum hřbetů" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Floating landmasses in the sky" +msgstr "Koncentrace hor na létajících ostrovech" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Floatlands (experimental)" +msgstr "Výška létajících ostrovů" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Hra" +#: 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 +#, fuzzy +msgid "Humid rivers" +msgstr "Ovladač grafiky" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +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 "Generátor mapy" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Nastavení generátoru mapy" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Mapgen-specific flags" +msgstr "Mapgen údolí" + +#: 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 "Není vybrána žádná hra" #: 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 +#, fuzzy +msgid "Rivers" +msgstr "Velikost řeky" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Seedové číslo" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Vary river depth" +msgstr "Hloubka řeky" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "Varování: \"Minimal development test\" je zamýšlen pouze pro vývojáře." #: builtin/mainmenu/dlg_create_world.lua @@ -326,9 +499,8 @@ msgstr "Zapnuto" #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "Lacunarity" -msgstr "Zabezpečení" +msgstr "Lakunarita" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Octaves" @@ -336,11 +508,11 @@ #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" -msgstr "" +msgstr "Odstup" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Persistance" -msgstr "" +msgstr "Urputnost" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid integer." @@ -356,12 +528,11 @@ #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Scale" -msgstr "" +msgstr "Přiblížení" #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "Select directory" -msgstr "Vybrat soubor s modem:" +msgstr "Vyberte adresář" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select file" @@ -385,7 +556,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X spread" -msgstr "" +msgstr "Rozptyl X" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y" @@ -393,7 +564,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y spread" -msgstr "" +msgstr "Rozptyl Y" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z" @@ -401,7 +572,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z spread" -msgstr "" +msgstr "Rozptyl Z" #. ~ "absvalue" is a noise parameter flag. #. It is short for "absolute value". @@ -409,15 +580,14 @@ #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "absvalue" -msgstr "" +msgstr "absolutnihodnota" #. ~ "defaults" is a noise parameter flag. #. It describes the default processing options #. for noise settings in main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "defaults" -msgstr "Výchozí hra" +msgstr "Výchozí hodnoty" #. ~ "eased" is a noise parameter flag. #. It is used to make the map smoother and @@ -425,117 +595,98 @@ #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "eased" -msgstr "" +msgstr "vyhlazení" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "$1 (Enabled)" -msgstr "Zapnuto" +msgstr "$1 (Povoleno)" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "$1 mods" -msgstr "Režim 3D zobrazení" +msgstr "$1 rozšíření" #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" msgstr "Selhala instalace $1 do $2" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install Mod: Unable to find real mod name for: $1" -msgstr "Instalace modu: nenašel jsem skutečné jméno modu: $1" +msgstr "Instalace rozšíření: nenašel jsem skutečné jméno modu: $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -"Instalace modu: nenalezen vhodný adresář s příslušným názvem pro balíček $1" +"Instalace rozšíření: nenalezen vhodný adresář s příslušným názvem pro " +"balíček $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install: Unsupported file type \"$1\" or broken archive" msgstr "" -"\n" -"Instalace modu: špatný archiv nebo nepodporovaný typ souboru \"$1\"" +"Instalace rozšíření: poškozený archiv nebo nepodporovaný typ souboru \"$1\"" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install: file: \"$1\"" -msgstr "Instalace modu: ze souboru: \"$1\"" +msgstr "Instalace: soubor: \"$1\"" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to find a valid mod or modpack" -msgstr "" -"Instalace modu: nenalezen vhodný adresář s příslušným názvem pro balíček $1" +msgstr "Platné rozšíření nebylo nalezeno" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a $1 as a texture pack" -msgstr "Selhala instalace $1 do $2" +msgstr "Selhala instalace $1 jako rozšíření textur" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a game as a $1" -msgstr "Selhala instalace $1 do $2" +msgstr "Selhala instalace hru jako $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a mod as a $1" -msgstr "Selhala instalace $1 do $2" +msgstr "Selhala instalace rozšíření $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a modpack as a $1" -msgstr "Selhala instalace $1 do $2" +msgstr "Selhala instalace rozšíření $1" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "" +msgstr "Procházet online obsah" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content" -msgstr "Pokračovat" +msgstr "Obsah" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Disable Texture Pack" -msgstr "Vyberte balík textur:" +msgstr "Zakázat Rozšíření Textur" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Information:" -msgstr "Informace o modu:" +msgstr "Informace:" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Installed Packages:" -msgstr "Nainstalované mody:" +msgstr "Instalované balíčky:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." msgstr "Žádné závislosti." #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "No package description available" -msgstr "Mod nemá popis" +msgstr "Balíček nemá žádný popis" #: builtin/mainmenu/tab_content.lua msgid "Rename" msgstr "Přejmenovat" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Uninstall Package" -msgstr "Odinstalovat vybraný mod" +msgstr "Odinstalovat balíček" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Use Texture Pack" -msgstr "Balíky textur" +msgstr "Použít Rozšíření Textur" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" @@ -543,7 +694,7 @@ #: builtin/mainmenu/tab_credits.lua msgid "Core Developers" -msgstr "Klíčoví vývojáři" +msgstr "Hlavní vývojáři" #: builtin/mainmenu/tab_credits.lua msgid "Credits" @@ -563,7 +714,7 @@ #: builtin/mainmenu/tab_local.lua msgid "Bind Address" -msgstr "Svázat adresu" +msgstr "Poslouchat na Adrese" #: builtin/mainmenu/tab_local.lua msgid "Configure" @@ -586,6 +737,10 @@ msgstr "Založit server" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Jméno/Heslo" @@ -642,9 +797,8 @@ msgstr "Oblíbené" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Join Game" -msgstr "Založit hru" +msgstr "Připojit se ke hře" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Name / Password" @@ -657,7 +811,7 @@ #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "PvP enabled" -msgstr "PvP povoleno" +msgstr "PvP (hráč proti hráči) povoleno" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -676,9 +830,8 @@ msgstr "8x" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "All Settings" -msgstr "Nastavení" +msgstr "Všechna Nastavení" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" @@ -689,9 +842,8 @@ msgstr "Jste si jisti, že chcete resetovat místní svět?" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Autosave Screen Size" -msgstr "Ukládat velikost obr." +msgstr "Pamatovat si velikost obrazovky" #: builtin/mainmenu/tab_settings.lua msgid "Bilinear Filter" @@ -714,9 +866,8 @@ msgstr "Vícevrstevné listí" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Generate Normal Maps" -msgstr "Generovat normálové mapy" +msgstr "Generovat Normální Mapy" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -784,7 +935,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" -msgstr "" +msgstr "Shadery (není dostupné)" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" @@ -807,9 +958,8 @@ msgstr "Tone mapping" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Touchthreshold: (px)" -msgstr "Dosah dotyku (px)" +msgstr "Dosah dotyku: (px)" #: builtin/mainmenu/tab_settings.lua msgid "Trilinear Filter" @@ -820,9 +970,8 @@ msgstr "Vlnění listů" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Waving Liquids" -msgstr "Vlnění bloků" +msgstr "Vlnění Kapalin" #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" @@ -899,7 +1048,7 @@ #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " -msgstr "" +msgstr "Soubor s heslem nebylo možné otevřít: " #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " @@ -959,42 +1108,36 @@ msgstr "- Název serveru: " #: src/client/game.cpp -#, fuzzy msgid "Automatic forward disabled" -msgstr "Vpřed" +msgstr "Automatický posun vpřed zakázán" #: src/client/game.cpp -#, fuzzy msgid "Automatic forward enabled" -msgstr "Vpřed" +msgstr "Automatický posun vpřed povolen" #: src/client/game.cpp -#, fuzzy msgid "Camera update disabled" -msgstr "Klávesa pro přepínání aktualizace pohledu" +msgstr "Aktualizace kamery (pohledu) zakázána" #: src/client/game.cpp -#, fuzzy msgid "Camera update enabled" -msgstr "Klávesa pro přepínání aktualizace pohledu" +msgstr "Aktualizace kamery (pohledu) povolena" #: src/client/game.cpp msgid "Change Password" msgstr "Změnit heslo" #: src/client/game.cpp -#, fuzzy msgid "Cinematic mode disabled" -msgstr "Klávesa plynulého pohybu kamery" +msgstr "Filmový režim zakázán" #: src/client/game.cpp -#, fuzzy msgid "Cinematic mode enabled" -msgstr "Klávesa plynulého pohybu kamery" +msgstr "Filmový režim povolen" #: src/client/game.cpp msgid "Client side scripting is disabled" -msgstr "" +msgstr "Uživatelské skripty nejsou povoleny" #: src/client/game.cpp msgid "Connecting to server..." @@ -1047,16 +1190,15 @@ #: src/client/game.cpp msgid "Debug info and profiler graph hidden" -msgstr "" +msgstr "Ladící informace a profilovací graf skryty" #: src/client/game.cpp -#, fuzzy msgid "Debug info shown" -msgstr "Klávesa pro zobrazení ladících informací" +msgstr "Ladící informace zobrazeny" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "" +msgstr "Ladící informace, profilovací graf a obrysy skryty" #: src/client/game.cpp msgid "" @@ -1088,11 +1230,11 @@ #: src/client/game.cpp msgid "Disabled unlimited viewing range" -msgstr "" +msgstr "Neomezený pohled zakázán" #: src/client/game.cpp msgid "Enabled unlimited viewing range" -msgstr "" +msgstr "Neomezený pohled povolen" #: src/client/game.cpp msgid "Exit to Menu" @@ -1103,42 +1245,36 @@ msgstr "Ukončit hru" #: src/client/game.cpp -#, fuzzy msgid "Fast mode disabled" -msgstr "Rychlost v turbo režimu" +msgstr "Rychlý režim zakázán" #: src/client/game.cpp -#, fuzzy msgid "Fast mode enabled" -msgstr "Rychlost v turbo režimu" +msgstr "Rychlý režim povolen" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "" +msgstr "Rychlý režim povolen (pozn.: nemáte oprávnění 'fast')" #: src/client/game.cpp -#, fuzzy msgid "Fly mode disabled" -msgstr "Rychlost v turbo režimu" +msgstr "Režim létání zakázán" #: src/client/game.cpp -#, fuzzy msgid "Fly mode enabled" -msgstr "Zranění povoleno" +msgstr "Režim létání povolen" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "" +msgstr "Režim létání povolen (pozn.: nemáte oprávnění 'fly')" #: src/client/game.cpp -#, fuzzy msgid "Fog disabled" -msgstr "Je-li zakázáno " +msgstr "Mlha je zakázána" #: src/client/game.cpp -#, fuzzy msgid "Fog enabled" -msgstr "zapnuto" +msgstr "Mlha je povolena" #: src/client/game.cpp msgid "Game info:" @@ -1170,49 +1306,47 @@ #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" -msgstr "" +msgstr "Minimapa je aktuálně zakázána" #: src/client/game.cpp -#, fuzzy msgid "Minimap hidden" -msgstr "Minimapa" +msgstr "Minimapa je skryta" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x1" -msgstr "" +msgstr "Minimapa v režimu radar, Přiblížení x1" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x2" -msgstr "" +msgstr "Minimapa v režimu radar, Přiblížení x2" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x4" -msgstr "" +msgstr "Minimapa v režimu radar, Přiblížení x4" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x1" -msgstr "" +msgstr "Minimapa v režimu povrch, Přiblížení x1" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x2" -msgstr "" +msgstr "Minimapa v režimu povrch, Přiblížení x2" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x4" -msgstr "" +msgstr "Minimapa v režimu povrch, Přiblížení x4" #: src/client/game.cpp msgid "Noclip mode disabled" -msgstr "" +msgstr "Režim bez ořezu zakázán" #: src/client/game.cpp -#, fuzzy msgid "Noclip mode enabled" -msgstr "Zranění povoleno" +msgstr "Režim bez ořezu povolen" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "" +msgstr "Režim bez ořezu povolen (pozn.: nemáte oprávnění 'noclip')" #: src/client/game.cpp msgid "Node definitions..." @@ -1228,15 +1362,15 @@ #: src/client/game.cpp msgid "Pitch move mode disabled" -msgstr "" +msgstr "Posun v režimu Pitch zakázán" #: src/client/game.cpp msgid "Pitch move mode enabled" -msgstr "" +msgstr "Posun v režimu Pitch povolen" #: src/client/game.cpp msgid "Profiler graph shown" -msgstr "" +msgstr "Profilovací graf zobrazen" #: src/client/game.cpp msgid "Remote server" @@ -1259,29 +1393,35 @@ msgstr "Hlasitost" #: src/client/game.cpp -#, fuzzy msgid "Sound muted" -msgstr "Hlasitost" +msgstr "Zvuk vypnut" + +#: 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 -#, fuzzy msgid "Sound unmuted" -msgstr "Hlasitost" +msgstr "Zvuk zapnut" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d" -msgstr "Hlasitost nastavena na %d%%" +msgstr "Omezení dohlédnutí upraveno na %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at maximum: %d" -msgstr "" +msgstr "Omezení dohlédnutí na maximu: %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at minimum: %d" -msgstr "" +msgstr "Omezení dohlédnutí na minimu: %d" #: src/client/game.cpp #, c-format @@ -1290,50 +1430,48 @@ #: src/client/game.cpp msgid "Wireframe shown" -msgstr "" +msgstr "Obrysy zobrazeny" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" -msgstr "" +msgstr "Přiblížení je aktuálně zakázáno" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "OK" #: src/client/gameui.cpp -#, fuzzy msgid "Chat hidden" -msgstr "Klávesa chatu" +msgstr "Chat skryt" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "" +msgstr "Chat zobrazen" #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "" +msgstr "Ovládací prvky skryty" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "" +msgstr "Ovládací prvky zobrazeny" #: src/client/gameui.cpp msgid "Profiler hidden" -msgstr "" +msgstr "Profilování skryto" #: src/client/gameui.cpp #, c-format msgid "Profiler shown (page %d of %d)" -msgstr "" +msgstr "Profilování zobrazeno (strana %d z %d)" #: src/client/keycode.cpp msgid "Apps" msgstr "Aplikace" #: src/client/keycode.cpp -#, fuzzy msgid "Backspace" -msgstr "Zpět" +msgstr "Backspace" #: src/client/keycode.cpp msgid "Caps Lock" @@ -1373,7 +1511,7 @@ #: src/client/keycode.cpp msgid "IME Accept" -msgstr "IME Accept" +msgstr "Povolené IME" #: src/client/keycode.cpp msgid "IME Convert" @@ -1498,11 +1636,11 @@ #: src/client/keycode.cpp msgid "Page down" -msgstr "" +msgstr "Klávesa Page Down" #: src/client/keycode.cpp msgid "Page up" -msgstr "" +msgstr "Klávesa Page Up" #: src/client/keycode.cpp msgid "Pause" @@ -1596,7 +1734,7 @@ #: src/gui/guiConfirmRegistration.cpp msgid "Register and Join" -msgstr "" +msgstr "Registrovat a Připojit se" #: src/gui/guiConfirmRegistration.cpp #, c-format @@ -1607,33 +1745,35 @@ "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" +"Budete poprvé připojeni k serveru \"%s\".\n" +"Pokud budete pokračovat, nový uživatelský účet s vašimi údaji bude vytvořen " +"na tomto serveru.\n" +"Prosím znovu napište svoje aktuální heslo a klikněte na 'Registrovat a " +"Připojit se' pro potvrzení souhlasu, nebo vyberte 'Zrušit' pro návrat." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Pokračovat" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Special\" = climb down" -msgstr "„Použít“ = sestupovat dolů" +msgstr "„Speciální“ = sestoupit dolů" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Autoforward" -msgstr "Vpřed" +msgstr "Automaticky vpřed" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Automatic jumping" -msgstr "" +msgstr "Automaticky skákat" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Vzad" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Change camera" -msgstr "Změnit nastavení kláves" +msgstr "Změnit nastavení kamery" #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" @@ -1648,9 +1788,8 @@ msgstr "Konzole" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Dec. range" -msgstr "Vzdálenost dohledu" +msgstr "Snížit rozsah" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. volume" @@ -1669,9 +1808,8 @@ msgstr "Vpřed" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Inc. range" -msgstr "Vzdálenost dohledu" +msgstr "Zvýšit rozsah" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. volume" @@ -1725,44 +1863,39 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Special" -msgstr "" +msgstr "Speciální" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle HUD" -msgstr "Létání" +msgstr "Zapnout/Vypnout ovládací prvky" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle chat log" -msgstr "Turbo" +msgstr "Zapnout/Vypnout záznam chatu" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fast" -msgstr "Turbo" +msgstr "Zapnout/Vypnout rychlost" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fly" -msgstr "Létání" +msgstr "Zapnout/Vypnout létání" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle fog" -msgstr "Létání" +msgstr "Zapnout/Vypnout mlhu" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle minimap" -msgstr "Duch" +msgstr "Zapnout/Vypnout minimapu" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle noclip" -msgstr "Duch" +msgstr "Zapnout/Vypnout režim ořezu" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle pitchmove" -msgstr "Turbo" +msgstr "Zapnout/Vypnout režim posunu Pitch" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" @@ -1789,9 +1922,8 @@ msgstr "Odejít" #: src/gui/guiVolumeChange.cpp -#, fuzzy msgid "Muted" -msgstr "Ztlumit" +msgstr "Ztlumeno" #: src/gui/guiVolumeChange.cpp msgid "Sound Volume: " @@ -1815,6 +1947,8 @@ "(Android) Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" +"(Android) Opravena pozice virtuálního joysticku.\n" +"Pokud je zakázán, virtuální joystick se upraví podle umístění prvního dotyku." #: src/settings_translation_file.cpp msgid "" @@ -1822,9 +1956,11 @@ "If enabled, virtual joystick will also tap \"aux\" button when out of main " "circle." msgstr "" +"(Android) Použít virtuální joystick pro stisknutí tlačítka 'aux'.\n" +"Pokud je povoleno, virtuální joystick automaticky stiskne tlačítko 'aux' " +"pokud je mimo hlavní kruh." #: 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" @@ -1835,10 +1971,13 @@ "situations.\n" "Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" -"(X,Y,Z) posun fraktálu od středu světa v jednotkách 'scale'.\n" -"Použito k posunutí vhodného spawnu v údolí poblíž souřadnic (0,0).\n" -"Výchozí nastavení je vhodné pro Mandelbrotovu množinu, pro Juliovu množinu " -"musí být zvlášť upraveny.\n" +"(X,Y,Z) rozestup fraktálu od středu světa v jednotkách 'scale'.\n" +"Může být použito k posunutí spawnu ze souřadnic (0,0),\n" +"nebo k umožnění přiblížení 'zoom in' na konkrétní bod,\n" +"zvýšením hodnoty 'scale'.\n" +"Výchozí nastavení je vhodné pro Mandelbrotovu množinu,\n" +"pro Juliovu a další množiny, může být potřeba speciálního\n" +"nastavení.\n" "Rozsah je přibližně od -2 do 2. Násobte 'scale' pro posun v blocích." #: src/settings_translation_file.cpp @@ -1851,6 +1990,13 @@ "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) měřítko fraktálu v uzlech.\n" +"Skutečná fraktální velikost bude 2 až 3krát větší.\n" +"Tato čísla mohou být velmi velká, fraktál se nemusí\n" +"vejít do světa.\n" +"Zvětšete tyto, abyste „přiblížili“ detail fraktálu.\n" +"Výchozí je pro svisle stlačený tvar, vhodný například\n" +"pro ostrov, nastavte všechna 3 čísla stejně pro ryzí tvar." #: src/settings_translation_file.cpp msgid "" @@ -1862,31 +2008,31 @@ #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of ridged mountains." -msgstr "" +msgstr "2D šum, který definuje tvar/velikost horských útvarů." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of rolling hills." -msgstr "" +msgstr "2D šum, který definuje tvar/velikost postupných hor." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of step mountains." -msgstr "" +msgstr "2D šum, který definuje tvar/velikost schodišťových hor." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of ridged mountain ranges." -msgstr "" +msgstr "2D šum, který definuje velikost/četnost horských masivů." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of rolling hills." -msgstr "" +msgstr "2D šum, který definuje velikost/četnost postupných hor." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of step mountain ranges." -msgstr "" +msgstr "2D šum, který definuje velikost/četnost schodišťových horských útvarů." #: src/settings_translation_file.cpp msgid "2D noise that locates the river valleys and channels." -msgstr "" +msgstr "2D šum, který umisťuje říční koryta a kanály." #: src/settings_translation_file.cpp msgid "3D clouds" @@ -1897,6 +2043,11 @@ msgstr "Režim 3D zobrazení" #: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode parallax strength" +msgstr "Síla parallax occlusion" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "3D šum určující obří jeskynní dutiny." @@ -1909,24 +2060,30 @@ "Určuje také strukturu horského terénu na létajících ostrovech." #: 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 "3D šum určující strukturu stěn kaňonů řek." #: src/settings_translation_file.cpp -#, fuzzy msgid "3D noise defining terrain." -msgstr "3D šum určující obří jeskynní dutiny." +msgstr "3D šum určující terén." #: src/settings_translation_file.cpp msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." -msgstr "" +msgstr "3D šum definující horské převisy, atp. Typicky malé odchylky." #: src/settings_translation_file.cpp msgid "3D noise that determines number of dungeons per mapchunk." -msgstr "" +msgstr "3D šum, který definuje počet žalářů na kusu mapy." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -1945,7 +2102,10 @@ "- anaglyph: azurové/purpurové barevné 3D.\n" "- interlaced: pro polarizaci lichý/sudý řádek.\n" "- topbottom: rozdělení obrazovky na horní a dolní část.\n" -"- sidebyside: rozdělení obrazovky na levou a pravou část." +"- sidebyside: rozdělení obrazovky na levou a pravou část.\n" +"- crossview: Zkřížení očí 3d\n" +"- pageflip: 3d se 4-násobným bufferem.\n" +"Pozn.: Režim 'interlaced' vyžaduje podporu 'shaderů'." #: src/settings_translation_file.cpp msgid "" @@ -1965,12 +2125,12 @@ msgstr "Zpráva, která se zobrazí všem klientům, když se server vypne." #: src/settings_translation_file.cpp -#, fuzzy msgid "ABM interval" -msgstr "Interval ukládání mapy" +msgstr "Interval Aktivní Blokové Modifikace (ABM)" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +#, fuzzy +msgid "Absolute limit of queued blocks to emerge" msgstr "Maximální počet emerge front" #: src/settings_translation_file.cpp @@ -1979,14 +2139,13 @@ #: src/settings_translation_file.cpp msgid "Acceleration of gravity, in nodes per second per second." -msgstr "" +msgstr "Gravitační zrychlení, v blocích za vteřinu za vteřinu." #: src/settings_translation_file.cpp msgid "Active Block Modifiers" msgstr "Active Block Modifiery" #: src/settings_translation_file.cpp -#, fuzzy msgid "Active block management interval" msgstr "Interval pro Active Block Management" @@ -2021,6 +2180,16 @@ "například s 4k obrazovkami." #: 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 "Advanced" msgstr "Pokročilé" @@ -2034,11 +2203,6 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Altitude chill" -msgstr "Výškové ochlazení" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "Vždy mít zapnuté létání a turbo" @@ -2048,12 +2212,11 @@ #: src/settings_translation_file.cpp msgid "Amount of messages a player may send per 10 seconds." -msgstr "" +msgstr "Množství zpráv, které může hráč odeslat za 10 vteřin." #: src/settings_translation_file.cpp -#, fuzzy msgid "Amplifies the valleys." -msgstr "Zesílí údolí" +msgstr "Zvýrazní údolí." #: src/settings_translation_file.cpp msgid "Anisotropic filtering" @@ -2070,11 +2233,11 @@ #: src/settings_translation_file.cpp msgid "Append item name" -msgstr "" +msgstr "Dodatkový název položky" #: src/settings_translation_file.cpp msgid "Append item name to tooltip." -msgstr "" +msgstr "Dodatkový název položky v popisku." #: src/settings_translation_file.cpp msgid "Apple trees noise" @@ -2082,13 +2245,15 @@ #: src/settings_translation_file.cpp msgid "Arm inertia" -msgstr "" +msgstr "Setrvačnost ruky" #: src/settings_translation_file.cpp msgid "" "Arm inertia, gives a more realistic movement of\n" "the arm when the camera moves." msgstr "" +"Setrvačnost ruky, vytváří větší dojem opravdového pohybu\n" +"ruky, výkyvem/pohybem kamery." #: src/settings_translation_file.cpp msgid "Ask to reconnect after crash" @@ -2126,7 +2291,7 @@ #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." -msgstr "" +msgstr "Automaticky vyskočit na překážky vysoké 1 blok." #: src/settings_translation_file.cpp #, fuzzy @@ -2139,7 +2304,7 @@ #: src/settings_translation_file.cpp msgid "Autoscaling mode" -msgstr "" +msgstr "Režim automatického přiblížení" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2194,7 +2359,7 @@ #: src/settings_translation_file.cpp msgid "Block send optimize distance" -msgstr "" +msgstr "Optimalizace vzdálenosti vysílání bloku" #: src/settings_translation_file.cpp #, fuzzy @@ -2310,12 +2475,22 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "Velikost písma" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Klávesa chatu" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "Úroveň minimální důležitosti ladících informací" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" -msgstr "" +msgstr "Omezení počtu zpráv v Chatu" #: src/settings_translation_file.cpp #, fuzzy @@ -2329,7 +2504,7 @@ #: src/settings_translation_file.cpp msgid "Chat message max length" -msgstr "" +msgstr "Omezení velikosti jedné zprávy v Chatu" #: src/settings_translation_file.cpp msgid "Chat toggle key" @@ -2374,7 +2549,7 @@ #: src/settings_translation_file.cpp msgid "Client side node lookup range restriction" -msgstr "" +msgstr "Omezení vyhledávání bloků z klientské aplikace" #: src/settings_translation_file.cpp msgid "Climbing speed" @@ -2492,7 +2667,7 @@ #: src/settings_translation_file.cpp msgid "Controls sinking speed in liquid." -msgstr "" +msgstr "Ovládá rychlost potápění v kapalinách." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -2595,6 +2770,11 @@ msgstr "Výchozí formát reportů" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Výchozí hra" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2954,6 +3134,16 @@ "je-li nastaveno na vyšší číslo než 0." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "FPS v menu pauzy" @@ -3077,6 +3267,41 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Koncentrace hor na létajících ostrovech" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Výška hor na létajících ostrovech" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Výška hor na létajících ostrovech" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Základní šum létajících ostrovů" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Koncentrace hor na létajících ostrovech" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Základní šum létajících ostrovů" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Výška létajících ostrovů" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Klávesa létání" @@ -3131,6 +3356,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4705,14 +4936,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4777,6 +5000,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Maximální počet emerge front" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Skript hlavní nabídky" @@ -4863,10 +5091,19 @@ "Příznaky začínající na 'no' slouží k zakázání možnosti." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" +"Globální parametry generování mapy.\n" +"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n" +"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n" +"všechny dekorace.\n" +"Neuvedené příznaky zůstávají ve výchozím stavu.\n" +"Příznaky začínající na 'no' slouží k zakázání možnosti." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -4961,10 +5198,6 @@ msgstr "Ladění generátoru mapy" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Jméno generátoru mapy" @@ -5032,13 +5265,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -5123,6 +5356,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Minimapa" @@ -5283,9 +5520,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5363,10 +5597,6 @@ msgstr "Škála parallax occlusion" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Síla parallax occlusion" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5376,7 +5606,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -5410,6 +5642,14 @@ 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 "Fyzika" @@ -5480,6 +5720,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5964,6 +6216,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5986,6 +6245,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "Síla vygenerovaných normálových map." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Síla vygenerovaných normálových map." @@ -5997,15 +6261,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -6123,7 +6397,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6278,6 +6552,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Maximální počet emerge front" + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "" @@ -6608,6 +6887,14 @@ 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 "" @@ -6639,83 +6926,76 @@ msgid "cURL timeout" msgstr "cURL timeout" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Upraví gamma kódování světelných tabulek. Vyšší čísla znamenají světlejší " -#~ "hodnoty.\n" -#~ "Toto nastavení ovlivňuje pouze klienta a serverem není použito." +#~ msgid "Toggle Cinematic" +#~ msgstr "Plynulá kamera" #, fuzzy -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Stanovuje hustotu horského terénu na létajících ostrovech.\n" -#~ "Jedná se o posun přidaný k hodnotě šumu 'np_mountain'." +#~ msgid "Select Package File:" +#~ msgstr "Vybrat soubor s modem:" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "Ovládá šířku tunelů, menší hodnota vytváří širší tunely." +#~ msgid "Waving Water" +#~ msgstr "Vlnění vody" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ msgid "Waving water" +#~ msgstr "Vlnění vody" + +#, fuzzy +#~ msgid "Lava depth" +#~ msgstr "Hloubka velké jeskyně" + +#~ msgid "IPv6 support." #~ msgstr "" -#~ "Určuje oblasti létajících ostrovů s rovinný terénem.\n" -#~ "Terén bude rovný v místech, kde hodnota šumu bude větší než 0." +#~ "Nastavuje reálnou délku dne.\n" +#~ "Např.: 72 = 20 minut, 360 = 4 minuty, 1 = 24 hodin, 0 = čas zůstává stále " +#~ "stejný." -#~ msgid "Enable VBO" -#~ msgstr "Zapnout VBO" +#~ msgid "Gamma" +#~ msgstr "Gamma" -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Zapne filmový tone mapping" +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "Neprůhlednost stínu písma (od 0 do 255)." #~ msgid "Floatland base height noise" #~ msgstr "Šum základní výšky létajících ostrovů" -#~ msgid "Floatland base noise" -#~ msgstr "Základní šum létajících ostrovů" - -#~ msgid "Floatland level" -#~ msgstr "Výška létajících ostrovů" - -#~ msgid "Floatland mountain density" -#~ msgstr "Koncentrace hor na létajících ostrovech" - -#, fuzzy -#~ msgid "Floatland mountain exponent" -#~ msgstr "Koncentrace hor na létajících ostrovech" - -#~ msgid "Floatland mountain height" -#~ msgstr "Výška hor na létajících ostrovech" - -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "Neprůhlednost stínu písma (od 0 do 255)." +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Zapne filmový tone mapping" -#~ msgid "Gamma" -#~ msgstr "Gamma" +#~ msgid "Enable VBO" +#~ msgstr "Zapnout VBO" -#~ msgid "IPv6 support." +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." #~ msgstr "" -#~ "Nastavuje reálnou délku dne.\n" -#~ "Např.: 72 = 20 minut, 360 = 4 minuty, 1 = 24 hodin, 0 = čas zůstává stále " -#~ "stejný." +#~ "Určuje oblasti létajících ostrovů s rovinný terénem.\n" +#~ "Terén bude rovný v místech, kde hodnota šumu bude větší než 0." + +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "Ovládá šířku tunelů, menší hodnota vytváří širší tunely." #, fuzzy -#~ msgid "Lava depth" -#~ msgstr "Hloubka velké jeskyně" +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "Stanovuje hustotu horského terénu na létajících ostrovech.\n" +#~ "Jedná se o posun přidaný k hodnotě šumu 'np_mountain'." -#~ msgid "Waving water" -#~ msgstr "Vlnění vody" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Upraví gamma kódování světelných tabulek. Vyšší čísla znamenají světlejší " +#~ "hodnoty.\n" +#~ "Toto nastavení ovlivňuje pouze klienta a serverem není použito." -#~ msgid "Waving Water" -#~ msgstr "Vlnění vody" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Stahuji a instaluji $1, prosím čekejte..." -#, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "Vybrat soubor s modem:" +#~ msgid "Back" +#~ msgstr "Zpět" -#~ msgid "Toggle Cinematic" -#~ msgstr "Plynulá kamera" +#~ msgid "Ok" +#~ msgstr "OK" diff -Nru minetest-5.2.0/po/da/minetest.po minetest-5.3.0/po/da/minetest.po --- minetest-5.2.0/po/da/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/da/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Danish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-03-31 10:14+0000\n" "Last-Translator: sfan5 \n" "Language-Team: Danish 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 "FPS in pause menu" msgstr "FPS i pausemenu" @@ -3062,6 +3291,39 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Svævelandsniveau" + +#: 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 +#, fuzzy +msgid "Floatland noise" +msgstr "Svævelandsniveau" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Svævelandsgrundhøjdestøj" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Svævelandsgrundhøjdestøj" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Svævelandsniveau" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Flyvetast" @@ -3116,6 +3378,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4783,14 +5051,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Begrænsning af fremkomsten af forespørgsler på disk" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Begrænsning af fremkomsten af køer at oprette" - -#: 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" @@ -4863,6 +5123,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Absolut begrænsning af fremkomstkøer" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Hovedmenuskript" @@ -4948,10 +5213,17 @@ "Flag starter med \"nej\" er brugt udtrykkeligt deaktivere dem." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" +"Kortoprettelsesattributter specifikke for Mapgen flat.\n" +"Undtagelsesvis kan søer og bakker tilføjes til den flade verden.\n" +"Flag som ikke er specificeret i flag-strengen ændres ikke fra standarden.\n" +"Flag der starter med »no« bruges til eksplicit at deaktivere dem." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5053,10 +5325,6 @@ msgstr "Fejlsøgning for Mapgen" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Flag for Mapgen" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Mapgen-navn" @@ -5124,13 +5392,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -5216,6 +5484,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Minikort" @@ -5377,9 +5649,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5457,10 +5726,6 @@ msgstr "Parallax-okklusion" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5470,7 +5735,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -5504,6 +5771,15 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "Begrænsning af fremkomsten af køer at oprette" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Fysik" @@ -5573,6 +5849,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -6064,6 +6352,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -6087,6 +6382,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -6098,15 +6397,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -6228,7 +6537,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6383,6 +6692,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Absolut begrænsning af fremkomstkøer" + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "" @@ -6714,6 +7028,14 @@ 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 "" @@ -6745,54 +7067,59 @@ msgid "cURL timeout" msgstr "cURL-tidsudløb" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Justér gammakodningen for lystabellerne. Et større tal betyder lysere.\n" -#~ "Denne indstilling gælder kun for klienten og ignoreres af serveren." +#~ msgid "Toggle Cinematic" +#~ msgstr "Aktiver filmisk" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Styrer bredden af tunneller. En lavere værdi giver bredere tunneller." +#~ msgid "Select Package File:" +#~ msgstr "Vælg pakke fil:" #, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "Søstejlhed" - -#~ msgid "Enable VBO" -#~ msgstr "Aktiver VBO" +#~ msgid "Shadow limit" +#~ msgstr "Skygge grænse" -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Aktiverer filmisk toneoversættelse" +#, fuzzy +#~ msgid "Lava depth" +#~ msgstr "Dybde for stor hule" -#~ msgid "Floatland base height noise" -#~ msgstr "Svævelandsgrundhøjdestøj" +#~ msgid "IPv6 support." +#~ msgstr "Understøttelse af IPv6." -#, fuzzy -#~ msgid "Floatland level" -#~ msgstr "Svævelandsniveau" +#~ msgid "Gamma" +#~ msgstr "Gamma" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "Alfa for skrifttypeskygge (uigennemsigtighed, mellem 0 og 255)." -#~ msgid "Gamma" -#~ msgstr "Gamma" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Aktiverer filmisk toneoversættelse" -#~ msgid "IPv6 support." -#~ msgstr "Understøttelse af IPv6." +#~ msgid "Enable VBO" +#~ msgstr "Aktiver VBO" #, fuzzy -#~ msgid "Lava depth" -#~ msgstr "Dybde for stor hule" +#~ msgid "Darkness sharpness" +#~ msgstr "Søstejlhed" -#, fuzzy -#~ msgid "Shadow limit" -#~ msgstr "Skygge grænse" +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "" +#~ "Styrer bredden af tunneller. En lavere værdi giver bredere tunneller." -#~ msgid "Select Package File:" -#~ msgstr "Vælg pakke fil:" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Justér gammakodningen for lystabellerne. Et større tal betyder lysere.\n" +#~ "Denne indstilling gælder kun for klienten og ignoreres af serveren." -#~ msgid "Toggle Cinematic" -#~ msgstr "Aktiver filmisk" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Begrænsning af fremkomsten af forespørgsler på disk" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Henter og installerer $1, vent venligst..." + +#~ msgid "Back" +#~ msgstr "Tilbage" + +#~ msgid "Ok" +#~ msgstr "Ok" diff -Nru minetest-5.2.0/po/de/minetest.po minetest-5.3.0/po/de/minetest.po --- minetest-5.2.0/po/de/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/de/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: German (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-04-04 19:54+0000\n" -"Last-Translator: sfan5 \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-15 22:41+0000\n" +"Last-Translator: Wuzzy \n" "Language-Team: German \n" "Language: de\n" @@ -12,7 +12,7 @@ "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.0-dev\n" +"X-Generator: Weblate 4.1\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,6 +22,10 @@ msgid "You died" msgstr "Sie sind gestorben" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "In einem Lua-Skript ist ein Fehler aufgetreten:" @@ -35,10 +39,6 @@ msgstr "Hauptmenü" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "OK" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Erneut verbinden" @@ -115,6 +115,10 @@ "die folgenden Zeichen sind erlaubt: [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Mehr Mods finden" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" @@ -160,16 +164,16 @@ msgstr "Alle Pakete" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Rücktaste" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Zurück zum Hauptmenü" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "$1 wird heruntergeladen und installiert, bitte warten …" +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/dlg_contentstore.lua +msgid "Downloading..." +msgstr "Herunterladen …" #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -214,15 +218,51 @@ msgid "Update" msgstr "Aktualisieren" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Ansehen" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Eine Welt namens „$1“ existiert bereits" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "Zusätzliches Gelände" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "Höhenabkühlung" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "Höhenabtrocknung" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Biomübergänge" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Biome" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Hohlräume" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Höhlen" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Erstellen" #: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Dekorationen" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Laden Sie sich ein Spiel (wie Minetest Game) von minetest.net herunter" @@ -230,26 +270,149 @@ msgid "Download one from minetest.net" msgstr "Spiele können von minetest.net heruntergeladen werden" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Verliese" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Flaches Gelände" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Schwebende Landmassen im Himmel" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Schwebeländer (experimentell)" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Spiel" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Nicht-fraktales Gelände erzeugen: Ozeane und Untergrund" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Hügel" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Feuchte Flüsse" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Erhöht die Luftfeuchte um Flüsse" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Seen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "" +"Niedrige Luftfeuchtigkeit und hohe Hitze erzeugen seichte oder " +"ausgetrocknete Flüsse" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" msgstr "Kartengenerator" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Kartengenerator-Flags" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Kartengeneratorspezifische Flags" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Berge" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Schlammfließen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Netzwerk aus Tunneln und Höhlen" + #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" msgstr "Kein Spiel ausgewählt" #: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "Reduziert Hitze mit der Höhe" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "Reduziert Luftfeuchte mit der Höhe" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Flüsse" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Flüsse am Meeresspiegel" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Seed" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." -msgstr "Warnung: Die minimale Testversion ist für Entwickler gedacht." +msgid "Smooth transition between biomes" +msgstr "Weicher Übergang zwischen Biomen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" +"Gebäude, die auf dem Gelände auftauchen (keine Wirkung auf von v6 erzeugte " +"Bäume u. Dschungelgras)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "" +"Gebäude, die auf dem Gelände auftauchen, üblicherweise Bäume und Pflanzen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Gemäßigt, Wüste" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Gemäßigt, Wüste, Dschungel" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Gemäßigt, Wüste, Dschungel, Tundra, Taiga" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "Geländeoberflächenerosion" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Bäume und Dschungelgras" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Flusstiefe variieren" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Sehr große Hohlräume tief im Untergrund" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." +msgstr "Achtung: Der Development Test ist für Entwickler gedacht." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -564,6 +727,10 @@ msgstr "Server hosten" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Spiele von ContentDB installieren" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Name/Passwort" @@ -994,8 +1161,8 @@ "- %s: Nach rechts\n" "- %s: Springen/klettern\n" "- %s: Kriechen/runter\n" -"- %s: Gegenstand wegwerfen\n" -"- %s: Inventar\n" +"- %s: Gegenstand wegwerfen\n" +"- %s: Inventar\n" "- Maus: Drehen/Umschauen\n" "- Maus links: Graben/Schlagen\n" "- Maus rechts: Bauen/Benutzen\n" @@ -1219,6 +1386,14 @@ msgstr "Ton verstummt" #: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "Tonsystem ist deaktiviert" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "Tonsystem ist in diesem Build nicht unterstützt" + +#: src/client/game.cpp msgid "Sound unmuted" msgstr "Ton nicht mehr verstummt" @@ -1250,7 +1425,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "Zoom ist momentan von Spiel oder Mod deaktiviert" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "OK" @@ -1867,6 +2042,10 @@ msgstr "3-Dimensionaler-Modus" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "3D-Modus-Parallaxstärke" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "3-D-Rauschen, welches riesige Hohlräume definiert." @@ -1880,6 +2059,19 @@ "der Berge in den Schwebeländern." #: 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 "" +"3D-Rauschen, das die Form von Schwebeländern definiert.\n" +"Falls vom Standardwert verschieden, müsste der Rauschwert „Skalierung“\n" +"(standardmäßig 0.7) evtl. angepasst werden, da die Schwebeland-\n" +"zuspitzung am Besten funktioniert, wenn dieses Rauschen\n" +"einen Wert zwischen etwa -2.0 bis 2.0 hat." + +#: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." msgstr "" "3-D-Rauschen, welches die Form von Erdwällen von Flusscanyons definiert." @@ -1951,8 +2143,8 @@ msgstr "ABM-Intervall" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" -msgstr "Absolute Grenze der Erzeugungswarteschlangen" +msgid "Absolute limit of queued blocks to emerge" +msgstr "Absolute Grenze der zu erzeugenden Kartenblöcke in Warteschlange" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -1999,6 +2191,22 @@ msgstr "DPI des Bildschirms (nicht für X11/Android) z.B. für 4K-Bildschirme." #: 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 "" +"Passt die Dichte der Schwebelandebene an.\n" +"Wert erhöhen, um die Dichte zu erhöhen. Kann positiv oder negativ sein.\n" +"Wert = 0.0: 50% des Volumens sind Schwebeländer.\n" +"Wert = 2.0 (kann abhängig von „mgv7_np_floatland“ höher sein, solle man\n" +"immer testen, um sicher zu sein) erzeugt eine durchgehende\n" +"Schwebelandebene." + +#: src/settings_translation_file.cpp msgid "Advanced" msgstr "Erweitert" @@ -2019,10 +2227,6 @@ "auf natürliches Licht bei Nacht." #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "Höhenabkühlung" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "Immer schnell fliegen" @@ -2299,10 +2503,18 @@ "für kleinere Bildschirme nötig sein." #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "Chat-Schriftgröße" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Chattaste" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "Chatprotokollausgabelevel" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "Max. Anzahl Chatnachrichten" @@ -2598,6 +2810,10 @@ msgstr "Standard-Berichtsformat" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "Standardstapelgröße" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2974,6 +3190,23 @@ "Blöcken verursachen, wenn auf einen Wert größer 0 gesetzt." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "" +"Exponent der Schwebelandzuspitzung. Passt das Zuspitzungverhalten an.\n" +"Wert = 1.0 erzeugt eine einheitliche lineare Zuspitzung.\n" +"Werte > 1.0 erzeugen eine weiche Zuspitzung, die für die standardmäßig\n" +"getrennten Schwebeländer geeignet sind.\n" +"Werte < 1.0 (z.B. 0.25) erzeugen eine bestimmtere Oberflächenhöhe mit\n" +"flacheren Tiefländern; dies ist für eine durchgehende Schwebelandebene\n" +"geeignet." + +#: src/settings_translation_file.cpp msgid "FPS in pause menu" msgstr "Bildwiederholrate im Pausenmenü" @@ -3094,6 +3327,34 @@ msgstr "Fester virtueller Joystick" #: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "Schwebelanddichte" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "Schwebeland: Max. Y" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "Schwebeland: Min. Y" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "Schwebelandrauschen" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "Schwebelandzuspitzexponent" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "Schwebelandzuspitzdistanz" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "Schwebelandwasserhöhe" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Flugtaste" @@ -3147,6 +3408,15 @@ #: 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 "" +"Schriftgröße für den Chattext (für neue Chatnachrichten) und\n" +"der Chateingabe in Punkt (pt).\n" +"Der Wert 0 wird die Standardschriftgröße benutzen." + +#: src/settings_translation_file.cpp +msgid "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -3767,8 +4037,8 @@ #: src/settings_translation_file.cpp msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." msgstr "" -"Undurchsichtigkeit des Hintergrundes der Chat-Konsole im Spiel\n" -"(Wert zwischen 0 und 255)." +"Undurchsichtigkeit des Hintergrundes der Chat-Konsole im Spiel (Wert " +"zwischen 0 und 255)." #: src/settings_translation_file.cpp msgid "In-game chat console background color (R,G,B)." @@ -3778,8 +4048,7 @@ msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." msgstr "" "Chatkonsolenhöhe im Spiel, zwischen 0.1 (10%) und 1.0 (100%).\n" -"(Beachten Sie die englische Notation mit Punkt als\n" -"Dezimaltrennzeichen.)" +"(Beachten Sie die englische Notation mit Punkt als Dezimaltrennzeichen.)" #: src/settings_translation_file.cpp msgid "Inc. volume key" @@ -4773,8 +5042,8 @@ "- info\n" "- verbose" msgstr "" -"Bis zu welcher Dringlichkeitsstufe Protokollmeldungen\n" -"in debug.txt geschrieben werden sollen:\n" +"Bis zu welcher Stufe Protokollmeldungen in debug.txt geschrieben werden " +"sollen:\n" "- (keine Protokollierung)\n" "- none (Meldungen ohne Einstufung)\n" "- error (Fehler)\n" @@ -4808,14 +5077,6 @@ msgstr "Lichtkurve: Niedriger Gradient" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Erzeugungswarteschlangengrenze auf Festspeicher" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Limit der Erzeugungswarteschlangen" - -#: 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" @@ -4892,6 +5153,10 @@ msgstr "Y-Untergrenze von Verliesen." #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "Y-Untergrenze von Schwebeländern." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Hauptmenü-Skript" @@ -4903,14 +5168,14 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -"Nebel- und Himmelsfarben von der Tageszeit (Sonnenaufgang/Sonnenuntergang)\n" +"Nebel- und Himmelsfarben von der Tageszeit (Sonnenaufgang/Sonnenuntergang) " "und Blickrichtung abhängig machen." #: src/settings_translation_file.cpp msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." msgstr "" -"DirectX mit LuaJIT zusammenarbeiten lassen. Deaktivieren Sie dies,\n" -"falls es Probleme verursacht." +"DirectX mit LuaJIT zusammenarbeiten lassen. Deaktivieren Sie dies, falls es " +"Probleme verursacht." #: src/settings_translation_file.cpp msgid "Makes all liquids opaque" @@ -4979,10 +5244,14 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "Kartengenerierungsattribute speziell für den Kartengenerator v7.\n" -"„ridges“ aktiviert die Flüsse." +"„ridges”: Flüsse.\n" +"„floatlands“: Schwebende Landmassen in der Atmosphäre.\n" +"„caverns“: Gigantische Höhlen tief im Untergrund." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5069,10 +5338,6 @@ msgstr "Kartengenerator-Debugging" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Kartengenerator-Flags" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Kartengeneratorname" @@ -5145,20 +5410,20 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" -"Maximale Anzahl der Kartenblöcke, die in die Erzeugungswarteschlage gesetzt " -"werden.\n" -"Feld frei lassen, um automatisch einen geeigneten Wert zu bestimmen." +"Maximale Anzahl der Kartenblöcke, die in die Warteschlange für\n" +"die Erzeugung eingereiht werden sollen.\n" +"Diese Grenze wird für jeden Spieler einzeln erzwungen." #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" -"Maximale Anzahl der Kartenblöcke, die in die Warteschlange zum Laden aus\n" -"einer Datei gesetzt werden können.\n" -"Feld frei lassen, um automatisch einen geeigneten Wert zu bestimmen." +"Maximale Anzahl der Kartenblöcke, die in die Warteschlange zum Laden aus " +"einer Datei eingereiht werden.\n" +"Diese Grenze wird für jeden Spieler einzeln erzwungen." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5179,7 +5444,7 @@ "try reducing it, but don't reduce it to a number below double of targeted\n" "client number." msgstr "" -"Maximale Anzahl der Pakete, die pro Sende-Schritt gesendet werden. Falls Sie " +"Maximale Anzahl der Pakete, die pro Sendeschritt gesendet werden. Falls Sie " "eine\n" "langsame Verbindung haben, probieren Sie, diesen Wert zu reduzieren,\n" "aber reduzieren Sie ihn nicht unter der doppelten Anzahl der Clients, die " @@ -5263,6 +5528,10 @@ msgstr "Verwendete Methode, um ein ausgewähltes Objekt hervorzuheben." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "Minimaler Level des Prokolls, die in den Chat geschrieben werden soll." + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Übersichtskarte" @@ -5340,8 +5609,8 @@ "For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." msgstr "" "Faktor für Kameraschütteln beim Sturz.\n" -"Zum Beispiel: 0 für kein Schütteln, 1.0 für den Standardwert,\n" -"2.0 für doppelte Geschwindigkeit." +"Zum Beispiel: 0 für kein Schütteln, 1.0 für den Standardwert, 2.0 für " +"doppelte Geschwindigkeit." #: src/settings_translation_file.cpp msgid "Mute key" @@ -5379,8 +5648,7 @@ "Name of the server, to be displayed when players join and in the serverlist." msgstr "" "Name des Servers. Er wird in der Serverliste angezeigt und für frisch " -"verbundene\n" -"Spieler angezeigt." +"verbundene Spieler angezeigt." #: src/settings_translation_file.cpp msgid "Near plane" @@ -5396,8 +5664,7 @@ "This value will be overridden when starting from the main menu." msgstr "" "Netzwerkport (UDP), auf dem gelauscht werden soll.\n" -"Dieser Wert wird überschrieben, wenn vom Hauptmenü\n" -"aus gestartet wird." +"Dieser Wert wird überschrieben, wenn vom Hauptmenü aus gestartet wird." #: src/settings_translation_file.cpp msgid "New users need to input this password." @@ -5438,9 +5705,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5452,18 +5716,14 @@ "'on_generated'. For many users the optimum setting may be '1'." msgstr "" "Anzahl der zu verwendeten Erzeugerthreads.\n" -"ACHTUNG: Momentan gibt es mehrere Bugs, die Abstürze verursachen können,\n" -"wenn „num_emerge_threads“ größer als 1 ist. Bis diese Warnung entfernt ist,\n" -"wird es stark empfohlen, diesen Wert auf den Standardwert „1“ zu setzen.\n" "Wert 0:\n" -"Leerer Wert oder 0:\n" "- Automatische Wahl. Die Anzahl der Erzeugerthreads wird\n" "- „Anzahl der Prozessoren - 2“ sein, mit einer Untergrenze von 1.\n" "Jeder andere Wert:\n" "- Legt die Anzahl der Erzeugerthreads fest, mit einer Untergrenze von 1.\n" "ACHTUNG: Das Erhöhen der Anzahl der Erzeugerthreads erhöht die\n" "Geschwindigkeit des Engine-Kartengenerators, aber dies könnte die Spiel-\n" -"performanz beeinträchtigen, da mit anderen Prozessen konkurriert wird,\n" +"performanz beeinträchtigen, da mit anderen Prozessen konkurriert wird;\n" "das ist besonders im Einzelspielermodus der Fall und/oder, wenn Lua-Code\n" "in „on_generated“ ausgeführt wird.\n" "Für viele Benutzer wird die optimale Einstellung wohl die „1“ sein." @@ -5544,10 +5804,6 @@ msgstr "Parallax-Occlusion-Skalierung" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Parallax-Occlusion-Stärke" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5564,8 +5820,13 @@ "Standardschrift nicht verfügbar ist." #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Pfad, in dem Bildschirmfotos abgespeichert werden." +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 "" +"Pfad, in dem Bildschirmfotos gespeichert werden sollen. Kann ein absoluter " +"oder relativer Pfad sein.\n" +"Dieses Verzeichnis wird erstellt, wenn es nicht bereits existiert." #: src/settings_translation_file.cpp msgid "" @@ -5573,8 +5834,7 @@ "used." msgstr "" "Pfad zum Shader-Verzeichnis. Falls kein Pfad definiert ist, wird der " -"Standard-\n" -"pfad benutzt." +"Standardpfad benutzt." #: src/settings_translation_file.cpp msgid "Path to texture directory. All textures are first searched from here." @@ -5615,6 +5875,14 @@ msgstr "Pausieren bei Fensterfokusverlust" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "Je-Spieler-Grenze der Ladewarteschlange für Kartenblöcke" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "Je-Spieler-Grenze der Kartenblöcke in Erzeugungswarteschlange" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Physik" @@ -5652,23 +5920,22 @@ "Note that the port field in the main menu overrides this setting." msgstr "" "UDP-Port, zu dem sich verbunden werden soll.\n" -"Beachten Sie, dass das Port-Feld im Hauptmenü diese Einstellung\n" -"überschreibt." +"Beachten Sie, dass das Port-Feld im Hauptmenü diese Einstellung überschreibt." #: src/settings_translation_file.cpp msgid "" "Prevent digging and placing from repeating when holding the mouse buttons.\n" "Enable this when you dig or place too often by accident." msgstr "" -"Verhindert wiederholtes Graben und Bauen, wenn man die\n" -"Maustasten gedrückt hält. Aktivieren Sie dies, wenn sie zu oft aus Versehen\n" -"graben oder bauen." +"Verhindert wiederholtes Graben und Bauen, wenn man die Maustasten gedrückt " +"hält.\n" +"Aktivieren Sie dies, wenn sie zu oft aus Versehen graben oder bauen." #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." msgstr "" -"Verhindert, dass Mods unsichere Funktionen, wie das Ausführen von\n" -"Shell-Kommandos, benutzen können." +"Verhindert, dass Mods unsichere Funktionen, wie das Ausführen von Shell-" +"Kommandos, benutzen können." #: src/settings_translation_file.cpp msgid "" @@ -5696,6 +5963,22 @@ msgstr "Profiling" #: src/settings_translation_file.cpp +msgid "Prometheus listener address" +msgstr "Prometheus-Lauschadresse" + +#: 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" +"Prometheus-Lauschadresse.\n" +"Falls Minetest mit der ENABLE_PROMETEUS-Option kompiliert wurde,\n" +"wird dies den Metriklauscher für Prometheus auf dieser Adresse aktivieren.\n" +"Metriken können von http://127.0.0.1:30000/metrics abgegriffen werden." + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "Anteil der großen Höhlen, die eine Flüssigkeit enthalten." @@ -5706,8 +5989,8 @@ "corners." msgstr "" "Radius des Wolkenbereichs; In Einheiten von 64 Wolkenquadraten.\n" -"Werte größer als 26 werden scharfe Schnittkanten an den Ecken des Wolken-\n" -"bereichs erzeugen." +"Werte größer als 26 werden scharfe Schnittkanten an den Ecken des " +"Wolkenbereichs erzeugen." #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." @@ -5743,7 +6026,7 @@ "Use this to stop players from being able to use color in their messages" msgstr "" "Farbcodes aus eingehenden Chatnachrichten entfernen.\n" -"Benutzen Sie dies, um Spieler daran zu hindern, Farbe in ihren Nachrichten\n" +"Benutzen Sie dies, um Spieler daran zu hindern, Farbe in ihren Nachrichten " "zu verwenden" #: src/settings_translation_file.cpp @@ -6131,7 +6414,7 @@ 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\n" +"die vom Hauptthread kopiert werden, reduziert und somit das Stottern " "reduziert." #: src/settings_translation_file.cpp @@ -6168,8 +6451,8 @@ "Smooths camera when looking around. Also called look or mouse smoothing.\n" "Useful for recording videos." msgstr "" -"Glättet Kamerabewegungen bei der Fortbewegung und beim Umsehen.\n" -"Auch bekannt als „Look Smoothing“ oder „Mouse Smoothing“.\n" +"Glättet Kamerabewegungen bei der Fortbewegung und beim Umsehen. Auch bekannt " +"als „Look Smoothing“ oder „Mouse Smoothing“.\n" "Nützlich zum Aufnehmen von Videos." #: src/settings_translation_file.cpp @@ -6220,6 +6503,17 @@ #: 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 "" +"Legt die Standardstapelgröße von Blöcken, Gegenständen und Werkzeugen fest.\n" +"Beachten Sie, dass Mods oder Spiele eine explizite Stapelgröße für " +"bestimmte\n" +"(oder alle) Gegenstände setzen kann." + +#: 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." @@ -6245,6 +6539,10 @@ msgstr "Stufenbergsausbreitungsrauschen" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "Stärke von 3D-Modus-Parallax." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Stärke der generierten Normalmaps." @@ -6259,10 +6557,6 @@ "Lichtkurve, die in ihrer Helligkeit verstärkt wird." #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Stärke von Parallax." - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "Strikte Protokollversionsprüfung" @@ -6271,6 +6565,32 @@ msgstr "Farbcodes entfernen" #: 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 the 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 "" +"Oberfläche mit optionalem Wasser, das auf einer durchgehenden\n" +"Schwebelandebene platziert wird. Wasser ist standardmäßig deaktiviert\n" +"und wird nur platziert, wenn dieser Wert auf einem Wert größer als\n" +"„mgv7_floatland_ymax” minus „mgv7_floatland_taper” (dem Start\n" +"der oberen Zuspitzung) gesetzt wurde.\n" +"***ACHTUNG, MÖGLICHE GEFAHR FÜR WELTEN UND SERVERPERFORMANZ***:\n" +"Wenn die Wasserplatzierung aktiviert wird, müssen die Schwebeländer\n" +"konfiguriert und darauf abgeklopft werden, dass sie eine durchgehende\n" +"Ebene sind, indem „mgv7_floatland_density“ auf 2.0 (oder einem anderen\n" +"erforderlichen Wert, abhängig von „mgv7_np_floatland“) gesetzt wird,\n" +"um ein serverbelastendes extremes Wasserfließen und einer gewaltigen\n" +"Überflutung der Weltoberfläche unten zu vermeiden." + +#: src/settings_translation_file.cpp msgid "Synchronous SQLite" msgstr "Synchrones SQLite" @@ -6402,8 +6722,7 @@ msgstr "" "Die Privilegien, die neue Benutzer automatisch erhalten.\n" "Siehe /privs im Spiel für eine vollständige Liste aller möglichen " -"Privilegien\n" -"auf Ihrem Server und die Modkonfiguration." +"Privilegien auf Ihrem Server und die Modkonfiguration." #: src/settings_translation_file.cpp msgid "" @@ -6413,14 +6732,15 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" "Der Radius des Volumens von Blöcken um jeden Spieler, der dem\n" "Active-Block-Zeugs unterliegt, in Kartenblöcken angegeben (16 Blöcke).\n" "In aktiven Kartenblöcken werden Objekte geladen und ABMs ausgeführt.\n" "Dies ist außerdem die minimale Reichweite, in der aktive Objekte (Mobs) " "verwaltet\n" -"werden. Dies sollte zusammen mit active_object_range konfiguriert werden." +"werden. Dies sollte zusammen mit active_object_send_range_blocks\n" +"konfiguriert werden." #: src/settings_translation_file.cpp msgid "" @@ -6470,8 +6790,7 @@ "Die Zeit (in Sekunden), die die Flüssigkeitswarteschlange über die " "Verarbeitungs-\n" "kapazität hinauswachsen darf, bevor versucht wird, ihre Größe durch das\n" -"Verwerfen alter Warteschlangeneinträge zu reduzieren. Der Wert 0 " -"deaktiviert\n" +"Verwerfen alter Warteschlangeneinträge zu reduzieren. Der Wert 0 deaktiviert " "diese Funktion." #: src/settings_translation_file.cpp @@ -6539,8 +6858,7 @@ #: src/settings_translation_file.cpp msgid "Timeout for client to remove unused map data from memory." msgstr "" -"Zeit, nach der der Client nicht benutzte Kartendaten aus\n" -"dem Speicher löscht." +"Zeit, nach der der Client nicht benutzte Kartendaten aus dem Speicher löscht." #: src/settings_translation_file.cpp msgid "" @@ -6608,7 +6926,7 @@ msgstr "" "Unterabtastung ist ähnlich der Verwendung einer niedrigeren " "Bildschirmauflösung, aber sie wird nur auf die Spielwelt angewandt, während " -"das GUI intakt bleibt.\n" +"die GUI intakt bleibt.\n" "Dies sollte einen beträchtlichen Performanzschub auf Kosten einer weniger " "detaillierten Grafik geben.\n" "Hohe Werte führen zu einer weniger detaillierten Grafik." @@ -6626,6 +6944,10 @@ msgstr "Y-Obergrenze von Verliesen." #: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "Y-Obergrenze von Schwebeländern." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Wolken blockförmig statt flach aussehen lassen." @@ -6636,8 +6958,8 @@ #: src/settings_translation_file.cpp msgid "Use anisotropic filtering when viewing at textures from an angle." msgstr "" -"Anisotrope Filterung verwenden, wenn auf Texturen aus einem\n" -"gewissen Blickwinkel heraus geschaut wird." +"Anisotrope Filterung verwenden, wenn auf Texturen aus einem gewissen " +"Blickwinkel heraus geschaut wird." #: src/settings_translation_file.cpp msgid "Use bilinear filtering when scaling textures." @@ -6649,9 +6971,9 @@ "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" -"Map-Mapping benutzen, um Texturen zu skalieren. Könnte die Performanz\n" -"leicht erhöhen, besonders, wenn ein hochauflösendes Texturenpaket\n" -"benutzt wird.\n" +"Mip-Mapping benutzen, um Texturen zu skalieren. Könnte die Performanz\n" +"leicht erhöhen, besonders, wenn ein hochauflösendes Texturenpaket benutzt " +"wird.\n" "Eine gammakorrigierte Herunterskalierung wird nicht unterstützt." #: src/settings_translation_file.cpp @@ -6713,8 +7035,8 @@ "Defines the 'persistence' value for terrain_base and terrain_alt noises." msgstr "" "Variiert die Rauheit des Geländes.\n" -"Definiert den „persistence“-Wert für\n" -"„terrain_base“- und „terrain_alt“-Rauschen." +"Definiert den „persistence“-Wert für „terrain_base“- und " +"„terrain_alt“-Rauschen." #: src/settings_translation_file.cpp msgid "Varies steepness of cliffs." @@ -6920,9 +7242,10 @@ "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 "" -"Ob Clients gefragt werden sollen, sich nach einem (Lua-)Absturz\n" -"neu zu verbinden. Auf „wahr“ setzen, falls Ihr Server für automatische\n" -"Neustarts eingerichtet ist." +"Ob Clients gefragt werden sollen, sich nach einem (Lua-)Absturz neu zu " +"verbinden.\n" +"Auf „wahr“ setzen, falls Ihr Server für automatische Neustarts eingerichtet " +"ist." #: src/settings_translation_file.cpp msgid "Whether to fog out the end of the visible area." @@ -6945,8 +7268,8 @@ msgid "" "Whether to show the client debug info (has the same effect as hitting F5)." msgstr "" -"Ob der Client Debug-Informationen zeigen soll (hat die selbe Wirkung\n" -"wie das Drücken von F5)." +"Ob der Client Debug-Informationen zeigen soll (hat die selbe Wirkung wie das " +"Drücken von F5)." #: src/settings_translation_file.cpp msgid "Width component of the initial window size." @@ -7020,6 +7343,21 @@ msgstr "Y-Entfernung, über welche Hohlräume zu voller Größe expandieren." #: 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 "" +"Y-Distanz, über welche die Schwebeländer sich von voller Dichte\n" +"zu nichts zuspitzen. Die Zuspitzung beginnt an dieser Distanz vom\n" +"Y-Limit.\n" +"Für eine durchgehende Schwebelandebene regelt dies die Höhe von\n" +"Hügeln/Bergen.\n" +"Muss kleiner als oder gleich der Hälfte der Distanz zwischen den\n" +"Y-Limits sein." + +#: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." msgstr "Y-Höhe der durchschnittlichen Geländeoberfläche." @@ -7051,143 +7389,149 @@ msgid "cURL timeout" msgstr "cURL-Zeitüberschreitung" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Ändert die Gammakodierung der Lichttabellen. Kleinere Werte sind heller.\n" -#~ "Diese Einstellung ist rein clientseitig und wird vom Server ignoriert." +#~ msgid "Toggle Cinematic" +#~ msgstr "Filmmodus umschalten" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Verändert, wie Schwebeländer des Bergtyps sich über und unter dem " -#~ "Mittelpunkt zuspitzen." +#~ msgid "Select Package File:" +#~ msgstr "Paket-Datei auswählen:" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Mitte der Lichtkurven-Mittenverstärkung." +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Y-Wert der Obergrenze von Lava in großen Höhlen." -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Legt die Dichte von Gebirgen in den Schwebeländern fest.\n" -#~ "Dies ist ein Versatz, der zum Rauschwert „mgv7_np_mountain“ addiert wird." +#~ msgid "Waving Water" +#~ msgstr "Wasserwellen" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgid "Whether dungeons occasionally project from the terrain." +#~ msgstr "Ob Verliese manchmal aus dem Gelände herausragen." + +#~ msgid "Projecting dungeons" +#~ msgstr "Herausragende Verliese" + +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Y-Höhe, bis zu der sich die Schatten der Schwebeländer ausbreiten." + +#~ msgid "Y-level of floatland midpoint and lake surface." #~ msgstr "" -#~ "Legt die Breite von Tunneln fest; ein kleinerer Wert erzeugt breitere " -#~ "Tunnel." +#~ "Y-Höhe vom Mittelpunkt der Schwebeländer sowie\n" +#~ "des Wasserspiegels von Seen." -#~ msgid "Darkness sharpness" -#~ msgstr "Dunkelheits-Steilheit" +#~ msgid "Waving water" +#~ msgstr "Wasserwellen" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" -#~ "Definiert Gebiete von ruhig verlaufendem\n" -#~ "Gelände in den Schwebeländern. Weiche\n" -#~ "Schwebeländer treten auf, wenn der\n" -#~ "Rauschwert > 0 ist." +#~ "Variierung der Hügelhöhe und Seetiefe in den ruhig verlaufenden\n" +#~ "Regionen der Schwebeländer." #~ msgid "" -#~ "Deprecated, define and locate cave liquids using biome definitions " -#~ "instead.\n" -#~ "Y of upper limit of lava in large caves." +#~ "Typical maximum height, above and below midpoint, of floatland mountains." #~ msgstr "" -#~ "Misbilligte Einstellung. Definieren/Finden Sie statdessen " -#~ "Höhlenflüssigkeiten in Biomdefinitionen.\n" -#~ "Y der Obergrenze von Lava in großen Höhlen." +#~ "Typische Maximalhöhe, über und unter dem Mittelpunkt von Gebirgen in den\n" +#~ "Schwebeländern." -#~ msgid "Enable VBO" -#~ msgstr "VBO aktivieren" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Diese Schrift wird von bestimmten Sprachen benutzt." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Aktiviert filmisches Tone-Mapping" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Stärke der Lichtkurven-Mittenverstärkung." -#~ msgid "Floatland base height noise" -#~ msgstr "Schwebeland-Basishöhenrauschen" +#~ msgid "Shadow limit" +#~ msgstr "Schattenbegrenzung" -#~ msgid "Floatland base noise" -#~ msgstr "Schwebelandbasisrauschen" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Pfad zu einer TrueType- oder Bitmap-Schrift." -#~ msgid "Floatland level" -#~ msgstr "Schwebelandhöhe" +#~ msgid "Lightness sharpness" +#~ msgstr "Helligkeitsschärfe" -#~ msgid "Floatland mountain density" -#~ msgstr "Schwebelandbergdichte" +#~ msgid "Lava depth" +#~ msgstr "Lavatiefe" -#~ msgid "Floatland mountain exponent" -#~ msgstr "Schwebelandbergexponent" +#~ msgid "IPv6 support." +#~ msgstr "IPv6-Unterstützung." -#~ msgid "Floatland mountain height" -#~ msgstr "Schwebelandberghöhe" +#~ msgid "Gamma" +#~ msgstr "Gamma" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "" #~ "Undurchsichtigkeit des Schattens der Schrift (Wert zwischen 0 und 255)." -#~ msgid "Gamma" -#~ msgstr "Gamma" - -#~ msgid "IPv6 support." -#~ msgstr "IPv6-Unterstützung." +#~ msgid "Floatland mountain height" +#~ msgstr "Schwebelandberghöhe" -#~ msgid "Lava depth" -#~ msgstr "Lavatiefe" +#~ msgid "Floatland base height noise" +#~ msgstr "Schwebeland-Basishöhenrauschen" -#~ msgid "Lightness sharpness" -#~ msgstr "Helligkeitsschärfe" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Aktiviert filmisches Tone-Mapping" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Pfad zu einer TrueType- oder Bitmap-Schrift." +#~ msgid "Enable VBO" +#~ msgstr "VBO aktivieren" -#~ msgid "Shadow limit" -#~ msgstr "Schattenbegrenzung" +#~ msgid "" +#~ "Deprecated, define and locate cave liquids using biome definitions " +#~ "instead.\n" +#~ "Y of upper limit of lava in large caves." +#~ msgstr "" +#~ "Misbilligte Einstellung. Definieren/Finden Sie statdessen " +#~ "Höhlenflüssigkeiten in Biomdefinitionen.\n" +#~ "Y der Obergrenze von Lava in großen Höhlen." -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Stärke der Lichtkurven-Mittenverstärkung." +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "Definiert Gebiete von ruhig verlaufendem\n" +#~ "Gelände in den Schwebeländern. Weiche\n" +#~ "Schwebeländer treten auf, wenn der\n" +#~ "Rauschwert > 0 ist." -#~ msgid "This font will be used for certain languages." -#~ msgstr "Diese Schrift wird von bestimmten Sprachen benutzt." +#~ msgid "Darkness sharpness" +#~ msgstr "Dunkelheits-Steilheit" -#~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "" -#~ "Typische Maximalhöhe, über und unter dem Mittelpunkt von Gebirgen in den\n" -#~ "Schwebeländern." +#~ "Legt die Breite von Tunneln fest; ein kleinerer Wert erzeugt breitere " +#~ "Tunnel." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." #~ msgstr "" -#~ "Variierung der Hügelhöhe und Seetiefe in den ruhig verlaufenden\n" -#~ "Regionen der Schwebeländer." +#~ "Legt die Dichte von Gebirgen in den Schwebeländern fest.\n" +#~ "Dies ist ein Versatz, der zum Rauschwert „mgv7_np_mountain“ addiert wird." -#~ msgid "Waving water" -#~ msgstr "Wasserwellen" +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Mitte der Lichtkurven-Mittenverstärkung." -#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." #~ msgstr "" -#~ "Y-Höhe vom Mittelpunkt der Schwebeländer sowie\n" -#~ "des Wasserspiegels von Seen." +#~ "Verändert, wie Schwebeländer des Bergtyps sich über und unter dem " +#~ "Mittelpunkt zuspitzen." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Y-Höhe, bis zu der sich die Schatten der Schwebeländer ausbreiten." +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Ändert die Gammakodierung der Lichttabellen. Kleinere Werte sind heller.\n" +#~ "Diese Einstellung ist rein clientseitig und wird vom Server ignoriert." -#~ msgid "Projecting dungeons" -#~ msgstr "Herausragende Verliese" +#~ msgid "Path to save screenshots at." +#~ msgstr "Pfad, in dem Bildschirmfotos abgespeichert werden." -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "Ob Verliese manchmal aus dem Gelände herausragen." +#~ msgid "Parallax occlusion strength" +#~ msgstr "Parallax-Occlusion-Stärke" -#~ msgid "Waving Water" -#~ msgstr "Wasserwellen" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Erzeugungswarteschlangengrenze auf Festspeicher" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Y-Wert der Obergrenze von Lava in großen Höhlen." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "$1 wird heruntergeladen und installiert, bitte warten …" -#~ msgid "Select Package File:" -#~ msgstr "Paket-Datei auswählen:" +#~ msgid "Back" +#~ msgstr "Rücktaste" -#~ msgid "Toggle Cinematic" -#~ msgstr "Filmmodus umschalten" +#~ msgid "Ok" +#~ msgstr "OK" diff -Nru minetest-5.2.0/po/dv/minetest.po minetest-5.3.0/po/dv/minetest.po --- minetest-5.2.0/po/dv/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/dv/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Dhivehi (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2019-11-10 15:04+0000\n" "Last-Translator: Krock \n" "Language-Team: Dhivehi 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 "FPS in pause menu" msgstr "ޕޯސް މެނޫގައި އެފް.ޕީ.އެސް" @@ -2895,6 +3109,34 @@ 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 "Fly key" msgstr "" @@ -2948,6 +3190,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4243,14 +4491,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4314,6 +4554,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "މެއިން މެނޫ ސްކްރިޕްޓް" @@ -4381,7 +4625,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4475,10 +4721,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4546,13 +4788,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4637,6 +4879,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4798,9 +5044,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4877,10 +5120,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4890,7 +5129,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4924,6 +5165,14 @@ 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 "" @@ -4992,6 +5241,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5430,6 +5691,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5452,6 +5720,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5463,15 +5735,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5588,7 +5870,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5741,6 +6023,10 @@ 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 "" @@ -6061,6 +6347,14 @@ 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 "" @@ -6095,3 +6389,9 @@ #, fuzzy #~ msgid "Select Package File:" #~ msgstr "މޮޑްގެ ފައިލް އިހްތިޔާރުކުރޭ:" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "$1 ޑައުންލޯޑޮކޮށް އިންސްޓޯލްކުރަނީ، މަޑުކުރައްވާ..." + +#~ msgid "Ok" +#~ msgstr "emme rangalhu" diff -Nru minetest-5.2.0/po/el/minetest.po minetest-5.3.0/po/el/minetest.po --- minetest-5.2.0/po/el/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/el/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Greek (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-03-31 20:29+0000\n" "Last-Translator: THANOS SIOURDAKIS \n" "Language-Team: Greek 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 "FPS in pause menu" msgstr "" @@ -2848,6 +3059,34 @@ 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 "Fly key" msgstr "" @@ -2901,6 +3140,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4196,14 +4441,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4267,6 +4504,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4333,7 +4574,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4421,10 +4664,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4492,13 +4731,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4583,6 +4822,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4741,9 +4984,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4820,10 +5060,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4833,7 +5069,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4867,6 +5105,14 @@ 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 "" @@ -4935,6 +5181,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5373,6 +5631,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5395,6 +5660,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5406,15 +5675,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5531,7 +5810,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5684,6 +5963,10 @@ 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 "" @@ -6003,6 +6286,14 @@ 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 "" @@ -6033,3 +6324,6 @@ #: src/settings_translation_file.cpp msgid "cURL timeout" msgstr "" + +#~ msgid "Ok" +#~ msgstr "Οκ" diff -Nru minetest-5.2.0/po/eo/minetest.po minetest-5.3.0/po/eo/minetest.po --- minetest-5.2.0/po/eo/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/eo/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Esperanto (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-03-31 10:14+0000\n" -"Last-Translator: sfan5 \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-06 21:41+0000\n" +"Last-Translator: Tirifto \n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -12,7 +12,7 @@ "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.0-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,6 +22,10 @@ msgid "You died" msgstr "Vi mortis" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "Bone" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Eraris Lua-skripto:" @@ -35,10 +39,6 @@ msgstr "Ĉefmenuo" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Bone" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Rekonekti" @@ -114,6 +114,10 @@ "signoj a–z kaj 0–9 estas permesataj." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Trovu pliajn modifaĵojn" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Modifaĵo:" @@ -159,16 +163,17 @@ msgstr "Ĉiuj pakaĵoj" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Reeniri" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Reeniri al ĉefmenuo" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Elŝutante kaj instalante $1, bonvolu atendi…" +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Downloading..." +msgstr "Enlegante…" #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -213,15 +218,52 @@ msgid "Update" msgstr "Ĝisdatigi" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Vido" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Mondo kun nomo «$1» jam ekzistas" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "Aldona tereno" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "Alteca malvarmiĝo" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Altitude dry" +msgstr "Alteca malvarmiĝo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Klimata miksado" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Klimatoj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Kavernegoj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Kavernoj" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Krei" #: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Ornamoj" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Elŝuti ludon, ekzemple minetest_game, el minetest.net" @@ -229,27 +271,148 @@ msgid "Download one from minetest.net" msgstr "Elŝutu ludon el minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Forgeskeloj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Plata tereno" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Flugantaj teramasoj en la ĉielo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Fluginsuloj (eksperimentaj)" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Ludo" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Estigi nefraktalan terenon: oceano kaj subtero" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Montetoj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Malsekaj riveroj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Plialtigas malsekecon ĉirkaŭ riveroj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Lagoj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "" +"Malalta malsekeco kaj alta varmeco kaŭzas malprofundajn aŭ sekajn riverojn" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" msgstr "Mondestigilo" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Parametroj de mondestigilo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Parametroj specialaj por Mondestigilo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Montoj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Reto de tuneloj kaj kavernoj" + #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" msgstr "Neniu ludo estas elektita" #: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "Malpliigas varmecon kun alteco" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "Malpliigas malsekecon kun alteco" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Riveroj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Marnivelaj riveroj" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Fontnombro" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +msgid "Smooth transition between biomes" +msgstr "Glatigi transiron inter klimatoj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" msgstr "" -"Averto: La minimuma programista testo estas intencita por programistoj." +"Konstruaĵoj aperantaj sur la tereno (neniu efiko sur arboj kaj ĝangala herbo " +"kreitaj de v6)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "Konstruaĵoj aperantaj sur la tereno, ofte arboj kaj kreskaĵoj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Milda, Dezerto" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Milda, Dezerto, Ĝangalo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Milda, Dezerto, Ĝangalo, Tundro, Tajgo" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Terrain surface erosion" +msgstr "Bruo de terena bazo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Arboj kaj ĝangala herbo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Variigi profundecon de riveroj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Tre grandaj kavernoj profunde subtere" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." +msgstr "Averto: La programista testo estas intencita por programistoj." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -562,6 +725,10 @@ msgstr "Gastigi servilon" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Nomo/Pasvorto" @@ -1217,6 +1384,14 @@ msgstr "Silentigite" #: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "Sonsistemo estas malŝaltita" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "Sonsistemo ne estas subtenata de ĉi tiu muntaĵo" + +#: src/client/game.cpp msgid "Sound unmuted" msgstr "Malsilentigite" @@ -1248,7 +1423,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "Zomado nuntempe malŝaltita de ludo aŭ modifaĵo" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "bone" @@ -1854,6 +2029,10 @@ msgstr "3d-a reĝimo" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "Forteco de 3D-reĝima paralakso" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "3d-a bruo difinanta grandegajn kavernojn." @@ -1866,6 +2045,14 @@ "Ankaŭ difinas strukturon de montoj sur fluginsuloj." #: 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 "3d-a bruo difinanta strukturon de riveraj kanjonaj muroj." @@ -1928,7 +2115,8 @@ msgstr "Intertempo de ABM (aktiva modifilo de monderoj)" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +#, fuzzy +msgid "Absolute limit of queued blocks to emerge" msgstr "Maksimumo de mondestigaj vicoj" #: src/settings_translation_file.cpp @@ -1978,6 +2166,16 @@ "kvarmilaj ekranoj." #: 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 "Advanced" msgstr "Specialaj" @@ -1996,10 +2194,6 @@ "tre malmulte efikas sur natura noktlumo." #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "Alteca malvarmiĝo" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "Ĉiam en fluga kaj rapida reĝimoj" @@ -2179,15 +2373,15 @@ msgstr "Mapado de elstaraĵoj" #: src/settings_translation_file.cpp -#, fuzzy 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" "Increasing can reduce artifacting on weaker GPUs.\n" "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" -"Distanco de vidpunkto «proksime tonda ebeno» en monderoj, inter 0 kaj 0.5.\n" -"Plejparto de uzantoj ne bezonos ĉi tion ŝanĝi.\n" +"Distanco de vidpunkto «proksime tonda ebeno» en monderoj, inter 0 kaj 0.25.\n" +"Funkcias nur sur GLES-platformoj. Plejparto de uzantoj ne bezonos ĉi tion " +"ŝanĝi.\n" "Plialtigo povas malpliigi misbildojn por malfortaj grafiktraktiloj.\n" "0.1 = Norma, 0.25 = Bona valoro por malfortaj tabulkomputiloj." @@ -2272,10 +2466,19 @@ "Povus esti bezona por malgrandaj ekranoj." #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "Grandeco de babiluja tiparo" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Babila klavo" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "Erarserĉa protokola nivelo" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "Supra limo de babilaj mesaĝoj" @@ -2565,6 +2768,11 @@ msgstr "Implicita raporta formo" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Norma ludo" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2928,6 +3136,16 @@ "je nombro super 0." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "Kadroj sekunde en paŭza menuo" @@ -3048,6 +3266,41 @@ msgstr "Fiksita virtuala stirstango" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Denseco de fluginsulaj montoj" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Maksimuma Y de forgeskelo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Minimuma Y de forgeskeloj" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Baza bruo de fluginsuloj" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Eksponento de fluginsulaj montoj" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Baza bruo de fluginsuloj" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Alteco de fluginsuloj" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Fluga klavo" @@ -3101,6 +3354,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4712,14 +4971,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Limo de viceroj enlegotaj de disko" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Limo de viceroj estigotaj" - -#: 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" @@ -4794,6 +5045,11 @@ msgstr "Suba Y-limo de forgeskeloj." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Suba Y-limo de forgeskeloj." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Ĉefmenua skripto" @@ -4876,9 +5132,12 @@ "kaj la flago «jungles» estas malatentata." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "Mapestigilaj ecoj speciale por Mapestigilo v7.\n" "«ridges» ŝaltas la riverojn." @@ -4968,10 +5227,6 @@ msgstr "Mapestigila erarserĉilo" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Parametroj de mondestigilo" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Nomo de mondestigilo" @@ -5044,17 +5299,19 @@ msgstr "Maksimuma nombro da mondopecoj atendantaj legon." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Maksimumo nombro de mondopecoj atendantaj estigon.\n" "Vakigu por memaga elekto de ĝusta kvanto." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Maksimuma nombro de atendantaj mondopecoj legotaj de loka dosiero.\n" "Agordi vake por memaga elekto de ĝusta nombro." @@ -5152,6 +5409,10 @@ msgstr "Metodo emfazi elektitan objekton." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Mapeto" @@ -5321,11 +5582,9 @@ msgstr "Nombro da mondestigaj fadenoj" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5426,10 +5685,6 @@ msgstr "Skalo de paralaksa ombrigo" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Potenco de paralaksa ombrigo" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5445,8 +5700,10 @@ "disponeblas." #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Dosierindiko por konservi ekrankopiojn." +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 "" @@ -5491,6 +5748,15 @@ msgstr "Paŭzigi je perdita fokuso de la fenestro" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "Limo de viceroj estigotaj" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Fiziko" @@ -5569,6 +5835,18 @@ msgstr "Profilado" #: 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "Proporcio de grandaj kavernoj, kiu enhavas fluaĵon." @@ -6078,6 +6356,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -6103,6 +6388,11 @@ msgstr "Bruo de disvastiĝo de terasaj montoj" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "Potenco de paralakso." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Forteco de estigitaj normalmapoj." @@ -6117,10 +6407,6 @@ "de la luma kurbo, kies heleco estas pliigita." #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Potenco de paralakso." - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "Severa kontrolo de protokoloj" @@ -6129,6 +6415,20 @@ msgstr "Forpreni kolorkodojn" #: 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 the 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 "Akorda SQLite" @@ -6265,7 +6565,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6452,6 +6752,11 @@ msgstr "Supra Y-limo de forgeskeloj." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Supra Y-limo de forgeskeloj." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Uzi 3d-ajn nubojn anstataŭ ebenajn." @@ -6826,6 +7131,14 @@ msgstr "Y-distanco trans kiu kavernoj etendiĝas al plena grandeco." #: 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 "Y-nivelo de mezuma terena surfaco." @@ -6857,123 +7170,129 @@ msgid "cURL timeout" msgstr "cURL tempolimo" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Alĝustigi la gamaan kodadon al la lumtabeloj. Pli altaj nombroj estas pli " -#~ "helaj.\n" -#~ "Ĉi tiu agordo estas klientflanka, kaj serviloj ĝin malatentos." +#~ msgid "Toggle Cinematic" +#~ msgstr "Baskuligi glitan vidpunkton" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Ŝanĝas kiel montecaj fluginsuloj maldikiĝas super kaj sub la mezpunkto." +#~ msgid "Select Package File:" +#~ msgstr "Elekti pakaĵan dosieron:" -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Regas densecon de montecaj fluginsuloj.\n" -#~ "Temas pri deŝovo de la brua valoro «np_mountain»." +#, fuzzy +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Y de supera limo de grandaj kvazaŭ-hazardaj kavernoj." -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Regas larĝecon de tuneloj; pli malgranda valoro kreas pri larĝajn " -#~ "tunelojn." +#~ msgid "Waving Water" +#~ msgstr "Ondanta akvo" -#~ msgid "Darkness sharpness" -#~ msgstr "Akreco de mallumo" +#~ msgid "Projecting dungeons" +#~ msgstr "Planante forgeskelojn" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Y-nivelo kien etendiĝas ombroj de fluginsuloj." + +#~ msgid "Waving water" +#~ msgstr "Ondanta akvo" + +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" -#~ "Difinas zonojn de glata tereno sur fluginsuloj.\n" -#~ "Glataj fluginsuloj okazas kiam bruo superas nulon." +#~ "Variaĵo de alteco de montetoj kaj profundeco de lagoj sur glata tereno de " +#~ "fluginsuloj." #~ msgid "" -#~ "Deprecated, define and locate cave liquids using biome definitions " -#~ "instead.\n" -#~ "Y of upper limit of lava in large caves." +#~ "Typical maximum height, above and below midpoint, of floatland mountains." #~ msgstr "" -#~ "Evitinda, difini kaj trovi kavernajn fluaĵojn anstataŭe per klimataj " -#~ "difinoj\n" -#~ "Y de supra limo de lafo en grandaj kavernoj." +#~ "Ordinara plejalto, super kaj sub la mezpunkto, de fluginsulaj montoj." -#~ msgid "Enable VBO" -#~ msgstr "Ŝalti VBO(Vertex Buffer Object)" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Tiu ĉi tiparo uziĝos por iuj lingvoj." -#~ msgid "Floatland base height noise" -#~ msgstr "Bruo de baza alteco de fluginsuloj" +#~ msgid "Shadow limit" +#~ msgstr "Limo por ombroj" -#~ msgid "Floatland base noise" -#~ msgstr "Baza bruo de fluginsuloj" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Dosierindiko al tiparo «TrueType» aŭ bitbildo." -#~ msgid "Floatland level" -#~ msgstr "Alteco de fluginsuloj" +#~ msgid "Lightness sharpness" +#~ msgstr "Akreco de heleco" -#~ msgid "Floatland mountain density" -#~ msgstr "Denseco de fluginsulaj montoj" +#~ msgid "Lava depth" +#~ msgstr "Lafo-profundeco" -#~ msgid "Floatland mountain exponent" -#~ msgstr "Eksponento de fluginsulaj montoj" +#~ msgid "IPv6 support." +#~ msgstr "Subteno de IPv6." -#~ msgid "Floatland mountain height" -#~ msgstr "Alteco de fluginsulaj montoj" +#~ msgid "Gamma" +#~ msgstr "Helĝustigo" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "Maltravidebleco de tipara ombro (inter 0 kaj 255)." -#~ msgid "Gamma" -#~ msgstr "Helĝustigo" +#~ msgid "Floatland mountain height" +#~ msgstr "Alteco de fluginsulaj montoj" -#~ msgid "IPv6 support." -#~ msgstr "Subteno de IPv6." +#~ msgid "Floatland base height noise" +#~ msgstr "Bruo de baza alteco de fluginsuloj" -#~ msgid "Lava depth" -#~ msgstr "Lafo-profundeco" +#~ msgid "Enable VBO" +#~ msgstr "Ŝalti VBO(Vertex Buffer Object)" -#~ msgid "Lightness sharpness" -#~ msgstr "Akreco de heleco" +#~ msgid "" +#~ "Deprecated, define and locate cave liquids using biome definitions " +#~ "instead.\n" +#~ "Y of upper limit of lava in large caves." +#~ msgstr "" +#~ "Evitinda, difini kaj trovi kavernajn fluaĵojn anstataŭe per klimataj " +#~ "difinoj\n" +#~ "Y de supra limo de lafo en grandaj kavernoj." -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Dosierindiko al tiparo «TrueType» aŭ bitbildo." +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "Difinas zonojn de glata tereno sur fluginsuloj.\n" +#~ "Glataj fluginsuloj okazas kiam bruo superas nulon." -#~ msgid "Shadow limit" -#~ msgstr "Limo por ombroj" +#~ msgid "Darkness sharpness" +#~ msgstr "Akreco de mallumo" -#~ msgid "This font will be used for certain languages." -#~ msgstr "Tiu ĉi tiparo uziĝos por iuj lingvoj." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "" +#~ "Regas larĝecon de tuneloj; pli malgranda valoro kreas pri larĝajn " +#~ "tunelojn." #~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." #~ msgstr "" -#~ "Ordinara plejalto, super kaj sub la mezpunkto, de fluginsulaj montoj." +#~ "Regas densecon de montecaj fluginsuloj.\n" +#~ "Temas pri deŝovo de la brua valoro «np_mountain»." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." #~ msgstr "" -#~ "Variaĵo de alteco de montetoj kaj profundeco de lagoj sur glata tereno de " -#~ "fluginsuloj." +#~ "Ŝanĝas kiel montecaj fluginsuloj maldikiĝas super kaj sub la mezpunkto." -#~ msgid "Waving water" -#~ msgstr "Ondanta akvo" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Alĝustigi la gamaan kodadon al la lumtabeloj. Pli altaj nombroj estas pli " +#~ "helaj.\n" +#~ "Ĉi tiu agordo estas klientflanka, kaj serviloj ĝin malatentos." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Y-nivelo kien etendiĝas ombroj de fluginsuloj." +#~ msgid "Path to save screenshots at." +#~ msgstr "Dosierindiko por konservi ekrankopiojn." -#~ msgid "Projecting dungeons" -#~ msgstr "Planante forgeskelojn" +#~ msgid "Parallax occlusion strength" +#~ msgstr "Potenco de paralaksa ombrigo" -#~ msgid "Waving Water" -#~ msgstr "Ondanta akvo" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Limo de viceroj enlegotaj de disko" -#, fuzzy -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Y de supera limo de grandaj kvazaŭ-hazardaj kavernoj." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Elŝutante kaj instalante $1, bonvolu atendi…" -#~ msgid "Select Package File:" -#~ msgstr "Elekti pakaĵan dosieron:" +#~ msgid "Back" +#~ msgstr "Reeniri" -#~ msgid "Toggle Cinematic" -#~ msgstr "Baskuligi glitan vidpunkton" +#~ msgid "Ok" +#~ msgstr "Bone" diff -Nru minetest-5.2.0/po/es/minetest.po minetest-5.3.0/po/es/minetest.po --- minetest-5.2.0/po/es/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/es/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-02-18 06:32+0000\n" -"Last-Translator: JDiaz \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-06 21:41+0000\n" +"Last-Translator: Agustin Calderon \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.11\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,6 +22,10 @@ msgid "You died" msgstr "Has muerto" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "Aceptar" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Ha ocurrido un error en un script de Lua:" @@ -35,10 +39,6 @@ msgstr "Menú principal" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Aceptar" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Reconectar" @@ -115,6 +115,10 @@ "los caracteres [a-z0-9_] están permitidos." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Encontrar más mods" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" @@ -153,27 +157,28 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "enabled" -msgstr "Activado" +msgstr "activado" #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Todos los paquetes" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Atrás" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Volver al menú principal" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Descargando e instalando $1, por favor espere..." +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/dlg_contentstore.lua +msgid "Downloading..." +msgstr "Descargando..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" -msgstr "Fallo al descargar $1 en $2" +msgstr "Fallo al descargar $1" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -214,15 +219,51 @@ msgid "Update" msgstr "Actualizar" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Ver" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Ya existe un mundo llamado \"$1\"" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "Terreno adicional" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "Frío de altitud" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "Sequedad de altitud" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Mezclado de biomas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Biomas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Cavernas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Cavernas" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Crear" #: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Decoraciones" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Descarga un subjuego, como minetest_game, desde minetest.net" @@ -230,28 +271,149 @@ msgid "Download one from minetest.net" msgstr "Descarga uno desde minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Mazmorras" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Terreno plano" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Tierras flotantes en el cielo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Tierras flotantes (experimental)" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Juego" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Generar terreno no fractal: Oceanos y subterráneos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Colinas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Ríos húmedos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Incrementa humedad alrededor de los ríos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Lagos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "" +"La baja humedad y el alto calor causan que los ríos sean poco profundos o " +"secos" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" msgstr "Generador de mapas" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Banderas de Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Banderas específicas de Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Montañas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Flujo de lodo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Red de túneles y cuevas" + #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" msgstr "Ningún juego seleccionado" #: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "Reduce el calor con la altitud" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "Reduce la humedad con la altitud" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Ríos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Ríos a nivel de mar" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Semilla" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +msgid "Smooth transition between biomes" +msgstr "Transición suave entre biomas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" +"Estructuras generadas en el terreno (sin efecto en arboles y césped de " +"jungla creado por v6)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "Estructuras que aparecen en el terreno, típicamente árboles y plantas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Templado, Desierto" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Templado, Desierto, Jungla" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Templado, Desierto, Jungla, Tundra, Taiga" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "Erosión de la superficie del terreno" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Árboles y hierba de la selva" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Variar la profundidad del río" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Cavernas muy grandes en lo profundo del subsuelo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." msgstr "" -"Advertencia: El juego \"Minimal development test\" está diseñado para " -"desarrolladores." +"Advertencia: La prueba de desarrollo está destinada a los desarrolladores." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -309,7 +471,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "< Back to Settings page" -msgstr "< Volver a la página de Configuración" +msgstr "< Volver a la página de configuración" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Browse" @@ -377,7 +539,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must not be larger than $1." -msgstr "El valor no debe ser mayor que $1." +msgstr "El valor debe ser menor o igual que $1." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X" @@ -565,6 +727,10 @@ msgstr "Servidor anfitrión" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Instalar juegos desde ContentDB" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Nombre / contraseña" @@ -1222,6 +1388,14 @@ msgstr "Sonido silenciado" #: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "El sistema de sonido está desactivado" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "El sistema de sonido no está soportado en esta \"build\"" + +#: src/client/game.cpp msgid "Sound unmuted" msgstr "Sonido no silenciado" @@ -1253,7 +1427,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "El zoom está actualmente desactivado por el juego o un mod" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "aceptar" @@ -1554,7 +1728,7 @@ msgstr "Registrarse y unirse" #: src/gui/guiConfirmRegistration.cpp -#, fuzzy, c-format +#, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" "If you proceed, a new account using your credentials will be created on this " @@ -1562,11 +1736,11 @@ "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" -"Te vas unir al servidor en %1$s1 con el nombre \"%2$s2\" por primera vez. " +"Te vas unir al servidor con el nombre \"%s\" por primera vez.\n" "Cuando procedas, se creará una nueva cuenta en este servidor usando tus " "credenciales.\n" "Por favor, reescribe tu contraseña y haz clic en 'Registrarse y unirse' para " -"confirmar la creación de la cuenta o haz clic en 'Cancelar' para abortar." +"confirmar la creación de la cuenta, o haz clic en 'Cancelar' para abortar." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" @@ -1872,6 +2046,11 @@ msgstr "Modo 3D" #: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode parallax strength" +msgstr "Oclusión de paralaje" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "Ruido 3D definiendo cavernas gigantes." @@ -1884,6 +2063,14 @@ "También define la estructura de las islas flotantes montañosas." #: 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 "Ruido 3D definiendo la estructura de las paredes de ríos de cañón." @@ -1950,7 +2137,8 @@ msgstr "Intervalo ABM" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +#, fuzzy +msgid "Absolute limit of queued blocks to emerge" msgstr "Limite absoluto de colas emergentes" #: src/settings_translation_file.cpp @@ -2000,6 +2188,16 @@ "sólo), por ejemplo para pantallas 4K." #: 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 "Advanced" msgstr "Avanzado" @@ -2020,10 +2218,6 @@ "tiene muy poco efecto en la luz natural nocturna." #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "Frío de altitud" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "Siempre volando y rápido" @@ -2300,10 +2494,20 @@ "-\tAutomático:\tSimple en Android, completo en otras plataformas." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "Tamaño de la fuente" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Tecla del Chat" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "Nivel de registro de depuración" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "Límite de mensajes de chat" @@ -2594,6 +2798,11 @@ msgstr "Formato de Reporte por defecto" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Juego por defecto" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2761,7 +2970,6 @@ msgstr "Mazmorras, mín. Y" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dungeon noise" msgstr "Ruido de mazmorra" @@ -2964,6 +3172,16 @@ "bloques si se le da un valor mayor a 0." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "FPS (cuadros/s) en el menú de pausa" @@ -3082,6 +3300,41 @@ msgstr "Joystick virtual fijo" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Densidad de las montañas en tierras flotantes" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Mazmorras, máx. Y" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Mazmorras, mín. Y" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Ruido base para tierra flotante" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Exponente de las montañas en tierras flotantes" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Ruido base para tierra flotante" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Nivel de tierra flotante" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Tecla vuelo" @@ -3135,6 +3388,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -3206,8 +3465,8 @@ "From how far blocks are generated for clients, stated in mapblocks (16 " "nodes)." msgstr "" -"Desde cuán lejos se generan los bloques para los clientes, especificado\n" -"en bloques de mapa (mapblocks, 16 nodos)." +"Desde cuán lejos se generan los bloques para los clientes, especificado en " +"bloques de mapa (mapblocks, 16 nodos)." #: src/settings_translation_file.cpp msgid "" @@ -3620,8 +3879,8 @@ "If FPS would go higher than this, limit it by sleeping\n" "to not waste CPU power for no benefit." msgstr "" -"Si los FPS subieran a más de esto, limítelos durmiendo a fin de no malgastar " -"potencia de CPU sin beneficio." +"Si los FPS subieran a más de esto, limítelos durmiendo\n" +"a fin de no malgastar potencia de CPU sin beneficio." #: src/settings_translation_file.cpp msgid "" @@ -3776,13 +4035,12 @@ msgstr "Velocidad vertical inicial al saltar, en nodos por segundo." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Instrument builtin.\n" "This is usually only needed by core/builtin contributors" msgstr "" -"El instrumento está construido.\n" -"Por lo general, esto sólo lo necesitan los contribuyentes del núcleo/base" +"Instrumento incorporado.\n" +"Esto solo suele ser necesario para los colaboradores principales o integrados" #: src/settings_translation_file.cpp msgid "Instrument chatcommands on registration." @@ -4626,6 +4884,10 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Tecla para activar/desactivar la visualización de información de depuración." +"\n" +"Ver http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp #, fuzzy @@ -4644,6 +4906,9 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Tecla para activar/desactivar la visualización del HUD.\n" +"Ver http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "" @@ -4658,6 +4923,9 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Tecla para activar/desactivar el perfilador. Usado para desarrollo.\n" +"Ver http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "" @@ -4665,6 +4933,9 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Tecla para activar/desactivar rango de vista ilimitado.\n" +"Ver http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "" @@ -4672,6 +4943,9 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Tecla para hacer zoom cuando sea posible.\n" +"Ver http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "Kick players who sent more than X messages per 10 seconds." @@ -4721,6 +4995,10 @@ "- Simple: only outer faces, if defined special_tiles are used\n" "- Opaque: disable transparency" msgstr "" +"Estilo de hojas:\n" +"- Fabuloso: Todas las caras son visibles\n" +"- Simple: Solo caras externas, si se utilizan special_tiles definidos\n" +"- Opaco: Transparencia desactivada" #: src/settings_translation_file.cpp msgid "Left key" @@ -4764,9 +5042,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost" -msgstr "Aumento medio del centro de la curva de luz." +msgstr "Aumento medio del centro de la curva de luz" #: src/settings_translation_file.cpp msgid "Light curve boost center" @@ -4789,14 +5066,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4862,13 +5131,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "Límite inferior Y de las tierras flotantes." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Script del menú principal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Main menu style" -msgstr "Script del menú principal" +msgstr "Estilo del menú principal" #: src/settings_translation_file.cpp msgid "" @@ -4957,10 +5229,22 @@ "inhabilitar esas opciones." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" +"Atributos del generador de mapas globales.\n" +"En el generador de mapas V6 la opción (o marcador) \"decorations\" controla " +"todos los elementos decorativos excepto los árboles y la hierba de la " +"jungla, en todos los otros generadores de mapas esta opción controla todas " +"las decoraciones.\n" +"Las opciones que no son incluidas en el texto con la cadena de opciones no " +"serán modificadas y mantendrán su valor por defecto.\n" +"Las opciones que comienzan con el prefijo \"no\" son utilizadas para " +"inhabilitar esas opciones." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -4987,9 +5271,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Carpathian" -msgstr "Generador de mapas" +msgstr "Generador de mapas carpatiano" #: src/settings_translation_file.cpp #, fuzzy @@ -4997,9 +5280,8 @@ msgstr "Banderas planas de Mapgen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat" -msgstr "Mapgen plano" +msgstr "Generador de mapas plano" #: src/settings_translation_file.cpp #, fuzzy @@ -5007,9 +5289,8 @@ msgstr "Banderas planas de Mapgen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal" -msgstr "Generador de mapas" +msgstr "Generador de mapas fractal" #: src/settings_translation_file.cpp #, fuzzy @@ -5017,9 +5298,8 @@ msgstr "Banderas planas de Mapgen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5" -msgstr "Generador de mapas" +msgstr "Generador de mapas V5" #: src/settings_translation_file.cpp #, fuzzy @@ -5027,9 +5307,8 @@ msgstr "Banderas planas de Mapgen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6" -msgstr "Generador de mapas" +msgstr "Generador de mapas V6" #: src/settings_translation_file.cpp #, fuzzy @@ -5037,9 +5316,8 @@ msgstr "Banderas planas de Mapgen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7" -msgstr "Generador de mapas" +msgstr "Generador de mapas v7" #: src/settings_translation_file.cpp #, fuzzy @@ -5060,10 +5338,6 @@ msgstr "Depuración del generador de mapas" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Banderas de Mapgen" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Generador de mapas" @@ -5135,13 +5409,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -5227,6 +5501,10 @@ msgstr "Método utilizado para resaltar el objeto seleccionado." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Minimapa" @@ -5387,9 +5665,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5471,11 +5746,6 @@ msgstr "Oclusión de paralaje" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Parallax occlusion strength" -msgstr "Oclusión de paralaje" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5485,8 +5755,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Ruta para guardar las capturas de pantalla." +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 "" @@ -5519,6 +5791,14 @@ 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 "Físicas" @@ -5589,6 +5869,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5687,19 +5979,16 @@ msgstr "Profundidad del relleno" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel width" -msgstr "Profundidad del relleno" +msgstr "Ancho de canal de río" #: src/settings_translation_file.cpp -#, fuzzy msgid "River depth" -msgstr "Profundidad del relleno" +msgstr "Profundidad de río" #: src/settings_translation_file.cpp -#, fuzzy msgid "River noise" -msgstr "Ruido de caverna" +msgstr "Ruido de río" #: src/settings_translation_file.cpp msgid "River size" @@ -5768,14 +6057,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshot format" -msgstr "Captura de pantalla" +msgstr "Formato de captura de pantalla" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshot quality" -msgstr "Captura de pantalla" +msgstr "Calidad de captura de pantalla" #: src/settings_translation_file.cpp msgid "" @@ -5936,9 +6223,8 @@ "Requiere habilitar sombreadores." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shader path" -msgstr "Sombreadores" +msgstr "Ruta de sombreador" #: src/settings_translation_file.cpp msgid "" @@ -6055,9 +6341,8 @@ msgstr "Sonido" #: src/settings_translation_file.cpp -#, fuzzy msgid "Special key" -msgstr "Tecla sigilo" +msgstr "Tecla especial" #: src/settings_translation_file.cpp msgid "Special key for climbing/descending" @@ -6073,6 +6358,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -6095,9 +6387,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "La fuerza del paralaje del modo 3D." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." -msgstr "Generar mapas normales" +msgstr "Fuerza de los mapas normales generados." #: src/settings_translation_file.cpp msgid "" @@ -6107,15 +6402,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -6233,7 +6538,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6363,9 +6668,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Undersampling" -msgstr "Renderizado:" +msgstr "Renderizado" #: src/settings_translation_file.cpp msgid "" @@ -6389,6 +6693,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "Límite superior Y de las tierras flotantes." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "" @@ -6424,9 +6732,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Valley depth" -msgstr "Profundidad del relleno" +msgstr "Profundidad del valle" #: src/settings_translation_file.cpp msgid "Valley fill" @@ -6556,9 +6863,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving Nodes" -msgstr "Movimiento de hojas" +msgstr "Movimiento de nodos" #: src/settings_translation_file.cpp msgid "Waving leaves" @@ -6682,9 +6988,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "World start time" -msgstr "Nombre del mundo" +msgstr "Tiempo comienzo mundo" #: src/settings_translation_file.cpp msgid "" @@ -6711,15 +7016,22 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Y of upper limit of large caves." -msgstr "Limite absoluto de colas emergentes" +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 "" #: 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 "" @@ -6751,87 +7063,87 @@ msgid "cURL timeout" msgstr "Tiempo de espera de cURL" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Ajustar la codificación gamma para las tablas de iluminación. Números " -#~ "mayores son mas brillantes.\n" -#~ "Este ajuste es solo para cliente y es ignorado por el servidor." +#~ msgid "Toggle Cinematic" +#~ msgstr "Activar cinemático" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Modifica cómo las tierras flotantes del tipo montaña aparecen arriba y " -#~ "abajo del punto medio." +#~ msgid "Select Package File:" +#~ msgstr "Seleccionar el archivo del paquete:" -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Controla la densidad del terreno montañoso flotante.\n" -#~ "Se agrega un desplazamiento al valor de ruido 'mgv7_np_mountain'." +#~ msgid "Waving Water" +#~ msgstr "Oleaje" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Controla el ancho de los túneles, un valor menor crea túneles más anchos." +#~ msgid "Waving water" +#~ msgstr "Oleaje en el agua" #, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "Agudeza de la obscuridad" +#~ msgid "Lava depth" +#~ msgstr "Características de la Lava" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." -#~ msgstr "" -#~ "Define áreas de terreno liso flotante.\n" -#~ "Las zonas flotantes lisas se producen cuando el ruido > 0." +#~ msgid "IPv6 support." +#~ msgstr "soporte IPv6." -#~ msgid "Enable VBO" -#~ msgstr "Activar VBO" +#~ msgid "Gamma" +#~ msgstr "Gamma" -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Habilita el mapeado de tonos fílmico" +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "Alfa de sombra de fuentes (opacidad, entre 0 y 255)." + +#~ msgid "Floatland mountain height" +#~ msgstr "Altura de las montañas en tierras flotantes" #~ msgid "Floatland base height noise" #~ msgstr "Ruido de altura base para tierra flotante" -#~ msgid "Floatland base noise" -#~ msgstr "Ruido base para tierra flotante" - -#~ msgid "Floatland level" -#~ msgstr "Nivel de tierra flotante" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Habilita el mapeado de tonos fílmico" -#~ msgid "Floatland mountain density" -#~ msgstr "Densidad de las montañas en tierras flotantes" +#~ msgid "Enable VBO" +#~ msgstr "Activar VBO" -#~ msgid "Floatland mountain exponent" -#~ msgstr "Exponente de las montañas en tierras flotantes" +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "Define áreas de terreno liso flotante.\n" +#~ "Las zonas flotantes lisas se producen cuando el ruido > 0." -#~ msgid "Floatland mountain height" -#~ msgstr "Altura de las montañas en tierras flotantes" +#, fuzzy +#~ msgid "Darkness sharpness" +#~ msgstr "Agudeza de la obscuridad" -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "Alfa de sombra de fuentes (opacidad, entre 0 y 255)." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "" +#~ "Controla el ancho de los túneles, un valor menor crea túneles más anchos." -#~ msgid "Gamma" -#~ msgstr "Gamma" +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "Controla la densidad del terreno montañoso flotante.\n" +#~ "Se agrega un desplazamiento al valor de ruido 'mgv7_np_mountain'." -#~ msgid "IPv6 support." -#~ msgstr "soporte IPv6." +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." +#~ msgstr "" +#~ "Modifica cómo las tierras flotantes del tipo montaña aparecen arriba y " +#~ "abajo del punto medio." -#, fuzzy -#~ msgid "Lava depth" -#~ msgstr "Características de la Lava" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Ajustar la codificación gamma para las tablas de iluminación. Números " +#~ "mayores son mas brillantes.\n" +#~ "Este ajuste es solo para cliente y es ignorado por el servidor." -#~ msgid "Waving water" -#~ msgstr "Oleaje en el agua" +#~ msgid "Path to save screenshots at." +#~ msgstr "Ruta para guardar las capturas de pantalla." -#~ msgid "Waving Water" -#~ msgstr "Oleaje" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Descargando e instalando $1, por favor espere..." -#~ msgid "Select Package File:" -#~ msgstr "Seleccionar el archivo del paquete:" +#~ msgid "Back" +#~ msgstr "Atrás" -#~ msgid "Toggle Cinematic" -#~ msgstr "Activar cinemático" +#~ msgid "Ok" +#~ msgstr "Aceptar" diff -Nru minetest-5.2.0/po/et/minetest.po minetest-5.3.0/po/et/minetest.po --- minetest-5.2.0/po/et/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/et/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Estonian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-01-13 12:21+0000\n" -"Last-Translator: Evert Prants \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-05-03 19:14+0000\n" +"Last-Translator: Janar Leas \n" "Language-Team: Estonian \n" "Language: et\n" @@ -12,7 +12,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10.1\n" +"X-Generator: Weblate 4.1-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,6 +22,10 @@ msgid "You died" msgstr "Said surma" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua skriptis ilmnes viga:" @@ -35,10 +39,6 @@ msgstr "Peamenüü" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Olgu." - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Taasta ühendus" @@ -115,6 +115,10 @@ "ainult [a-z0-9_] märgid." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" @@ -160,16 +164,17 @@ msgstr "Kõik pakid" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Tagasi" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Tagasi peamenüüsse" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Palun oota $1 allalaadimist ja paigaldamist…" +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Downloading..." +msgstr "Laadimine..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -214,15 +219,54 @@ msgid "Update" msgstr "Uuenda" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Maailm nimega \"$1\" on juba olemas" #: 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 +#, fuzzy +msgid "Caverns" +msgstr "Koobaste läve" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caves" +msgstr "Oktaavid" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Loo" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "Teave:" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Lae alla mäng: näiteks „Minetest Game“, aadressilt: minetest.net" @@ -230,25 +274,148 @@ msgid "Download one from minetest.net" msgstr "Laadi minetest.net-st üks mäng alla" +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Dungeons" +msgstr "Dungeon noise" + +#: 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 src/settings_translation_file.cpp msgid "Game" msgstr "Mäng" +#: 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 "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 "Kaardi generaator" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Põlvkonna kaardid" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Mapgen-specific flags" +msgstr "Põlvkonna kaardid" + +#: 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 "Mäng valimata" #: 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 +#, fuzzy +msgid "Rivers" +msgstr "Parem Windowsi nupp" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Seed" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "Hoiatus: minimaalne arendustest on mõeldud arendajatele." #: builtin/mainmenu/dlg_create_world.lua @@ -422,7 +589,7 @@ #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "eased" -msgstr "" +msgstr "pehmendatud" #: builtin/mainmenu/pkgmgr.lua msgid "$1 (Enabled)" @@ -562,6 +729,10 @@ msgstr "Majuta server" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Nimi/Parool" @@ -1035,6 +1206,18 @@ "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" +"Vaikimisi juhtimine:\n" +"Menüü pole nähtav:\n" +"- toksa: nupu käitamine\n" +"- kaksiktoksa: aseta/kasuta\n" +"- libista näpuga: vaata ringi\n" +"Menüü/varamu nähtav:\n" +"- kaksiktoksa (välja):\n" +" -->sulgeb\n" +"- puutu vihku, puutu pesa:\n" +" --> teisaldab vihu\n" +"- puutu&lohista, toksa 2-se näpuga\n" +" --> asetab ühe eseme pessa\n" #: src/client/game.cpp msgid "Disabled unlimited viewing range" @@ -1114,47 +1297,47 @@ #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" -msgstr "" +msgstr "Pisikaardi keelab hetkel mäng või MOD" #: src/client/game.cpp msgid "Minimap hidden" -msgstr "" +msgstr "Pisikaart peidetud" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x1" -msgstr "" +msgstr "Radarkaart, Suurendus ×1" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x2" -msgstr "" +msgstr "Radarkaart, Suurendus ×2" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x4" -msgstr "" +msgstr "Radarkaart, Suurendus ×4" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x1" -msgstr "" +msgstr "Pinnakaart, Suurendus ×1" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x2" -msgstr "" +msgstr "Pinnakaart, Suurendus ×2" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x4" -msgstr "" +msgstr "Pinnakaart, Suurendus ×4" #: src/client/game.cpp msgid "Noclip mode disabled" -msgstr "" +msgstr "Haakumatus keelatud" #: src/client/game.cpp msgid "Noclip mode enabled" -msgstr "Noclip režiim lubatud" +msgstr "Nakkumatus lubatud" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "" +msgstr "Haakumatus lubatud (pole 'haakumatus' volitust)" #: src/client/game.cpp msgid "Node definitions..." @@ -1205,6 +1388,14 @@ msgstr "Heli vaigistatud" #: 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 "Heli taastatud" @@ -1236,7 +1427,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "" @@ -1823,6 +2014,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "" @@ -1833,6 +2028,14 @@ 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 "" @@ -1881,7 +2084,7 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp @@ -1926,6 +2129,16 @@ 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 "Advanced" msgstr "Arenenud sätted" @@ -1939,10 +2152,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "" @@ -2192,10 +2401,19 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Vestlusklahv" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "Vestluse lülitusklahv" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" @@ -2463,6 +2681,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Vaikemäng" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2772,6 +2995,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "" @@ -2882,6 +3115,35 @@ 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 +#, fuzzy +msgid "Floatland noise" +msgstr "Põlvkonna kaardid" + +#: 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 "Fly key" msgstr "" @@ -2935,6 +3197,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4244,14 +4512,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4315,6 +4575,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp #, fuzzy msgid "Main menu script" msgstr "Menüü" @@ -4383,7 +4647,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4487,11 +4753,6 @@ #: src/settings_translation_file.cpp #, fuzzy -msgid "Mapgen flags" -msgstr "Põlvkonna kaardid" - -#: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen name" msgstr "Põlvkonna kaardid" @@ -4559,13 +4820,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4651,6 +4912,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4811,9 +5076,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4890,10 +5152,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4903,7 +5161,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4937,6 +5197,14 @@ 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 "" @@ -5006,6 +5274,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5459,6 +5739,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5481,6 +5768,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5492,15 +5783,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5618,7 +5919,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5773,6 +6074,10 @@ 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 "" @@ -6099,6 +6404,14 @@ 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 "" @@ -6130,20 +6443,29 @@ msgid "cURL timeout" msgstr "" -#~ msgid "Darkness sharpness" -#~ msgstr "Pimeduse teravus" - -#~ msgid "Enable VBO" -#~ msgstr "Luba VBO" - #, fuzzy -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Lubab filmic tone mapping" +#~ msgid "Toggle Cinematic" +#~ msgstr "Lülita kiirus sisse" #, fuzzy #~ msgid "Select Package File:" #~ msgstr "Vali modifikatsiooni fail:" #, fuzzy -#~ msgid "Toggle Cinematic" -#~ msgstr "Lülita kiirus sisse" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Lubab filmic tone mapping" + +#~ msgid "Enable VBO" +#~ msgstr "Luba VBO" + +#~ msgid "Darkness sharpness" +#~ msgstr "Pimeduse teravus" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Palun oota $1 allalaadimist ja paigaldamist…" + +#~ msgid "Back" +#~ msgstr "Tagasi" + +#~ msgid "Ok" +#~ msgstr "Olgu." diff -Nru minetest-5.2.0/po/eu/minetest.po minetest-5.3.0/po/eu/minetest.po --- minetest-5.2.0/po/eu/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/eu/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -7,9 +7,9 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-01-11 18:26+0000\n" -"Last-Translator: rubenwardy \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-08 20:47+0000\n" +"Last-Translator: sfan5 \n" "Language-Team: Basque \n" "Language: eu\n" @@ -17,7 +17,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10.1\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -27,6 +27,10 @@ msgid "You died" msgstr "Hil zara" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Errore bat gertatu da Lua script batean:" @@ -40,10 +44,6 @@ msgstr "Menu nagusia" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Ados" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Birkonektatu" @@ -101,7 +101,7 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "" +msgstr "Mod paketea desgaitu" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -109,13 +109,19 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "" +msgstr "Mod paketea gaitu" #: 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 "" +"Akatsa \"$1\" mod-a gaitzerakoan baimendu gabeko karaktereak dituelako. [a-" +"z0-9_] karaktereak erabil daitezke soilik." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" @@ -135,7 +141,7 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "" +msgstr "Mod-aren deskribapena ez dago eskuragarri." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" @@ -163,16 +169,17 @@ msgstr "Pakete guztiak" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Atzera" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Itzuli menu nagusira" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "$1 deskargatu eta instalatzen, itxaron mesedez..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Downloading..." +msgstr "Kargatzen..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -217,15 +224,52 @@ msgid "Update" msgstr "Eguneratu" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Badago \"$1\" izeneko mundu bat" #: 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 "Sortu" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "Informazioa:" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "" "Deskargatu jolasen bat, esaterako Minetest Game, minetest.net zerbitzaritik" @@ -234,25 +278,144 @@ msgid "Download one from minetest.net" msgstr "Deskargatu minetest.net zerbitzaritik" +#: 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 src/settings_translation_file.cpp msgid "Game" msgstr "Jolasa" +#: 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 "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 "Mapa sortzailea" +#: 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 "Ez da jolasik aukeratu" #: 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/dlg_settings_advanced.lua msgid "Seed" msgstr "Hazia" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "Abisua: \"Minimal development test\" garatzaileentzako da." #: builtin/mainmenu/dlg_create_world.lua @@ -275,11 +438,11 @@ #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: failed to delete \"$1\"" -msgstr "" +msgstr "pkgmgr: Akatsa \"$1\" ezabatzean" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" -msgstr "" +msgstr "pkgmgr: \"$1\" bide baliogabea" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" @@ -291,13 +454,15 @@ #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "" +msgstr "Mod paketea berrizendatu:" #: 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 pakete honek berezko izen zehatza du emanda bere modpack.conf-ean eta " +"berrizendatutako edozein gainidatziko du hemen." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" @@ -329,7 +494,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Lacunarity" -msgstr "" +msgstr "Hutsunetasuna" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Octaves" @@ -385,7 +550,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X spread" -msgstr "" +msgstr "X hedapena" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y" @@ -393,7 +558,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y spread" -msgstr "" +msgstr "Y hedapena" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z" @@ -401,7 +566,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z spread" -msgstr "" +msgstr "Z hedapena" #. ~ "absvalue" is a noise parameter flag. #. It is short for "absolute value". @@ -409,7 +574,7 @@ #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "absvalue" -msgstr "" +msgstr "Balio absolutua" #. ~ "defaults" is a noise parameter flag. #. It describes the default processing options @@ -424,7 +589,7 @@ #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "eased" -msgstr "" +msgstr "Arindua" #: builtin/mainmenu/pkgmgr.lua msgid "$1 (Enabled)" @@ -432,7 +597,7 @@ #: builtin/mainmenu/pkgmgr.lua msgid "$1 mods" -msgstr "" +msgstr "$1 mod" #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" @@ -440,126 +605,133 @@ #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" -msgstr "" +msgstr "Mod instalakuntza: Ezinezkoa S1 mod-en berezko izena aurkitzea" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" +"Mod instalakuntza: ezinezkoa $1 mod-entzako karpeta izen egokia aurkitzea" #: builtin/mainmenu/pkgmgr.lua msgid "Install: Unsupported file type \"$1\" or broken archive" msgstr "" +"Instalakuntza: \"$1\" sustengu gabeko fitxategi formatua edo hondatutako " +"fitxategia" #: builtin/mainmenu/pkgmgr.lua msgid "Install: file: \"$1\"" -msgstr "" +msgstr "Instalakuntza: fitxategia: \"$1\"" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" -msgstr "" +msgstr "Ezinezkoa baliozko mod edo mod pakete bat aurkitzea" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" -msgstr "" +msgstr "Akatsa $1 testura pakete moduan instalatzea" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a game as a $1" -msgstr "" +msgstr "Ezinezkoa joko bat $1 moduan instalatzea" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a mod as a $1" -msgstr "" +msgstr "Ezinezkoa mod bat $1 moduan instalatzea" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a modpack as a $1" -msgstr "" +msgstr "Ezinezkoa mod pakete bat $1 moduan instalatzea" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "" +msgstr "Lineako edukiak esploratu" #: builtin/mainmenu/tab_content.lua msgid "Content" -msgstr "" +msgstr "Edukia" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" -msgstr "" +msgstr "Desgaitu testura paketea" #: builtin/mainmenu/tab_content.lua msgid "Information:" -msgstr "" +msgstr "Informazioa:" #: builtin/mainmenu/tab_content.lua msgid "Installed Packages:" -msgstr "" +msgstr "Instalaturiko paketeak:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." -msgstr "" +msgstr "Menpekotasunik gabe." #: builtin/mainmenu/tab_content.lua msgid "No package description available" -msgstr "" +msgstr "Paketearen deskribapena ez dago erabilgarri" #: builtin/mainmenu/tab_content.lua msgid "Rename" -msgstr "" +msgstr "Berrizendatu" #: builtin/mainmenu/tab_content.lua msgid "Uninstall Package" -msgstr "" +msgstr "Paketea desinstalatu" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" -msgstr "" +msgstr "Testura paketea erabili" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" -msgstr "" +msgstr "Laguntzaile aktiboak" #: builtin/mainmenu/tab_credits.lua msgid "Core Developers" -msgstr "" +msgstr "Garatzaile nagusiak" #: builtin/mainmenu/tab_credits.lua msgid "Credits" -msgstr "" +msgstr "Kredituak" #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" -msgstr "" +msgstr "Lehenagoko laguntzaileak" #: builtin/mainmenu/tab_credits.lua msgid "Previous Core Developers" -msgstr "" +msgstr "Lehenagoko garatzaile nagusiak" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" -msgstr "" +msgstr "Zerbitzaria iragarri" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" -msgstr "" +msgstr "Helbidea lotu" #: builtin/mainmenu/tab_local.lua msgid "Configure" -msgstr "" +msgstr "Konfiguratu" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua msgid "Creative Mode" -msgstr "" +msgstr "Sormen modua" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua msgid "Enable Damage" -msgstr "" +msgstr "Kalteak baimendu" #: builtin/mainmenu/tab_local.lua msgid "Host Game" -msgstr "" +msgstr "Joko ostalaria" #: builtin/mainmenu/tab_local.lua msgid "Host Server" +msgstr "Zerbitzari ostalaria" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" msgstr "" #: builtin/mainmenu/tab_local.lua @@ -885,7 +1057,7 @@ #. When in doubt, test your translation. #: src/client/fontengine.cpp msgid "needs_fallback_font" -msgstr "" +msgstr "no" #: src/client/game.cpp msgid "" @@ -1190,6 +1362,14 @@ 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 "" @@ -1221,7 +1401,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "" @@ -1799,6 +1979,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "" @@ -1809,6 +1993,14 @@ 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 "" @@ -1857,7 +2049,7 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp @@ -1902,6 +2094,16 @@ 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 "Advanced" msgstr "" @@ -1915,10 +2117,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "" @@ -2168,10 +2366,18 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Txat tekla" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" @@ -2437,6 +2643,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2751,6 +2961,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "" @@ -2860,6 +3080,35 @@ 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 +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Jokalariaren transferentzia distantzia" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Hegaz egin tekla" @@ -2913,6 +3162,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4235,14 +4490,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4309,6 +4556,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4375,7 +4626,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4463,10 +4716,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4534,13 +4783,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4625,6 +4874,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4783,9 +5036,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4862,10 +5112,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4875,7 +5121,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4909,6 +5157,14 @@ 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 "" @@ -4977,6 +5233,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5415,6 +5683,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5437,6 +5712,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5448,15 +5727,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5575,7 +5864,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5731,6 +6020,10 @@ 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 "" @@ -6052,6 +6345,14 @@ 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 "" @@ -6081,4 +6382,13 @@ #: src/settings_translation_file.cpp msgid "cURL timeout" -msgstr "" +msgstr "cURL-en denbora muga" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "$1 deskargatu eta instalatzen, itxaron mesedez..." + +#~ msgid "Back" +#~ msgstr "Atzera" + +#~ msgid "Ok" +#~ msgstr "Ados" diff -Nru minetest-5.2.0/po/fil/minetest.po minetest-5.3.0/po/fil/minetest.po --- minetest-5.2.0/po/fil/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/fil/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Filipino (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-01-11 18:26+0000\n" "Last-Translator: rubenwardy \n" "Language-Team: Filipino 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 "FPS in pause menu" msgstr "" @@ -2847,6 +3057,34 @@ 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 "Fly key" msgstr "" @@ -2900,6 +3138,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4195,14 +4439,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4266,6 +4502,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4332,7 +4572,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4420,10 +4662,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4491,13 +4729,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4582,6 +4820,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4740,9 +4982,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4819,10 +5058,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4832,7 +5067,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4866,6 +5103,14 @@ 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 "" @@ -4934,6 +5179,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5372,6 +5629,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5394,6 +5658,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5405,15 +5673,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5530,7 +5808,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5683,6 +5961,10 @@ 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 "" @@ -6002,6 +6284,14 @@ 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 "" diff -Nru minetest-5.2.0/po/fr/minetest.po minetest-5.3.0/po/fr/minetest.po --- minetest-5.2.0/po/fr/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/fr/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: French (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-04-03 20:24+0000\n" -"Last-Translator: Allan Nordhøy \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-06 21:41+0000\n" +"Last-Translator: Estébastien Robespi \n" "Language-Team: French \n" "Language: fr\n" @@ -12,7 +12,7 @@ "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.0-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,6 +22,10 @@ msgid "You died" msgstr "Vous êtes mort" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Une erreur est survenue dans un script Lua :" @@ -35,10 +39,6 @@ msgstr "Menu principal" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Ok" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Se reconnecter" @@ -116,6 +116,10 @@ "Seuls les caractères alphanumériques [a-z0-9_] sont autorisés." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Rechercher des mods" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod :" @@ -161,16 +165,16 @@ msgstr "Tous les paquets" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Retour" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Retour au menu principal" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Téléchargement et installation de $1, veuillez patienter..." +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/dlg_contentstore.lua +msgid "Downloading..." +msgstr "Chargement..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -215,15 +219,51 @@ msgid "Update" msgstr "Mise à jour" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Affichage" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Le monde \"$1\" existe déjà" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "Terrain supplémentaire" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "Refroidissement en altitude" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "Faible humidité d'altitude" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Mélange de biomes" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Biomes" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Cavernes" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Grottes" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Créer" #: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Décorations" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Téléchargez un jeu comme Minetest Game depuis minetest.net" @@ -231,25 +271,147 @@ msgid "Download one from minetest.net" msgstr "Téléchargez-en un depuis minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Donjons" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Terrain plat" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Îles volantes" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Îles volantes (expérimental)" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Jeu" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Générer un terrain non fractal : océans et sous-sol" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Collines" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Rivières irrigantes" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Augmente l'humidité autour des rivières" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Lacs" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "L'air sec et chaud réduit le niveau d'eau ou assèche les rivières" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" 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" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Drapeaux indicateurs du générateur de carte" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Montagnes" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Coulée de boue" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Réseau souterrain" + #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" msgstr "Aucun jeu sélectionné" #: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "Réduire la température avec l'altitude" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "Réduire l'humidité avec l'altitude" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Rivières" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Rivière au niveau de mer" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Graine" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +msgid "Smooth transition between biomes" +msgstr "Transition progressive entre les biomes" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" +"Structures apparaissantes sur le sol (sans effets sur la création d'arbre et " +"de jungle par v6)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "" +"Structures apparaissant sur le terrain, généralement des arbres et des " +"plantes" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Tempéré, désertique" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Tempéré, désertique, tropical" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Tempéré, désertique, tropical, de toundra, de taïga" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "Érosion du sol" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Arbres et végétation de jungle" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Varier la profondeur fluviale" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Très grande cavernes profondes" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." msgstr "Avertissement : le jeu minimal est fait pour les développeurs." #: builtin/mainmenu/dlg_create_world.lua @@ -422,9 +584,8 @@ #. can be enabled in noise settings in #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "eased" -msgstr "l'aisance" +msgstr "lissé" #: builtin/mainmenu/pkgmgr.lua msgid "$1 (Enabled)" @@ -568,6 +729,10 @@ msgstr "Héberger un serveur" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Installer à partir de ContentDB" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Nom / Mot de passe" @@ -750,7 +915,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Screen:" -msgstr "Ecran :" +msgstr "Écran :" #: builtin/mainmenu/tab_settings.lua msgid "Settings" @@ -1118,7 +1283,7 @@ #: src/client/game.cpp msgid "KiB/s" -msgstr "Ko/s" +msgstr "Kio/s" #: src/client/game.cpp msgid "Media..." @@ -1126,7 +1291,7 @@ #: src/client/game.cpp msgid "MiB/s" -msgstr "Mo/s" +msgstr "Mio/s" #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" @@ -1221,6 +1386,14 @@ msgstr "Son coupé" #: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "L'audio système est désactivé" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "Cette compilation ne gère pas l'audio du système" + +#: src/client/game.cpp msgid "Sound unmuted" msgstr "Son rétabli" @@ -1252,17 +1425,17 @@ msgid "Zoom currently disabled by game or mod" msgstr "Le zoom est actuellement désactivé par un jeu ou un mod" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "ok" #: src/client/gameui.cpp msgid "Chat hidden" -msgstr "Chat caché" +msgstr "Tchat caché" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "Chat affiché" +msgstr "Tchat affiché" #: src/client/gameui.cpp msgid "HUD hidden" @@ -1367,7 +1540,7 @@ #: src/client/keycode.cpp msgid "Left Shift" -msgstr "Shift gauche" +msgstr "Maj. gauche" #: src/client/keycode.cpp msgid "Left Windows" @@ -1510,7 +1683,7 @@ #: src/client/keycode.cpp msgid "Shift" -msgstr "Shift" +msgstr "Maj." #: src/client/keycode.cpp msgid "Sleep" @@ -1561,13 +1734,13 @@ "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" -"Vous êtes sur le point de rejoindre ce serveur avec le nom \"%s\" pour la " +"Vous êtes sur le point de rejoindre ce serveur avec le nom « %s » pour la " "première fois.\n" "Si vous continuez, un nouveau compte utilisant vos identifiants sera créé " "sur ce serveur.\n" -"Veuillez retaper votre mot de passe et cliquer sur \"S'enregistrer et " -"rejoindre\" pour confirmer la création de votre compte, ou cliquez sur " -"\"Annuler\"." +"Veuillez retaper votre mot de passe et cliquer sur « S'enregistrer et " +"rejoindre » pour confirmer la création de votre compte, ou cliquez sur " +"« Annuler »." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" @@ -1595,7 +1768,7 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" -msgstr "Chatter" +msgstr "Tchat" #: src/gui/guiKeyChangeMenu.cpp msgid "Command" @@ -1615,7 +1788,7 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" -msgstr "Double-appui sur \"saut\" pour voler" +msgstr "Double-appui sur « saut » pour voler" #: src/gui/guiKeyChangeMenu.cpp msgid "Drop" @@ -1773,12 +1946,11 @@ "If enabled, virtual joystick will also tap \"aux\" button when out of main " "circle." msgstr "" -"(Android) Utiliser le joystick vrituel pour déclencher le bouton \"aux\".\n" -"Si activé, le joystick virtuel va également appuyer sur le bouton \"aux\" " +"(Android) Utiliser le joystick vrituel pour déclencher le bouton « aux ».\n" +"Si activé, le joystick virtuel va également appuyer sur le bouton « aux » " "lorsqu'en dehors du cercle principal." #: 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" @@ -1789,17 +1961,17 @@ "situations.\n" "Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" -"(X,Y,Z) de décalage fractal à partir du centre du monde en unités " -"« échelle ».\n" -"Peut être utilisé pour déplacer un point désiré en (0;0) pour créer une\n" -"zone d'apparition convenable, ou pour autoriser à « zoomer » sur un\n" -"point désiré en augmentant l'« échelle ».\n" -"La valeur par défaut est adaptée pour créer un zone d'apparition convenable " -"pour les ensembles\n" -"de Mandelbrot avec des paramètres par défaut, elle peut nécessité une " -"modification dans\n" -"d'autres situations.\n" -"Portée environ -2 à 2. Multiplier par « échelle » pour le décalage des nœuds." +"(X ; Y ; Z) de décalage fractal à partir du centre du monde en \n" +"unités « échelle ». Peut être utilisé pour déplacer un point\n" +"désiré en (0 ; 0) pour créer un point d'apparition convenable,\n" +"ou pour « zoomer » sur un point désiré en augmentant\n" +"« l'échelle ».\n" +"La valeur par défaut est réglée pour créer une zone\n" +"d'apparition convenable pour les ensembles de Mandelbrot\n" +"avec les paramètres par défaut, elle peut nécessité une \n" +"modification dans d'autres situations.\n" +"Interval environ de -2 à 2. Multiplier par « échelle » convertir\n" +"le décalage en nœuds." #: src/settings_translation_file.cpp msgid "" @@ -1853,9 +2025,8 @@ msgstr "Bruit 2D contrôlant la taille et la fréquence des plateaux montagneux." #: src/settings_translation_file.cpp -#, fuzzy msgid "2D noise that locates the river valleys and channels." -msgstr "Bruit 2D contrôlant la forme et la taille des collines arrondies." +msgstr "Bruit 2D qui localise les vallées fluviales et les canaux" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -1866,6 +2037,10 @@ msgstr "Mode écran 3D" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "Paralaxe en mode 3D" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "Bruit 3D définissant les cavernes géantes." @@ -1878,6 +2053,19 @@ "Définit également la structure des montagnes flottantes." #: 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 "" +"Bruit 3D pour la structures des îles volantes.\n" +"Si la valeur par défaut est changée, le bruit « d'échelle » (0,7 par défaut)" +"\n" +"doit peut-être être ajustée, parce que l'effilage des îles volantes\n" +"fonctionne le mieux quand ce bruit est environ entre -2 et 2." + +#: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." msgstr "Bruit 3D définissant la structure des gorges." @@ -1942,8 +2130,8 @@ msgstr "Intervalle des ABM" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" -msgstr "Limite absolue des files émergentes" +msgid "Absolute limit of queued blocks to emerge" +msgstr "Limite stricte de la file de blocs émergents" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -1993,6 +2181,22 @@ "les écrans 4k." #: 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 "" +"Règle la densité de la couche de massifs volants.\n" +"La densité augmente avec cette valeur. Peut être positive ou négative.\n" +"Valeur égale à 0,0 implique 50 % du volume est du massif volant.\n" +"Valeur égale à 2,0 implique une couche de massifs volants solide\n" +"(peut dépendre de « mgv7_np_floatland », toujours vérifier pour\n" +"être sûr)." + +#: src/settings_translation_file.cpp msgid "Advanced" msgstr "Avancé" @@ -2012,10 +2216,6 @@ "la lumière, et elle a très peu d'effet sur la lumière naturelle de la nuit." #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "Refroidissement en altitude" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "Toujours voler et être rapide" @@ -2198,17 +2398,17 @@ msgstr "Bump mapping" #: src/settings_translation_file.cpp -#, fuzzy 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" "Increasing can reduce artifacting on weaker GPUs.\n" "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" -"Caméra 'près de la coupure de distance' dans les nœuds, entre 0 et 0,5.\n" +"Caméra « près de la coupure de distance » dans les nœuds, entre 0 et 0,25.\n" +"Fonctionne uniquement sur plateformes GLES.\n" "La plupart des utilisateurs n’auront pas besoin de changer cela.\n" -"L’augmentation peut réduire l’artifacting sur des GPU plus faibles.\n" -"0.1 - Par défaut, 0,25 - Bonne valeur pour les comprimés plus faibles." +"L’augmentation peut réduire les anomalies sur des petites cartes graphique.\n" +"0,1 par défaut, 0,25 bonne valeur pour des composants faibles." #: src/settings_translation_file.cpp msgid "Camera smoothing" @@ -2228,11 +2428,11 @@ #: src/settings_translation_file.cpp msgid "Cave noise #1" -msgstr "Bruit de cave #1" +msgstr "Bruit de cave nº 1" #: src/settings_translation_file.cpp msgid "Cave noise #2" -msgstr "Bruit de grotte #2" +msgstr "Bruit de grotte nº 2" #: src/settings_translation_file.cpp msgid "Cave width" @@ -2240,11 +2440,11 @@ #: src/settings_translation_file.cpp msgid "Cave1 noise" -msgstr "Bruit des cave #1" +msgstr "Bruit des cave nº 1" #: src/settings_translation_file.cpp msgid "Cave2 noise" -msgstr "Bruit des caves #2" +msgstr "Bruit des caves nº 2" #: src/settings_translation_file.cpp msgid "Cavern limit" @@ -2293,8 +2493,16 @@ "- Auto : Simple sur Android, complet pour le reste." #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "Taille de police du chat" + +#: src/settings_translation_file.cpp msgid "Chat key" -msgstr "Chatter" +msgstr "Tchatter" + +#: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "Verbosité logicielle" #: src/settings_translation_file.cpp msgid "Chat message count limit" @@ -2318,7 +2526,7 @@ #: src/settings_translation_file.cpp msgid "Chatcommands" -msgstr "Commandes de chat" +msgstr "Commandes de tchat" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2342,7 +2550,7 @@ #: src/settings_translation_file.cpp msgid "Client and Server" -msgstr "Client et Serveur" +msgstr "Client et serveur" #: src/settings_translation_file.cpp msgid "Client modding" @@ -2502,12 +2710,12 @@ msgstr "" "Contrôle la largeur des tunnels, une valeur plus faible crée des tunnels " "plus large.\n" -"Valeur >= 10.0 désactive complètement la génération de tunnel et évite le " +"Valeur >= 10,0 désactive complètement la génération de tunnel et évite le " "calcul intensif de bruit." #: src/settings_translation_file.cpp msgid "Crash message" -msgstr "Message d'interruption du serveur" +msgstr "Message de plantage" #: src/settings_translation_file.cpp msgid "Creative" @@ -2543,7 +2751,7 @@ #: src/settings_translation_file.cpp msgid "Debug log file size threshold" -msgstr "Seuil de la taille du fichier de logs" +msgstr "Seuil de la taille du fichier de journal" #: src/settings_translation_file.cpp msgid "Debug log level" @@ -2554,7 +2762,6 @@ msgstr "Touche pour diminuer le volume" #: src/settings_translation_file.cpp -#, fuzzy msgid "Decrease this to increase liquid resistance to movement." msgstr "Diminuez ceci pour augmenter la résistance liquide au mouvement." @@ -2591,6 +2798,10 @@ msgstr "Format de rapport par défaut" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "Taille d’empilement par défaut" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2734,11 +2945,11 @@ #: src/settings_translation_file.cpp msgid "Double tap jump for fly" -msgstr "Double-appui sur \"saut\" pour voler" +msgstr "Double-appui sur « saut » pour voler" #: src/settings_translation_file.cpp msgid "Double-tapping the jump key toggles fly mode." -msgstr "Double-appui sur \"saut\" pour voler." +msgstr "Double-appui sur « saut » pour voler." #: src/settings_translation_file.cpp msgid "Drop item key" @@ -2962,6 +3173,22 @@ "quand paramétré avec un nombre supérieur à 0." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "" +"Exposant contrôlant la forme du bas des massifs volants.\n" +"Une valeur égale à 1 donne une forme conique.\n" +"Une valeur supérieure à 1 donne une longue base éfilée (concave),\n" +"plus pour des îles volantes comme celles par défaut.\n" +"Une valeur inférieure à 1 (disons 0,25) donne une surface bien\n" +"définie en bas, plus pour une couche solide de massif volant." + +#: src/settings_translation_file.cpp msgid "FPS in pause menu" msgstr "FPS maximum sur le menu pause" @@ -2978,9 +3205,8 @@ msgstr "Intensité du mouvement de tête en tombant" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "Police alternative" +msgstr "Chemin de police alternative" #: src/settings_translation_file.cpp msgid "Fallback font shadow" @@ -3055,7 +3281,7 @@ "light edge to transparent textures. Apply this filter to clean that up\n" "at texture load time." msgstr "" -"Les textures filtrées peuvent mélanger des valeurs RGB avec des zones 100% " +"Les textures filtrées peuvent mélanger des valeurs RGB avec des zones 100 % " "transparentes.\n" "aboutissant parfois à des bords foncés ou clairs sur les textures " "transparentes.\n" @@ -3084,6 +3310,34 @@ msgstr "Fixer le joystick virtuel" #: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "Densité des massifs volants" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "Maximum Y de massifs volants" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "Minimum Y des massifs volants" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "Bruit des massifs volants" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "Paramètre de forme des massifs volants" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "Hauteur des bases des massifs volants" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "Niveau d'eau des massifs volants" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Voler" @@ -3137,6 +3391,14 @@ #: 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 "" +"Taille de police (en pt) des messages récents et du curseur.\n" +"Une valeur nulle correspond à la taille par défaut." + +#: src/settings_translation_file.cpp +msgid "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -3273,7 +3535,7 @@ "and junglegrass, 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 signal ‹décorations› contrôle toutes " +"Dans le générateur de terrain v6, le signal « décorations » contrôle toutes " "les décorations sauf les arbres\n" "et l’herbe de la jungle, dans tous les autres générateurs de terrain, ce " "signal contrôle toutes les décorations." @@ -3323,7 +3585,6 @@ msgstr "HUD" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- legacy: (try to) mimic old behaviour (default for release).\n" @@ -3332,8 +3593,8 @@ msgstr "" "Traitement des appels d'API Lua obsolètes :\n" "- legacy : imite l'ancien comportement (par défaut en mode release).\n" -"- log : imite et enregistre les appels obsolètes (par défaut en mode " -"debug).\n" +"- log : imite et enregistre les appels obsolètes (par défaut en mode debug)." +"\n" "- error : interruption à l'usage d'un appel obsolète (recommandé pour les " "développeurs de mods)." @@ -3569,16 +3830,14 @@ msgstr "Quelle profondeur pour faire des rivières." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How fast liquid waves will move. Higher = faster.\n" "If negative, liquid waves will move backwards.\n" "Requires waving liquids to be enabled." msgstr "" -"La vitesse à laquelle les ondes liquides se déplaceront. Plus haut = plus " -"rapide.\n" -"Si la valeur est négative, les ondes liquides seront inversées.\n" -"Nécessite l'activation de liquides ondulants." +"La vitesse des vagues augmente avec cette valeur.\n" +"Une valeur négative inverse leur mouvement.\n" +"Nécessite que l'ondulation des liquides soit active." #: src/settings_translation_file.cpp msgid "" @@ -3834,14 +4093,12 @@ msgstr "Inverser les mouvements verticaux de la souris." #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic font path" -msgstr "Chemin de la police Monospace" +msgstr "Chemin de la police Italique" #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic monospace font path" -msgstr "Chemin de la police Monospace" +msgstr "Chemin de la police Italique Monospace" #: src/settings_translation_file.cpp msgid "Item entity TTL" @@ -4720,13 +4977,12 @@ "réseau." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of liquid waves.\n" "Requires waving liquids to be enabled." msgstr "" -"Mettre sur \"true\" active les feuilles d'arbres mouvantes.\n" -"Nécessite les shaders pour être activé." +"Longueur des vagues.\n" +"Nécessite que l'ondulation des liquides soit active." #: src/settings_translation_file.cpp msgid "Length of time between Active Block Modifier (ABM) execution cycles" @@ -4769,32 +5025,20 @@ msgstr "Centre de boost de courbe de lumière" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost spread" -msgstr "Étalement du boost intermédiaire de la courbe de lumière" +msgstr "Étalement du boost de la courbe de lumière" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve gamma" -msgstr "Boost intermédiaire de la courbe de lumière" +msgstr "Courbe de lumière gamma" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve high gradient" -msgstr "Boost intermédiaire de la courbe de lumière" +msgstr "Fort gradient de la courbe de lumière" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve low gradient" -msgstr "Centre du boost intermédiaire de la courbe de lumière" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Limite des files émergentes sur le disque" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Limite des files émergentes à générer" +msgstr "Faible gradient de la courbe de lumière" #: src/settings_translation_file.cpp msgid "" @@ -4838,9 +5082,8 @@ msgstr "Délais de nettoyage d'une file de liquide" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid sinking" -msgstr "Vitesse d'écoulement du liquide" +msgstr "Écoulement du liquide" #: src/settings_translation_file.cpp msgid "Liquid update interval in seconds." @@ -4873,6 +5116,10 @@ msgstr "Limite basse Y des donjons." #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "Borne inférieure Y des massifs volants." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Script du menu principal" @@ -4906,23 +5153,22 @@ msgstr "Attributs spécifiques au Mapgen 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 "" -"Attributs de terrain spécifiques au générateur plat.\n" +"Attributs de terrain spécifiques au générateur de monde plat.\n" "Des lacs et des collines occasionnels peuvent être ajoutés au monde plat." #: 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 "" -"Attributs spécifiques au Mapgen v7.\n" -"'crêtes' activent les rivières." +"Attributs de terrain spécifiques au générateur de monde fractal.\n" +"'terrain' active la création de terrain non fractal,\n" +"c-à-d un océan, des îles et du souterrain." #: src/settings_translation_file.cpp msgid "" @@ -4946,7 +5192,6 @@ msgstr "Attributs spécifiques au 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" @@ -4954,18 +5199,21 @@ "the 'jungles' flag is ignored." msgstr "" "Attributs de génération du monde spécifiques au générateur v6.\n" -"Le signal ‹snowbiomes› active le nouveau système de 5 biomes.\n" -"Quand le nouveau système est activé les jungles sont automatiquement " -"activées et\n" -"le signal ‹jungles› est ignoré." +"Le paramètre ‹snowbiomes› active le nouveau système à 5 biomes.\n" +"Sous ce nouveau système, la création de jungles est automatique\n" +"et le paramètre ‹jungles› est ignoré." #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "Attributs spécifiques au Mapgen v7.\n" -"'crêtes' activent les rivières." +"- 'ridges', « crêtes » pour des rivières.\n" +"- 'floatlands', « massifs volant » massifs de terres atmosphèrique.\n" +"- 'caverns', « cavernes » pour des grottes immenses et profondes." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5012,36 +5260,32 @@ msgstr "Générateur de terrain Fractal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal specific flags" -msgstr "Signaux spécifiques au générateur de terrain plat" +msgstr "Drapeaux spécifiques au générateur Fractal" #: src/settings_translation_file.cpp msgid "Mapgen V5" msgstr "Générateur de terrain V5" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5 specific flags" -msgstr "Signaux spécifiques au générateur v5" +msgstr "Drapeaux spécifiques au générateur v5" #: src/settings_translation_file.cpp msgid "Mapgen V6" msgstr "Générateur de terrain V6" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6 specific flags" -msgstr "Signaux spécifiques au générateur v6" +msgstr "Drapeaux spécifiques au générateur V6" #: src/settings_translation_file.cpp msgid "Mapgen V7" msgstr "Générateur de terrain v7" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7 specific flags" -msgstr "Signaux spécifiques au générateur v7" +msgstr "Drapeaux spécifiques au générateur V7" #: src/settings_translation_file.cpp msgid "Mapgen Valleys" @@ -5056,10 +5300,6 @@ msgstr "Débogage de la génération du terrain" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Drapeaux de génération de terrain" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Nom du générateur de carte" @@ -5134,7 +5374,7 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Nombre maximum de mapblocks à lister qui doivent être générés.\n" "Laisser ce champ vide pour un montant approprié défini automatiquement." @@ -5142,7 +5382,7 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Nombre maximum de mapblocks à lister qui doivent être générés depuis un " "fichier.\n" @@ -5243,6 +5483,10 @@ msgstr "Méthodes utilisées pour l'éclairage des objets." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "Verbosité minimale du log dans le chat." + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Mini-carte" @@ -5255,16 +5499,12 @@ msgstr "Hauteur de scannage de la mini-carte" #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "" -"Limite minimale pour le nombre aléatoire de grandes grottes par mapchunk." +msgstr "Minimum pour le nombre de grandes grottes par mapchunk tiré au hasard." #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "" -"Limite minimale pour le nombre aléatoire de petites grottes par mapchunk." +msgstr "Minimum pour le nombre de petites grottes par mapchunk tiré au hasard." #: src/settings_translation_file.cpp msgid "Minimum texture size" @@ -5335,7 +5575,6 @@ msgstr "Couper le son" #: 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" @@ -5344,13 +5583,9 @@ msgstr "" "Nom du générateur de terrain qui sera utilisé à la création d’un nouveau " "monde.\n" -"Créer un nouveau monde depuis le menu principal ignorera ceci.\n" -"Les générateurs actuellement stables sont :\n" -"v5, v6, v7 (sauf îles flottantes), bloc unique.\n" -"‹stable› signifie que la génération d’un monde préexistant ne sera pas " -"changée\n" -"dans le futur. Notez cependant que les biomes sont définis par les jeux et " -"peuvent être sujets à changement." +"Cela sera perdu à la création d'un monde depuis le menu principal.\n" +"Les générateurs actuellement très instables sont :\n" +"- Les massifs volants du générateur v7 (option inactive par défaut)." #: src/settings_translation_file.cpp msgid "" @@ -5370,7 +5605,6 @@ "joueurs se connectent." #: src/settings_translation_file.cpp -#, fuzzy msgid "Near plane" msgstr "Plan à proximité" @@ -5423,12 +5657,8 @@ msgstr "Nombre de tâches en cours" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5439,19 +5669,17 @@ "processes, especially in singleplayer and/or when running Lua code in\n" "'on_generated'. For many users the optimum setting may be '1'." msgstr "" -"Nombre de threads à utiliser.\n" -"Rien ou 0 :\n" -"— Sélection automatique. Le nombre de threads sera\n" -"« nombre de processeurs − 2 », avec une limite inférieure de 1.\n" +"Nombre de threads « emerge » à utiliser.\n" +"Valeur nulle :\n" +"— Sélection automatique. Le nombre de threads sera le\n" +"« nombre de processeurs moins 2 », avec un minimum de 1.\n" "Toute autre valeur :\n" -"— Spécifie le nombre de threads, avec une limite inférieure de 1.\n" -"Avertissement : Augmenter le nombre de threads augmente la génération du " -"terrain du moteur\n" -"mais cela peut nuire à la performance du jeu en interférant avec d’autres.\n" -"processus, en particulier en mode solo ou lors de l’exécution du code Lua en " -"mode\n" -"« on_generated ».\n" -"Pour de nombreux utilisateurs, le réglage optimal peut être « 1 »." +"— Spécifie le nombre de threads, avec un minimum de 1.\n" +"ATTENTION : augmenter le nombre de threads accélère bien la création\n" +"de terrain, mais cela peut nuire à la performance du jeu en interférant\n" +"avec d’autres processus, en particulier en mode solo ou lors de \n" +"l’exécution du code Lua en mode « on_generated ».\n" +"Pour beaucoup, le réglage optimal peut être « 1 »." #: src/settings_translation_file.cpp msgid "" @@ -5527,10 +5755,6 @@ msgstr "Echelle de l'occlusion parallaxe" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Force de l'occlusion parallaxe" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5546,8 +5770,12 @@ "n’est pas disponible." #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Chemin où les captures d'écran sont sauvegardées." +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 "" +"Chemin d'accès pour les captures d'écran (absolu ou relatif).\n" +"La création du dossier sera faite si besoin." #: src/settings_translation_file.cpp msgid "" @@ -5577,7 +5805,6 @@ "La police de rentrée sera utilisée si la police ne peut pas être chargée." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Path to the monospace font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5585,10 +5812,10 @@ "This font is used for e.g. the console and profiler screen." msgstr "" "Chemin vers la police monospace.\n" -"Si le paramètre \"freetype\" est activé : doit être une police TrueType.\n" -"Si le paramètre \"freetype\" est désactivé : doit être une police de " -"vecteurs bitmap ou XML.\n" -"Cette police est utilisée pour par exemple la console et l’écran du " +"Si \"freetype\" est activé : doit être une police TrueType.\n" +"Si \"freetype\" est désactivé : doit être une police de vecteurs bitmap ou " +"XML.\n" +"Cette police est utilisée par exemple pour la console et l’écran du " "profileur." #: src/settings_translation_file.cpp @@ -5596,6 +5823,14 @@ msgstr "Mettre en pause sur perte du focus de la fenêtre" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "Limite par joueur de blocs en attente à charger depuis le disque" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "Limite par joueur des blocs émergents à créer" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Physique" @@ -5678,6 +5913,22 @@ msgstr "Profilage" #: src/settings_translation_file.cpp +msgid "Prometheus listener address" +msgstr "Adresse d'écoute pour Prometheus" + +#: 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" +"Adresse d'écoute pour Prometheus.\n" +"Lorsque Minetest est compilé avec l'option ENABLE_PROMETHEUS,\n" +"cette adresse est utilisée pour l'écoute de données pour Prometheus.\n" +"Les données sont sur http://127.0.0.1:30000/metrics" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "Proportion de grandes grottes qui contiennent du liquide." @@ -5708,9 +5959,8 @@ msgstr "Messages de discussion récents" #: src/settings_translation_file.cpp -#, fuzzy msgid "Regular font path" -msgstr "Chemin du rapport" +msgstr "Chemin d'accès pour la police normale" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5738,7 +5988,6 @@ msgstr "Chemin du rapport" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Restricts the access of certain client-side functions on servers.\n" "Combine the byteflags below to restrict client-side features, or set to 0\n" @@ -5752,12 +6001,13 @@ "READ_PLAYERINFO: 32 (disable get_player_names call client-side)" msgstr "" "Limite l'accès de certaines fonctions côté client sur les serveurs\n" -"Combine these byteflags below to restrict client-side features:\n" -"LOAD_CLIENT_MODS: 1 (désactive le chargement des mods du client)\n" -"CHAT_MESSAGES: 2 (désactivez l'appel send_chat_message côté client)\n" -"READ_ITEMDEFS: 4 (désactivez l'appel get_item_def côté client)\n" -"READ_NODEDEFS: 8 (désactiver l'appel côté client de get_node_def)\n" -"LOOKUP_NODES_LIMIT: 16 (limite les appels get_node côté client à\n" +"Combiner les byteflags si dessous pour restraindre ou mettre 0\n" +"pour laisser sans restriction.\n" +"LOAD_CLIENT_MODS : 1 (désactive le chargement des mods du client)\n" +"CHAT_MESSAGES : 2 (désactivez l'appel send_chat_message côté client)\n" +"READ_ITEMDEFS : 4 (désactivez l'appel get_item_def côté client)\n" +"READ_NODEDEFS : 8 (désactiver l'appel côté client de get_node_def)\n" +"LOOKUP_NODES_LIMIT : 16 (limite les appels get_node côté client à\n" "csm_restriction_noderange)" #: src/settings_translation_file.cpp @@ -5785,14 +6035,12 @@ msgstr "Intervalle de répétition du clic droit" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel depth" msgstr "Profondeur des rivières" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel width" -msgstr "Profondeur des rivières" +msgstr "Largeur des rivières" #: src/settings_translation_file.cpp msgid "River depth" @@ -5807,9 +6055,8 @@ msgstr "Taille des rivières" #: src/settings_translation_file.cpp -#, fuzzy msgid "River valley width" -msgstr "Profondeur des rivières" +msgstr "Largeur des vallées fluviales" #: src/settings_translation_file.cpp msgid "Rollback recording" @@ -5930,7 +6177,6 @@ msgstr "Epaisseur des bords de sélection" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Selects one of 18 fractal types.\n" "1 = 4D \"Roundy\" Mandelbrot set.\n" @@ -6023,30 +6269,29 @@ "par les clients." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving leaves.\n" "Requires shaders to be enabled." msgstr "" -"Mettre sur \"true\" active les feuilles d'arbres mouvantes.\n" -"Nécessite les shaders pour être activé." +"Mettre sur « true » active le mouvement des\n" +"feuilles d'arbres mouvantes. Nécessite les\n" +"shaders pour être activé." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving liquids (like water).\n" "Requires shaders to be enabled." msgstr "" -"Mettre sur \"true\" active les vagues.\n" +"Mettre sur « true » active les vagues.\n" "Nécessite les shaders pour être activé." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving plants.\n" "Requires shaders to be enabled." msgstr "" -"Mettre sur \"true\" active les plantes mouvantes.\n" +"Mettre sur « true » active le mouvement\n" +"des végétaux.\n" "Nécessite les shaders pour être activé." #: src/settings_translation_file.cpp @@ -6065,22 +6310,20 @@ "Fonctionne seulement avec OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the default font. If 0, then shadow will not be " "drawn." msgstr "" -"Décalage de l'ombre de la police, si 0 est choisi alors l'ombre ne " -"s'affichera pas." +"Décalage de l'ombre de la police par défaut (en pixel). Aucune ombre si la " +"valeur est 0." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the fallback font. If 0, then shadow will not " "be drawn." msgstr "" -"Décalage de l'ombre de la police, si 0 est choisi alors l'ombre ne " -"s'affichera pas." +"Décalage de l'ombre de la police de secours (en pixel). Aucune ombre si la " +"valeur est 0." #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6214,14 +6457,25 @@ "habituelle." #: src/settings_translation_file.cpp -#, fuzzy +msgid "" +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." +msgstr "" +"Donne les valeurs par défaut de la taille des piles de nœuds, d'items et " +"d'outils.\n" +"Les mods ou les parties peuvent fixer explicitement une pile pour certains " +"items." + +#: 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 "" -"Propagation de la courbe de lumière mi-boost.\n" -"Écart-type du gaussien moyennement boosté." +"Longueur d'intervalle de l'amplification de la courbe de lumière.\n" +"Contrôle la largeur de l'intervalle d'amplification.\n" +"Écart type de la gaussienne d'amplification de courbe de lumière." #: src/settings_translation_file.cpp msgid "Static spawnpoint" @@ -6240,23 +6494,22 @@ msgstr "Bruit pour l’étalement des montagnes en escalier" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "Intensité de parallaxe en mode 3D." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Force des normalmaps autogénérés." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Force de la courbe de lumière boost.\n" -"Les 3 paramètres 'boost' définissent une gamme de la lumière\n" -"courbe qui est stimulée dans la luminosité." - -#: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Force de l'occlusion parallaxe." +"Niveau d'amplification de la courbure de la lumière.\n" +"Les trois paramètres « d'amplification » définissent un intervalle\n" +"de la courbe de lumière pour lequel la luminosité est amplifiée." #: src/settings_translation_file.cpp msgid "Strict protocol checking" @@ -6267,6 +6520,20 @@ msgstr "Echapper les codes de couleur" #: 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 the 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 "SQLite synchronisé" @@ -6401,6 +6668,7 @@ "Entrer /privs dans le jeu pour voir une liste complète des privilèges." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The radius of the volume of blocks around every player that is subject to " "the\n" @@ -6408,7 +6676,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" "Le rayon du volume de blocs autour de chaque joueur soumis à la\n" "truc de bloc actif, indiqué dans mapblocks (16 noeuds).\n" @@ -6619,6 +6887,11 @@ msgstr "Limite haute Y des donjons." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Limite haute Y des donjons." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Activer les nuages 3D au lieu des nuages 2D (plats)." @@ -7020,6 +7293,14 @@ msgstr "La distance Y jusqu'à laquelle la caverne peut s'étendre." #: 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 "Hauteur (Y) moyenne de la surface du terrain." @@ -7051,131 +7332,137 @@ msgid "cURL timeout" msgstr "Délais d'interruption de cURL" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Ajuster la correction gamma. Les valeurs plus basses sont plus claires.\n" -#~ "Ce paramètre s'applique au client seulement et est ignoré par le serveur." - -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Modifie la façon dont les terres flottantes montagneuses s’effilent au-" -#~ "dessus et au-dessous du point médian." +#~ msgid "Toggle Cinematic" +#~ msgstr "Mode cinématique" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Milieu de la courbe de lumière mi-boost." +#~ msgid "Select Package File:" +#~ msgstr "Sélectionner le fichier du mod :" -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgid "Y of upper limit of lava in large caves." #~ msgstr "" -#~ "Contrôle la densité des terrains montagneux sur les terres flottantes.\n" -#~ "C'est un décalage ajouté à la valeur du bruit 'mgv7_np_mountain'." +#~ "Coordonnée Y de la limite supérieure des grandes grottes pseudo-" +#~ "aléatoires." -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Contrôle la largeur des tunnels, une valeur plus petite crée des tunnels " -#~ "plus larges." +#~ msgid "Waving Water" +#~ msgstr "Eau ondulante" -#~ msgid "Darkness sharpness" -#~ msgstr "Démarcation de l'obscurité" +#~ msgid "Whether dungeons occasionally project from the terrain." +#~ msgstr "Si les donjons font parfois saillie du terrain." -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." -#~ msgstr "" -#~ "Défini les zones de terrain plat flottant.\n" -#~ "Des terrains plats flottants apparaissent lorsque le bruit > 0." +#~ msgid "Projecting dungeons" +#~ msgstr "Projection des donjons" -#~ msgid "Enable VBO" -#~ msgstr "Activer Vertex Buffer Object: objet tampon de vertex" +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Hauteur (Y) auquel les ombres portées s’étendent." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Autorise le mappage tonal cinématographique" +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "Hauteur (Y) du point de flottaison et de la surface des lacs." -#~ msgid "Floatland base height noise" -#~ msgstr "Le bruit de hauteur de base des terres flottantes" +#~ msgid "Waving water" +#~ msgstr "Vagues" -#~ msgid "Floatland base noise" -#~ msgstr "Le bruit de base des terres flottantes" +#~ 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 " +#~ "terrains plats flottants." -#~ msgid "Floatland level" -#~ msgstr "Hauteur des terrains flottants" +#~ msgid "" +#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgstr "" +#~ "Hauteur maximum typique, au-dessus et au-dessous du point médian, du " +#~ "terrain de montagne flottantes." -#~ msgid "Floatland mountain density" -#~ msgstr "Densité des montagnes flottantes" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Cette police sera utilisée pour certaines langues." -#~ msgid "Floatland mountain exponent" -#~ msgstr "Densité des montagnes flottantes" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Force de la courbe de lumière mi-boost." -#~ msgid "Floatland mountain height" -#~ msgstr "Hauteur des montagnes flottantes" +#~ msgid "Shadow limit" +#~ msgstr "Limite des ombres" -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "Niveau d'opacité de l'ombre de la police (entre 0 et 255)." +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Chemin vers police TrueType ou Bitmap." -#~ msgid "Gamma" -#~ msgstr "Gamma" +#~ msgid "Lightness sharpness" +#~ msgstr "Démarcation de la luminosité" + +#~ msgid "Lava depth" +#~ msgstr "Profondeur de lave" #~ msgid "IPv6 support." #~ msgstr "Support IPv6." -#~ msgid "Lava depth" -#~ msgstr "Profondeur de lave" +#~ msgid "Gamma" +#~ msgstr "Gamma" -#~ msgid "Lightness sharpness" -#~ msgstr "Démarcation de la luminosité" +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "Niveau d'opacité de l'ombre de la police (entre 0 et 255)." -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Chemin vers police TrueType ou Bitmap." +#~ msgid "Floatland mountain height" +#~ msgstr "Hauteur des montagnes flottantes" -#~ msgid "Shadow limit" -#~ msgstr "Limite des ombres" +#~ msgid "Floatland base height noise" +#~ msgstr "Le bruit de hauteur de base des terres flottantes" -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Force de la courbe de lumière mi-boost." +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Autorise le mappage tonal cinématographique" -#~ msgid "This font will be used for certain languages." -#~ msgstr "Cette police sera utilisée pour certaines langues." +#~ msgid "Enable VBO" +#~ msgstr "Activer Vertex Buffer Object: objet tampon de vertex" #~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." #~ msgstr "" -#~ "Hauteur maximum typique, au-dessus et au-dessous du point médian, du " -#~ "terrain de montagne flottantes." +#~ "Défini les zones de terrain plat flottant.\n" +#~ "Des terrains plats flottants apparaissent lorsque le bruit > 0." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgid "Darkness sharpness" +#~ msgstr "Démarcation de l'obscurité" + +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "" -#~ "Variation de la hauteur des collines et de la profondeur des lacs sur les " -#~ "terrains plats flottants." +#~ "Contrôle la largeur des tunnels, une valeur plus petite crée des tunnels " +#~ "plus larges." -#~ msgid "Waving water" -#~ msgstr "Vagues" +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "Contrôle la densité des terrains montagneux sur les terres flottantes.\n" +#~ "C'est un décalage ajouté à la valeur du bruit 'mgv7_np_mountain'." -#~ msgid "Y-level of floatland midpoint and lake surface." -#~ msgstr "Hauteur (Y) du point de flottaison et de la surface des lacs." +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Milieu de la courbe de lumière mi-boost." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Hauteur (Y) auquel les ombres portées s’étendent." +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." +#~ msgstr "" +#~ "Modifie la façon dont les terres flottantes montagneuses s’effilent au-" +#~ "dessus et au-dessous du point médian." -#~ msgid "Projecting dungeons" -#~ msgstr "Projection des donjons" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Ajuster la correction gamma. Les valeurs plus basses sont plus claires.\n" +#~ "Ce paramètre s'applique au client seulement et est ignoré par le serveur." -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "Si les donjons font parfois saillie du terrain." +#~ msgid "Path to save screenshots at." +#~ msgstr "Chemin où les captures d'écran sont sauvegardées." -#~ msgid "Waving Water" -#~ msgstr "Eau ondulante" +#~ msgid "Parallax occlusion strength" +#~ msgstr "Force de l'occlusion parallaxe" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "" -#~ "Coordonnée Y de la limite supérieure des grandes grottes pseudo-" -#~ "aléatoires." +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Limite des files émergentes sur le disque" -#~ msgid "Select Package File:" -#~ msgstr "Sélectionner le fichier du mod :" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Téléchargement et installation de $1, veuillez patienter..." -#~ msgid "Toggle Cinematic" -#~ msgstr "Mode cinématique" +#~ msgid "Back" +#~ msgstr "Retour" + +#~ msgid "Ok" +#~ msgstr "Ok" diff -Nru minetest-5.2.0/po/gd/minetest.po minetest-5.3.0/po/gd/minetest.po --- minetest-5.2.0/po/gd/minetest.po 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/po/gd/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,6635 @@ +# 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: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-22 17:56+0000\n" +"Last-Translator: GunChleoc \n" +"Language-Team: Gaelic \n" +"Language: gd\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" +"X-Generator: Weblate 4.2-dev\n" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "You died" +msgstr "" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "Respawn" +msgstr "" + +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Prìomh chlàr-taice" + +#: builtin/fstk/ui.lua +msgid "An error occurred in a Lua script:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occurred:" +msgstr "" + +#: builtin/mainmenu/common.lua src/client/game.cpp +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +#, fuzzy +msgid "Server supports protocol versions between $1 and $2. " +msgstr " " + +#: builtin/mainmenu/common.lua +#, fuzzy +msgid "Server enforces protocol version $1. " +msgstr " " + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +#, fuzzy +msgid "Protocol version mismatch. " +msgstr " " + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No modpack description provided." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No game description provided." +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 hard dependencies" +msgstr "Gun eisimeileachd chruaidh" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Optional dependencies:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Dependencies:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No optional dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "" + +#: 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_rename_modpack.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp +#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiPasswordChange.cpp +msgid "Cancel" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable modpack" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable modpack" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable all" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +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_contentstore.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "All packages" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Failed to download $1" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Back to Main Menu" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Aibhnean air àirde na mara" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Aibhnean" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Tìr air fhleòd san speur" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Aibhnean boga" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Nì seo an tìr nas buige faisg air aibhnean" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Caochail doimhne nan aibhnean" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "Adhbharaichidh saoghal tioram is teth aibhnean tana no tioram" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no games installed." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +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 "Network of tunnels and caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Smooth transition between biomes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Brataich gineadair nam mapa" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Brataich shònraichte do ghineadair nam mapa" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a game, such as Minetest Game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Gineadair nam mapa" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No game selected" +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 +#: src/client/keycode.cpp +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_rename_modpack.lua +msgid "Accept" +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_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Disabled" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Enabled" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Browse" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Offset" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Scale" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "2D Noise" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Octaves" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Persistance" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Lacunarity" +msgstr "" + +#. ~ "defaults" is a noise parameter flag. +#. It describes the default processing options +#. for noise settings in main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.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 +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "eased" +msgstr "" + +#. ~ "absvalue" is a noise parameter flag. +#. It is short for "absolute value". +#. It can be enabled in noise settings in +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "absvalue" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "(No description of setting given)" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid integer." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must be at least $1." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must not be larger than $1." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid number." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select directory" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select file" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "< Back to Settings page" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Edit" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Show technical names" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 (Enabled)" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a $1 as a texture pack" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Failed to install $1 to $2" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to find a valid mod or modpack" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a modpack as a $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find suitable folder name for modpack $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a mod as a $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find real mod name for: $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a game as a $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: file: \"$1\"" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: Unsupported file type \"$1\" or broken archive" +msgstr "" +"Stàladh: Faidhle dhen t-seòrsa “$1” ris nach eil taic no tasglann bhriste" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 mods" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Installed Packages:" +msgstr "Pacaidean air an stàladh:" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +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 "No dependencies." +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Use Texture Pack" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Information:" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Uninstall Package" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Active Contributors" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Stàlaich geamannan o ContentDB" + +#: builtin/mainmenu/tab_local.lua +msgid "Configure" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Name/Password" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Play Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Start Game" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Address / Port" +msgstr "Seòladh / Port" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name / Password" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Del. Favorite" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Favorite" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Ping" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "" + +#. ~ PvP = Player versus Player +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Join Game" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Outlining" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Particles" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Screen:" +msgstr "Sgrìn:" + +#: builtin/mainmenu/tab_settings.lua +msgid "Autosave Screen Size" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Shaders" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders (unavailable)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/client/game.cpp +msgid "Change Keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "All Settings" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold: (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bump Mapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Tone Mapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Generate Normal Maps" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Liquids" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "" +"Airson sgàileadairean a chur an comas, feumaidh tu draibhear OpenGL a " +"chleachdadh." + +#: builtin/mainmenu/tab_settings.lua +msgid "Settings" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "" + +#: src/client/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client/client.cpp +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp +#, fuzzy +msgid "Provided password file failed to open: " +msgstr " " + +#: src/client/clientlauncher.cpp +msgid "Please choose a name!" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp +#, fuzzy +msgid "Provided world path doesn't exist: " +msgstr " " + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "" + +#. ~ DO NOT TRANSLATE THIS LITERALLY! +#. This is a special string. Put either "no" or "yes" +#. into the translation field (literally). +#. Choose "yes" if the language requires use of the fallback +#. font, "no" otherwise. +#. The fallback font is (normally) required for languages with +#. non-Latin script, like Chinese. +#. When in doubt, test your translation. +#: src/client/fontengine.cpp +msgid "needs_fallback_font" +msgstr "no" + +#: src/client/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/client/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/client/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/client/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/client/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/client/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "Client side scripting is disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Sound muted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound unmuted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "" + +#: src/client/game.cpp +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 "Tha am modh sgiathaidh an comas" + +#: src/client/game.cpp +msgid "Fly mode enabled (note: no 'fly' privilege)" +msgstr "Tha am modh sgiathaidh an comas (an aire: gun sochair “fly”)" + +#: src/client/game.cpp +msgid "Fly mode disabled" +msgstr "Tha am modh sgiathaidh à comas" + +#: src/client/game.cpp +msgid "Pitch move mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Pitch move 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 "Tha am modh luath an comas (an aire: gun sochair “fast”)" + +#: src/client/game.cpp +msgid "Fast mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode enabled" +msgstr "Tha am modh gun bhearradh an comas" + +#: src/client/game.cpp +msgid "Noclip mode enabled (note: no 'noclip' privilege)" +msgstr "Tha am modh gun bhearradh an comas (an aire: gun sochair “noclip”)" + +#: src/client/game.cpp +msgid "Noclip mode disabled" +msgstr "Tha am modh gun bhearradh à comas" + +#: src/client/game.cpp +msgid "Cinematic mode enabled" +msgstr "Tha am modh film an comas" + +#: src/client/game.cpp +msgid "Cinematic mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x1" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x2" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x4" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x1" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x2" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x4" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info shown" +msgstr "" + +#: src/client/game.cpp +msgid "Profiler graph shown" +msgstr "" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info, profiler graph, and wireframe hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info and profiler graph hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update enabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at maximum: %d" +msgstr "Tha astar na faicsinn cho mòr sa ghabhas: %d" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at minimum: %d" +msgstr "" + +#: src/client/game.cpp +msgid "Enabled unlimited viewing range" +msgstr "" + +#: src/client/game.cpp +msgid "Disabled unlimited viewing range" +msgstr "" + +#: src/client/game.cpp +msgid "Zoom currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\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 "" +"Controls:\n" +"- %s: move forwards\n" +"- %s: move backwards\n" +"- %s: move left\n" +"- %s: move right\n" +"- %s: jump/climb\n" +"- %s: sneak/go down\n" +"- %s: drop item\n" +"- %s: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\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 "Continue" +msgstr "" + +#: src/client/game.cpp +msgid "Change Password" +msgstr "" + +#: src/client/game.cpp +msgid "Game paused" +msgstr "" + +#: src/client/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to OS" +msgstr "" + +#: src/client/game.cpp +msgid "Game info:" +msgstr "Fiosrachadh mun gheama:" + +#: src/client/game.cpp +#, fuzzy +msgid "- Mode: " +msgstr " " + +#: src/client/game.cpp +msgid "Remote server" +msgstr "" + +#: src/client/game.cpp +#, fuzzy +msgid "- Address: " +msgstr " " + +#: src/client/game.cpp +msgid "Hosting server" +msgstr "" + +#: src/client/game.cpp +#, fuzzy +msgid "- Port: " +msgstr " " + +#: src/client/game.cpp +msgid "Singleplayer" +msgstr "" + +#: src/client/game.cpp +msgid "On" +msgstr "" + +#: src/client/game.cpp +msgid "Off" +msgstr "" + +#: src/client/game.cpp +msgid "- Damage: " +msgstr "– Dochann: " + +#: src/client/game.cpp +#, fuzzy +msgid "- Creative Mode: " +msgstr " " + +#. ~ PvP = Player versus Player +#: src/client/game.cpp +#, fuzzy +msgid "- PvP: " +msgstr " " + +#: src/client/game.cpp +#, fuzzy +msgid "- Public: " +msgstr " " + +#: src/client/game.cpp +#, fuzzy +msgid "- Server Name: " +msgstr " " + +#: src/client/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat shown" +msgstr "Tha a’ chabadaich ’ga shealltainn" + +#: src/client/gameui.cpp +msgid "Chat hidden" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD hidden" +msgstr "" + +#: src/client/gameui.cpp +#, c-format +msgid "Profiler shown (page %d of %d)" +msgstr "" + +#: src/client/gameui.cpp +msgid "Profiler hidden" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Backspace" +msgstr "Backspace" + +#: src/client/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/client/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/client/keycode.cpp +msgid "Return" +msgstr "" + +#: src/client/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Control" +msgstr "" + +#. ~ Key name, common on Windows keyboards +#: src/client/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/client/keycode.cpp +msgid "Caps Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Space" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page up" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page down" +msgstr "" + +#: src/client/keycode.cpp +msgid "End" +msgstr "" + +#: src/client/keycode.cpp +msgid "Home" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Left" +msgstr "" + +#: src/client/keycode.cpp +msgid "Up" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Right" +msgstr "" + +#: src/client/keycode.cpp +msgid "Down" +msgstr "" + +#. ~ Key name +#: src/client/keycode.cpp +msgid "Select" +msgstr "" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" +msgstr "" + +#: src/client/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/client/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/client/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/client/keycode.cpp +msgid "Help" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 4" +msgstr "4 air pada nan àireamhan" + +#: 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 "8 air pada nan àireamhan" + +#: src/client/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad ." +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/client/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Control" +msgstr "Control clì" + +#: src/client/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Escape" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Convert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Nonconvert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Accept" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Mode Change" +msgstr "" + +#: src/client/keycode.cpp +msgid "Apps" +msgstr "" + +#: src/client/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/client/keycode.cpp +msgid "Erase EOF" +msgstr "" + +#: src/client/keycode.cpp +msgid "Play" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Zoom" +msgstr "" + +#: src/client/keycode.cpp +msgid "OEM Clear" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp +#, c-format +msgid "" +"You are about to join this server with the name \"%s\" for the first time.\n" +"If you proceed, a new account using your credentials will be created on this " +"server.\n" +"Please retype your password and click 'Register and Join' to confirm account " +"creation, or click 'Cancel' to abort." +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp +msgid "Register and Join" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "" + +#: src/gui/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "\"Special\" = climb down" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Thoir gnogag dhùbailte air “leum” airson sgiathadh a thoglachadh" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Automatic jumping" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "brùth air iuchair" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Special" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Tàislich" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Prev. item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Next item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Change camera" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle minimap" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Toglaich sgiathadh" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle pitchmove" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Toglaich am modh gun bhearradh" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Mute" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Autoforward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. range" +msgstr "Meudaich an t-astar" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Local command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle HUD" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle chat log" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fog" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Change" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +#, fuzzy +msgid "Sound Volume: " +msgstr " " + +#: src/gui/guiVolumeChange.cpp +msgid "Exit" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Muted" +msgstr "" + +#. ~ Imperative, as in "Enter/type in text". +#. Don't forget the space. +#: src/gui/modalMenu.cpp +msgid "Enter " +msgstr "Cuir a-steach " + +#. ~ 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 +msgid "LANG_CODE" +msgstr "gd" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" +"Ma tha seo an comas, ’s urrainn dhut blocaichean a chur ann far a bheil thu ’" +"nad sheasamh (co chois + àirde do shùil).\n" +"Bidh seo feumail nuair a bhios tu ag obair le bogsaichean nòd ann an " +"raointean beaga." + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "Sgiathadh" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the \"fly\" privilege on the server." +msgstr "" +"’S urrainn dhan chluicheadair sgiathadh gun bhuaidh na iom-tharraing air.\n" +"Bidh feum air sochair “fly” air an fhrithealaiche." + +#: src/settings_translation_file.cpp +msgid "Pitch move mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, makes move directions relative to the player's pitch when flying " +"or swimming." +msgstr "" +"Ma tha seo an comas, bidh an gluasad a-rèir pids a’ chluicheadair rè " +"sgiathaidh no snàimh." + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via the \"special\" key).\n" +"This requires the \"fast\" privilege on the server." +msgstr "" +"Gluasad luath (leis an iuchair “shònraichte”).\n" +"Bidh feum air sochair “fast” air an fhrithealaiche." + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "Gun bhearradh" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the \"noclip\" privilege on the server." +msgstr "" +"Ma tha seo an comas còmhla ris a’ mhodh sgiathaidh, ’s urrainn dhan " +"chluicheadair sgiathadh tro nòdan soladach.\n" +"Bidh feum air sochair “noclip” on fhrithealaiche." + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when looking around. Also called look or mouse smoothing.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Special key for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, \"special\" key instead of \"sneak\" key is used for climbing " +"down and\n" +"descending." +msgstr "" +"Ma tha seo an comas, thèid iuchair “shònraichte” seach “tàisleachaidh” a " +"chleachdadh\n" +"airson dìreadh." + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "Thoir gnogag dhùbailte airson leum no sgiathadh" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Toglaichidh gnogag dhùbailte air iuchair an leuma am modh sgiathaidh." + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "Sgiathaich an-còmhnaidh ’s gu luath" + +#: src/settings_translation_file.cpp +msgid "" +"If disabled, \"special\" key is used to fly fast if both fly and fast mode " +"are\n" +"enabled." +msgstr "" +"Ma tha seo à comas, thèid iuchair “shònraichte” a chleachdadh airson " +"sgiathadh\n" +"ma tha an dà chuid am modh sgiathaidh ’s am modh luadh an comas." + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right\n" +"mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically jump up single-node obstacles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Safe digging and placing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prevent digging and placing from repeating when holding the mouse buttons.\n" +"Enable this when you dig or place too often by accident." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Continuous forward movement, toggled by autoforward key.\n" +"Press the autoforward key again or the backwards movement to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touch screen threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The length in pixels it takes for touch screen interaction to start." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed virtual joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) Fixes the position of virtual joystick.\n" +"If disabled, virtual joystick will center to first-touch's position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers aux button" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) Use virtual joystick to trigger \"aux\" button.\n" +"If enabled, virtual joystick will also tap \"aux\" button when out of main " +"circle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable joysticks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick ID" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The identifier of the joystick to use" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The type of joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick button repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated events\n" +"when holding down a joystick button combination." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick frustum sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"ingame view frustum around." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"Will also disable autoforward, when active.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a ghluaiseas an cluicheadair dhan taobh chlì.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Right key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a ghluaiseas an cluicheadair dhan taobh deas.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +msgstr "Iuchair an tàisleachaidh" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair airson tàisleachadh.\n" +"Tha i ‘ga cleachdadh airson dìreadh agus dìreadh san uisge ma bhios " +"aux1_descends à comas.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Special key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a ghluaiseas gu luath sa mhodh luath.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Chat key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Command key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type local commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "Iuchair an sgiathaidh" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thoglaicheas an sgiathadh.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Pitch move key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling pitch move mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "Iuchair modha gun bhearradh" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thoglaicheas am modh gun bhearradh.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar next key" +msgstr "Iuchair air adhart a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the next item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an ath-nì air a’ ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar previous key" +msgstr "Iuchair air ais a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the previous item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an nì roimhe air a’ ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Mute key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for muting the game.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inc. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dec. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatic forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling autoforward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View zoom key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key to use view zoom when possible.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 1 key" +msgstr "Iuchair air slot 1 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the first hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas a’ chiad slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 2 key" +msgstr "Iuchair air slot 2 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the second hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an dàrna slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 3 key" +msgstr "Iuchair air slot 3 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the third hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an treas slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 4 key" +msgstr "Iuchair air slot 4 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fourth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an ceathramh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 5 key" +msgstr "Iuchair air slot 5 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fifth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an còigeamh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 6 key" +msgstr "Iuchair air slot 6 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the sixth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an siathamh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 7 key" +msgstr "Iuchair air slot 7 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the seventh hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an seachdamh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 8 key" +msgstr "Iuchair air slot 8 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the eighth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an t-ochdamh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 9 key" +msgstr "Iuchair air slot 9 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the ninth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an naoidheamh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 10 key" +msgstr "Iuchair air slot 10 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the tenth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an deicheamh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 11 key" +msgstr "Iuchair air slot 11 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 11th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an 11mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 12 key" +msgstr "Iuchair air slot 12 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 12th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an 12mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 13 key" +msgstr "Iuchair air slot 13 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 13th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an 13mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 14 key" +msgstr "Iuchair air slot 14 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 14th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an 14mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 15 key" +msgstr "Iuchair air slot 15 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 15th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an 15mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 16 key" +msgstr "Iuchair air slot 16 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 16th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an 16mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 17 key" +msgstr "Iuchair air slot 17 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 17th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an 17mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 18 key" +msgstr "Iuchair air slot 18 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 18th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an 18mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 19 key" +msgstr "Iuchair air slot 19 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 19th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas an 19mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 20 key" +msgstr "Iuchair air slot 20 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 20th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 20mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 21 key" +msgstr "Iuchair air slot 21 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 21st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 21mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 22 key" +msgstr "Iuchair air slot 22 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 22nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 22mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 23 key" +msgstr "Iuchair air slot 23 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 23rd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 23mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 24 key" +msgstr "Iuchair air slot 24 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 24th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 24mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 25 key" +msgstr "Iuchair air slot 25 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 25th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 25mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 26 key" +msgstr "Iuchair air slot 26 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 26th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 26mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 27 key" +msgstr "Iuchair air slot 27 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 27th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 27mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 28 key" +msgstr "Iuchair air slot 28 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 28th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 28mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 29 key" +msgstr "Iuchair air slot 29 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 29th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 29mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 30 key" +msgstr "Iuchair air slot 30 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 30th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 30mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 31 key" +msgstr "Iuchair air slot 31 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 31st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 31mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 32 key" +msgstr "Iuchair air slot 32 a’ ghrad-bhàr" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 32nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"An iuchair a thaghas am 32mh slot dhen ghrad-bhàr.\n" +"Faic http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large chat console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the large chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camera update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "Iuchair toglachadh an fhiosrachaidh dì-bhugachaidh" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-Game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic" +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 "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Method used to highlight selected object." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Digging particles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adds particles when digging a node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use mip mapping to scale 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 "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"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 "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +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 "" +"Shaders allow advanced visual effects and may increase performance on some " +"video\n" +"cards.\n" +"This only works with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shader path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to shader directory. If no path is defined, default location will be " +"used." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filmic tone mapping" +msgstr "Mapadh tòna film" + +#: 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 "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" +"Claonadh na h-èifeachd occlusion na paraileig air fheadh, seo sgèile/2 mar " +"as àbhaist." + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving liquids (like water).\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The maximum height of the surface of waving liquids.\n" +"4.0 = Wave height is two nodes.\n" +"0.0 = Wave doesn't move at all.\n" +"Default is 1.0 (1/2 node).\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wavelength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of liquid waves.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How fast liquid waves will move. Higher = faster.\n" +"If negative, liquid waves will move backwards.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "Crathadh duillich" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +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 "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pause on lost window focus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Open the pause menu when the window's focus is lost. Does not pause if a " +"formspec is\n" +"open." +msgstr "" +"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 +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View distance in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Near plane" +msgstr "" + +#: src/settings_translation_file.cpp +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" +"Increasing can reduce artifacting on weaker GPUs.\n" +"0.1 = Default, 0.25 = Good value for weaker tablets." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autosave screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save window size automatically when modified." +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 "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VSync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Alters the light curve by applying 'gamma correction' to it.\n" +"Higher values make middle and lower light levels brighter.\n" +"Value '1.0' leaves the light curve unaltered.\n" +"This only has significant effect on daylight and artificial\n" +"light, it has very little effect on natural night light." +msgstr "" +"Atharraichidh seo lùb an t-solais a’ cur “gamma correction” air.\n" +"Nì luachan nas àirde an solas meadhanach no fann nas soilleire.\n" +"Fàgaidh luach “1.0” lùb an t-solais mar a tha i.\n" +"Chan eil buaidh mhòr aige ach air solas an latha is na h-oidhche fuadaine,\n" +"agus cha mhòr nach bi buaidh air solas oidhche nàdarra idir." + +#: src/settings_translation_file.cpp +msgid "Light curve low gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at minimum light level.\n" +"Controls the contrast of the lowest light levels." +msgstr "" +"Caisead lùb an t-solais aig an ìre as fainne.\n" +"Stiùirichidh seo iomsgaradh an t-solais fhainn." + +#: src/settings_translation_file.cpp +msgid "Light curve high gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at maximum light level.\n" +"Controls the contrast of the highest light levels." +msgstr "" +"Caisead lùb an t-solais aig an ìre as soilleire.\n" +"Stiùirichidh seo iomsgaradh an t-solais shoilleir." + +#: src/settings_translation_file.cpp +msgid "Light curve boost" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Strength of light curve boost.\n" +"The 3 'boost' parameters define a range of the light\n" +"curve that is boosted in brightness." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost center" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Center of light curve boost range.\n" +"Where 0.0 is minimum light level, 1.0 is maximum light level." +msgstr "" +"Meadhan rainse meudachadh lùb an t-solais.\n" +"Is 0.0 an ìre as fhainne agus 1.0 an ìre as soilleire air an solas." + +#: src/settings_translation_file.cpp +msgid "Light curve boost spread" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Spread of light curve boost range.\n" +"Controls the width of the range to be boosted.\n" +"Standard deviation of the light curve boost Gaussian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "Dràibhear video" + +#: src/settings_translation_file.cpp +msgid "" +"The rendering back-end for Irrlicht.\n" +"A restart is required after changing this.\n" +"Note: On Android, stick with OGLES1 if unsure! App may fail to start " +"otherwise.\n" +"On other platforms, OpenGL is recommended, and it’s the only driver with\n" +"shader support currently." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable view bobbing and amount of view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing factor" +msgstr "Factar bogadaich an tuiteim" + +#: 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 "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side.\n" +"- crossview: Cross-eyed 3d\n" +"- pageflip: quadbuffer based 3d.\n" +"Note that the interlaced mode requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selection box lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Recent Chat Messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of recent chat messages to show" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "Leud as motha a’ ghrad-bhàr" + +#: 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 "" +"A’ chuid as motha dhen uinneag làithreach a thèid a chleachdadh airson a’ " +"ghrad-bhàr.\n" +"Tha seo feumail ma dh’fheumas tu rudeigin a shealltainn taobh deas no clì " +"air a’ ghrad-bhàr." + +#: src/settings_translation_file.cpp +msgid "HUD scale factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the hudbar elements." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Delay between mesh updates on the client in ms. Increasing this will slow\n" +"down the rate of mesh updates, thus reducing jitter on slower clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh 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" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Usable to make minimap smoother on slower machines." +msgstr "" +"True = 256\n" +"False = 128\n" +"Gabhaidh a chleachdadh airson am meanbh-mhapa a dhèanamh nas rèidhe air " +"uidheaman slaodach." + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables animation of inventory items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog start" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fraction of the visible distance at which fog starts to be rendered" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Opaque liquids" +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 "World-aligned textures mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Textures on a node may be aligned either to the node or to the world.\n" +"The former mode suits better things like machines, furniture, etc., while\n" +"the latter makes stairs and microblocks fit surroundings better.\n" +"However, as this possibility is new, thus may not be used by older servers,\n" +"this option allows enforcing it for certain node types. Note though that\n" +"that is considered EXPERIMENTAL and may not work properly." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World-aligned textures may be scaled to span several nodes. However,\n" +"the server may not send the scale you want, especially if you use\n" +"a specially-designed texture pack; with this option, the client tries\n" +"to determine the scale automatically basing on the texture size.\n" +"See also texture_min_size.\n" +"Warning: This option is EXPERIMENTAL!" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show entity selection boxes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale GUI by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"properly support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name to tooltip." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FreeType fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether FreeType fonts are used, requires FreeType support to be compiled " +"in.\n" +"If disabled, bitmap and XML vectors fonts are used instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font bold by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font italic by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shadow offset (in pixels) of the default font. If 0, then shadow will not be " +"drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the default font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Regular font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the default font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"The fallback font will be used if the font cannot be loaded." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the monospace font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "Slighe dhan chlò aon-leud" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the monospace font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font is used for e.g. the console and profiler screen." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the fallback font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not " +"be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path of the fallback font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font will be used for certain languages or if the default font is " +"unavailable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Font size of the recent chat text and chat prompt in point (pt).\n" +"Value 0 will use the default font size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to save screenshots at. Can be an absolute or relative path.\n" +"The folder will be created if it doesn't already exist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Format of screenshots." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot quality" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Screenshot quality. Only used for JPEG format.\n" +"1 means worst quality; 100 means best quality.\n" +"Use 0 for default quality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "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 "Enable console window" +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 "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables the sound system.\n" +"If disabled, this completely disables all sounds everywhere and the in-game\n" +"sound controls will be non-functional.\n" +"Changing this setting requires a restart." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Volume of all sounds.\n" +"Requires the sound system to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to mute sounds. You can unmute sounds at any time, unless the\n" +"sound system is disabled (enable_sound=false).\n" +"In-game, you can toggle the mute state with the mute key or by using the\n" +"pause menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable Lua modding support on client.\n" +"This support is experimental and API can change." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the\n" +"Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum size of the out chat queue" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum size of the out chat queue.\n" +"0 to disable queueing and -1 to make the queue size unlimited." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable register confirmation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable register confirmation when connecting to server.\n" +"If disabled, new account will be registered automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server / Singleplayer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "Ainmich am frithealaiche" + +#: src/settings_translation_file.cpp +msgid "Automatically report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce to this serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strip color codes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Remove color codes from incoming chat messages\n" +"Use this to stop players from being able to use color in their messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server.\n" +"Ignored if bind_address is set.\n" +"Needs enable_ipv6 to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneous block sends per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks that are simultaneously sent per client.\n" +"The maximum total count is calculated dynamically:\n" +"max_total = ceil((#clients + max_users) * per_client / 4)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay in sending blocks after building" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, 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 "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can be connected simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Creative" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable creative mode for new created maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "Sochairean tùsail" + +#: 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 "" +"Na sochairean a gheibh cleachdaichean ùra gu fèin-obrachail.\n" +"Faic /privs sa gheama airson liosta slàn air rèiteachadh an fhrithealaiche ’" +"s nan tuilleadan agad." + +#: src/settings_translation_file.cpp +msgid "Basic privileges" +msgstr "Sochairean bunasach" + +#: src/settings_translation_file.cpp +msgid "Privileges that players with basic_privs can grant" +msgstr "Sochairean as urrainn do chluicheadairean le basic_privs a cheadachadh" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "Astar tar-chur nan cluicheadairean gun chuingeachadh" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" +"Mìnichidh seo an t-astar as motha airson tar-chur chluicheadairean ann am " +"bloca (0 = gun chuingeachadh)." + +#: src/settings_translation_file.cpp +msgid "Player versus player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" +"Co-dhiù am faod cluicheadairean càch a chèile a leòn ’s a mharbhadh gus nach " +"fhaod." + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod channels support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +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 "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Format of player chat messages. The following strings are valid " +"placeholders:\n" +"@name, @message, @timestamp (optional)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes).\n" +"\n" +"Setting this larger than active_block_range will also cause the server\n" +"to maintain active objects up to this distance in the direction the\n" +"player is looking. (This can avoid mobs suddenly disappearing from view)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The radius of the volume of blocks around every player that is subject to " +"the\n" +"active block stuff, stated in mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run.\n" +"This is also the minimum range in which active objects (mobs) are " +"maintained.\n" +"This should be configured together with active_object_send_range_blocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples:\n" +"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World start time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time of day when a new world is started, in millihours (0-23999)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message max length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set the maximum character length of a chat message sent by clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message count limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amount of messages a player may send per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message kick threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Kick players who sent more than X messages per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration on ground or when climbing,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal acceleration in air when jumping or falling,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration in fast mode,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking and flying speed, in nodes per second." +msgstr "Luaths na coiseachd is sgiathaidh, ann an nòd gach diog." + +#: src/settings_translation_file.cpp +msgid "Sneaking speed" +msgstr "Luaths an tàisleachaidh" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed, in nodes per second." +msgstr "Luaths an tàisleachaidh ann an nòd gach diog." + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking, flying and climbing speed in fast mode, in nodes per second." +msgstr "" +"Luaths na coiseachd, sgiathaidh is sreap sa mhodh luath, ann an nòd gach " +"diog." + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical climbing speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Initial vertical speed when jumping, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Decrease this to increase liquid resistance to movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum liquid resistance. Controls deceleration when entering liquid at\n" +"high speed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sinking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls sinking speed in liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration of gravity, in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated Lua API calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over\n" +"network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block management interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between active block management cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ABM interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between Active Block Modifier (ABM) execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "NodeTimer interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between NodeTimer execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "Leig seachad mearachdan an t-saoghail" + +#: 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 "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "Eadaramh nan ùrachaidhean air an lionn ann an diog." + +#: src/settings_translation_file.cpp +msgid "Block send optimize distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"At this distance the server will aggressively optimize which blocks are sent " +"to\n" +"clients.\n" +"Small values potentially improve performance a lot, at the expense of " +"visible\n" +"rendering glitches (some blocks will not be rendered under water and in " +"caves,\n" +"as well as sometimes on land).\n" +"Setting this to a value greater than max_block_send_distance disables this\n" +"optimization.\n" +"Stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server side occlusion culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled the server will perform map block occlusion culling based on\n" +"on the eye position of the player. This can reduce the number of blocks\n" +"sent to the client 50-80%. The client will not longer receive most " +"invisible\n" +"so that the utility of noclip mode is reduced." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side modding restrictions" +msgstr "Cuingeachadh tuilleadain air a’ chliant" + +#: src/settings_translation_file.cpp +msgid "" +"Restricts the access of certain client-side functions on servers.\n" +"Combine the byteflags below to restrict client-side features, or set to 0\n" +"for no restrictions:\n" +"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n" +"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n" +"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n" +"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n" +"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n" +"csm_restriction_noderange)\n" +"READ_PLAYERINFO: 32 (disable get_player_names call client-side)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side node lookup range restriction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the CSM restriction for node range is enabled, get_node calls are " +"limited\n" +"to this distance from the player to the node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HTTP mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of mods that are allowed to access HTTP APIs, which\n" +"allow them to upload and download data to/from the internet." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Load the game profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Load the game profiler to collect game profiling data.\n" +"Provides a /profiler command to access the compiled profile.\n" +"Useful for mod developers and server operators." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default report format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The default format in which profiles are being saved,\n" +"when calling `/profiler save [format]` without format." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Report path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The file path relative to your worldpath in which profiles will be saved to." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrumentation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Entity methods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument the methods of entities on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Active Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Loading Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Loading Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chatcommands" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument chatcommands on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Global callbacks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument global callback functions on registration.\n" +"(anything you pass to a minetest.register_*() function)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Builtin" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument builtin.\n" +"This is usually only needed by core/builtin contributors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Have the profiler instrument itself:\n" +"* Instrument an empty function.\n" +"This estimates the overhead, that instrumentation is adding (+1 function " +"call).\n" +"* Instrument the sampler being used to update the statistics." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +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 "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "Ìre an loga dì-bhugachaidh" + +#: 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" +msgstr "" +"Ìre an loga a thèid a sgrìobhadh gu debug.txt:\n" +"- (gun logadh)\n" +"- none (teachdaireachdan gun ìre)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" + +#: src/settings_translation_file.cpp +msgid "Debug log file size threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the file size of debug.txt exceeds the number of megabytes specified in\n" +"this setting when it is opened, the file is moved to debug.txt.1,\n" +"deleting an older debug.txt.1 if it exists.\n" +"debug.txt is only moved if this setting is positive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "Ìre loga na cabadaich" + +#: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "An ìre as lugha dhen loga a thèid a sgrìobhadh dhan chabadaich." + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable IPv6 support (for both client and server).\n" +"Required for IPv6 connections to work at all." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Changes the main menu UI:\n" +"- Full: Multiple singleplayer worlds, game choice, texture pack chooser, " +"etc.\n" +"- Simple: One singleplayer world, no game or texture pack choosers. May " +"be\n" +"necessary for smaller screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Engine profiling data print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Print the engine's profiling data in regular intervals (in seconds).\n" +"0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "Ainm gineadair nam mapa" + +#: 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 "" +"Ainm air gineadair nam mapa a thèid a chleachdadh airson saoghal ùr a " +"chruthachadh.\n" +"Tar-aithnidh cruthachadh saoghail ùir sa phrìomh chlàr-taice seo.\n" +"Seo gineadairean nam mapa a tha glè neo-sheasmhach aig an àm seo:\n" +"- floatlands roghainneil aig v7 (à comas o thùs)." + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "Àirde an uisge" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "Àirde uachdar an uisge air an t-saoghal." + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" +"An t-astar on a thèid blocaichean a ghintinn dha na cliantan, ann am bloca " +"mapa (16 nòdan)." + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "Cuingeachadh gintinn mapa" + +#: 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 "" +"Cuingeachadh gintinn mapa, ann an nòd, sa h-uile 6 comhair o (0, 0, 0).\n" +"Cha dèid ach cnapan mapa a tha am broinn cuingeachadh gineadair nam mapa a " +"ghintinn.\n" +"Thèid luach fa leth a stòradh air gach saoghal." + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" +"and junglegrass, in all other mapgens this flag controls all decorations." +msgstr "" +"Buadhan gintinn mapa uile-choitcheann.\n" +"Ann an gineadair nam mapa v6, stiùirichidh bratach “decorations” sgeadachadh " +"seach craobhan is feur dlùth-choille\n" +"agus ann an gineadairean nam mapa eile, stiùirichidh a’ bhratach seo a h-" +"uile sgeadachadh." + +#: src/settings_translation_file.cpp +msgid "Biome API temperature and humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Temperature variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale temperature variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale humidity variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5" +msgstr "Gineadair nam mapa V5" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5 specific flags" +msgstr "Brataich shònraichte do ghineadair nam mapa V5" + +#: src/settings_translation_file.cpp +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 +msgid "Cave width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls width of tunnels, a smaller value creates wider tunnels.\n" +"Value >= 10.0 completely disables generation of tunnels and avoids the\n" +"intensive noise calculations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of upper limit of large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of small caves per mapchunk." +msgstr "" +"An àireamh as lugha de dh’uamhan beaga air thuaiream anns gach cnap mapa." + +#: src/settings_translation_file.cpp +msgid "Small cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of small caves per mapchunk." +msgstr "" +"An àireamh as motha de dh’uamhan beaga air thuaiream anns gach cnap mapa." + +#: src/settings_translation_file.cpp +msgid "Large cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of large caves per mapchunk." +msgstr "" +"An àireamh as lugha de dh’uamhan mòra air thuaiream anns gach cnap mapa." + +#: src/settings_translation_file.cpp +msgid "Large cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of large caves per mapchunk." +msgstr "" +"An àireamh as motha de dh’uamhan mòra air thuaiream anns gach cnap mapa." + +#: src/settings_translation_file.cpp +msgid "Large cave proportion flooded" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of cavern upper limit." +msgstr "Àirde-Y aig crìoch àrd nan uamhan." + +#: src/settings_translation_file.cpp +msgid "Cavern taper" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-distance over which caverns expand to full size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines full size of caverns, smaller values create larger caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noises" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of biome filler depth." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Factor noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Variation of terrain vertical scale.\n" +"When noise is < -0.55 terrain is near-flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of average terrain surface." +msgstr "Àirde-Y aig uachdar cuibheasach a’ chrutha-thìre." + +#: src/settings_translation_file.cpp +msgid "Cave1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise that determines number of dungeons per mapchunk." +msgstr "" +"Riasladh 3D a mhìnicheas an àireamh dhe thuill-dhubha anns gach cnap mapa." + +#: src/settings_translation_file.cpp +msgid "Mapgen V6" +msgstr "Gineadair nam mapa V6" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6 specific flags" +msgstr "Brataich shònraichte do ghineadair nam mapa V6" + +#: 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." +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" +"Nuair a bhios a’ bhratach “snowbiomes” an comas, thèid dlùth-choilltean a " +"chur an comas gu fèin-obrachail \n" +"agus a’ bhratach “jungles” a leigeil seachad." + +#: src/settings_translation_file.cpp +msgid "Desert noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Deserts occur when np_biome exceeds this value.\n" +"When the 'snowbiomes' flag is enabled, this is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sandy beaches occur when np_beach exceeds this value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain base noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of lower terrain and seabed." +msgstr "Àirde-Y a’ chrutha-thìre ìosal agus grunnd na mara." + +#: src/settings_translation_file.cpp +msgid "Terrain higher noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of higher terrain that creates cliffs." +msgstr "Àirde-Y a’ chrutha-thìre nas àirde a chruthaicheas creagan." + +#: src/settings_translation_file.cpp +msgid "Steepness noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height select noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mud noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies depth of biome surface nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas with sandy beaches." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of number of caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines tree areas and tree density." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Apple trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas where trees have apples." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7" +msgstr "Gineadair nam mapa V7" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7 specific flags" +msgstr "Brataich shònraichte do ghineadair nam mapa V7" + +#: 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 "" +"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa v7.\n" +"“ridges”: Aibhnean.\n" +"“floatlands”: Tìr air fhleòd san àile.\n" +"“caverns”: Uamhan mòra domhainn fon talamh." + +#: src/settings_translation_file.cpp +msgid "Mountain zero level" +msgstr "Àirde neoini nam beanntan" + +#: src/settings_translation_file.cpp +msgid "" +"Y of mountain density gradient zero level. Used to shift mountains " +"vertically." +msgstr "" +"Y air àirde neoini air caisead dùmhlachd nam beanntan. Thèid seo a " +"chleachdadh airson beanntan a thogail gu h-inghearach." + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "Astar cinn-chaoil air tìr air fhleòd" + +#: 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 "" +"Seo an t-astar-Y eadar an dùbhlachd làn ’s an òir air cinn-chaoil na tìre " +"air fhleòd.\n" +"Tòsichidh na cinn-chaoil aig an astar seo on chrìoch Y.\n" +"Airson breath tìre air fhleòd sholadach, stiùirichidh seo àirde nan cnoc/nam " +"beanntan.\n" +"Feumaidh e a bhith nas lugha na no co-ionnann ris an dàrna leth dhen astar " +"eadar na crìochan Y." + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "Easponant cinn-chaoil air tìr air fhleòd" + +#: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "" +"An t-easponant aig cinn-chaoil na tìre air fhleòd. Atharraichidh seo giùlnan " +"nan ceann-caol.\n" +"Cruthaichidh luach = 1.0 cinn-chaoil aon-fhillte loidhneach.\n" +"Cruthaichidh luachan > 1.0 cinn-chaoil rèidhe\n" +"a bhios freagarrach dha na cinn-chaoill sgaraichte thùsail.\n" +"Cruthaichidh luachan < 1.0 (can 0.25) uachdar nas mionaidiche le tìr-ìosal " +"nas rèidhe a bhios freagarrach\n" +"do bhreath tìre air fhleòd sholadach." + +#: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "Dùmhlachd na tìre air fhleòd" + +#: src/settings_translation_file.cpp +#, c-format +msgid "" +"Adjusts the density of the floatland layer.\n" +"Increase value to increase density. Can be positive or negative.\n" +"Value = 0.0: 50% of volume is floatland.\n" +"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" +"to be sure) creates a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "Àirde an uisge air tìr air fhleòd" + +#: 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 the 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 "" +"Àirde uachdar an uisge roghainneil a thèid a chur air breath tìre air fhleòd " +"soladaiche.\n" +"Tha uisge à comas o thùs agus cha dèid gin a chur ach\n" +"ma tha an luach seo nas àirde na “mgv7_floatland_ymax” − " +"“mgv7_floatland_taper”\n" +"(seo toiseach a’ chinn-chaoil).\n" +"***RABHADH, CUNNART AIR SAOGHLAN IS DÈANADAS AN FHRITHEALAICHE***:\n" +"Ma chuireas tu cur ann uisge an comas, feumaidh tu an tìr air fhleòd a " +"rèiteachadh ’s a chur fo dheuchainn a dhèanamh cinnteach gu bheil e ’na " +"breath sholadach\n" +"’s tu a’ cur 2.0 air “mgv7_floatland_density”\n" +"(no luach riatanach eile a-rèir “mgv7_np_floatland”)\n" +"ach an seachnaich thu sruthadh uisge anabarrach a chuireas ealach air an " +"fhrithealaiche ’s ach an seachnaich thu tuil mhòr air uachdar na tìre " +"foidhpe." + +#: src/settings_translation_file.cpp +msgid "Terrain alternative noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain persistence noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Varies roughness of terrain.\n" +"Defines the 'persistence' value for terrain_base and terrain_alt noises." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain and steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of maximum mountain height (in nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge underwater noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines large-scale river channel structure." +msgstr "Mìnichidh seo structar sruth nan aibhnean mòra." + +#: src/settings_translation_file.cpp +msgid "Mountain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining mountain structure and height.\n" +"Also defines structure of floatland mountain terrain." +msgstr "" +"Riasladh 3D a mhìnicheas structar is àirde nam beanntan.\n" +"Mìnichidh e cruth-tìre nam beanntan air tìr air fhleòd cuideachd." + +#: src/settings_translation_file.cpp +msgid "Ridge noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining structure of river canyon walls." +msgstr "Riasladh 3D a mhìnicheas structar ballachan sgoltaidhean-aibhne." + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "Riasladh na tìre air fhleòd" + +#: 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 "" +"Riasladh 3D a mhìnicheas structar na tìre air fhleòd.\n" +"Mura cleachd thu an luach tùsail, dh’fhaoidte gum fheàirrde thu gleus a chur " +"air “scale” an riaslaidh (0.7 o thùs)\n" +", on a dh’obraicheas foincseanan cinn-chaoil as fheàrr\n" +"nuair a bhios an riasladh seo eadar mu -2.0 agus 2.0." + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian" +msgstr "Gineadair nam mapa Carpathian" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian specific flags" +msgstr "Brataich shònraichte do ghineadair nam mapa Carpathian" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen Carpathian." +msgstr "" +"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa Carpathian." + +#: src/settings_translation_file.cpp +msgid "Base ground level" +msgstr "Àirde bhunasach a’ ghrunnda" + +#: src/settings_translation_file.cpp +msgid "Defines the base ground level." +msgstr "Mìnichidh seo àirde bhunasach a’ ghrunnda." + +#: src/settings_translation_file.cpp +msgid "River channel width" +msgstr "Leud sruth nan aibhnean" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river channel." +msgstr "Mìnichidh seo leud sruth nan aibhnean." + +#: src/settings_translation_file.cpp +msgid "River channel depth" +msgstr "Doimhne sruth nan aibhnean" + +#: src/settings_translation_file.cpp +msgid "Defines the depth of the river channel." +msgstr "Mìnichidh seo doimhne sruth nan aibhnean." + +#: src/settings_translation_file.cpp +msgid "River valley width" +msgstr "Leud gleanntan aibhne" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river valley." +msgstr "Mìnichidh seo leud gleanntan nan aibhnean." + +#: src/settings_translation_file.cpp +msgid "Hilliness1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness3 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Third of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness4 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fourth of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hills spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of ridged mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of step mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hill size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of rolling hills." +msgstr "Riasladh 2D a stiùiricheas cruth/meud nan cnoc." + +#: src/settings_translation_file.cpp +msgid "Ridged mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of ridged mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of step mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River noise" +msgstr "Riasladh aibhnean" + +#: src/settings_translation_file.cpp +msgid "2D noise that locates the river valleys and channels." +msgstr "Riasladh 2D a shuidhicheas glinn is sruthan nan aibhnean." + +#: src/settings_translation_file.cpp +msgid "Mountain variation noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat" +msgstr "Gineadair nam mapa Flat" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat specific flags" +msgstr "Brataich shònraichte do ghineadair nam mapa Flat" + +#: 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 "" +"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa Flat.\n" +"’S urrainn dhut lochan is cnuic ghanna a chur ris an t-saoghal rèidh." + +#: src/settings_translation_file.cpp +msgid "Ground level" +msgstr "Àirde a’ ghrunnda" + +#: src/settings_translation_file.cpp +msgid "Y of flat ground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for lakes.\n" +"Controls proportion of world area covered by lakes.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/depth of lake depressions." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for hills.\n" +"Controls proportion of world area covered by hills.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/height of hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines location and terrain of optional hills and lakes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal" +msgstr "Gineadair nam mapa Fractal" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal specific flags" +msgstr "Brataich shònraichte do ghineadair nam mapa Fractal" + +#: 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 "" +"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa Fractal.\n" +"Cuiridh “terrain” gintinn crutha-tìre nach eil fractalach an comas:\n" +"cuan, eileanan is fon talamh." + +#: src/settings_translation_file.cpp +msgid "Fractal type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Selects one of 18 fractal types.\n" +"1 = 4D \"Roundy\" Mandelbrot set.\n" +"2 = 4D \"Roundy\" Julia set.\n" +"3 = 4D \"Squarry\" Mandelbrot set.\n" +"4 = 4D \"Squarry\" Julia set.\n" +"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n" +"6 = 4D \"Mandy Cousin\" Julia set.\n" +"7 = 4D \"Variation\" Mandelbrot set.\n" +"8 = 4D \"Variation\" Julia set.\n" +"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n" +"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n" +"11 = 3D \"Christmas Tree\" Mandelbrot set.\n" +"12 = 3D \"Christmas Tree\" Julia set.\n" +"13 = 3D \"Mandelbulb\" Mandelbrot set.\n" +"14 = 3D \"Mandelbulb\" Julia set.\n" +"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n" +"16 = 3D \"Cosine Mandelbulb\" Julia set.\n" +"17 = 4D \"Mandelbulb\" Mandelbrot set.\n" +"18 = 4D \"Mandelbulb\" Julia set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Iterations of the recursive function.\n" +"Increasing this increases the amount of fine detail, but also\n" +"increases processing load.\n" +"At iterations = 20 this mapgen has a similar load to mapgen V7." +msgstr "" +"Ath-thriall an fhoincsein ath-chùrsaiche.\n" +"Ma mheudaicheas tu seo, bidh barrachd mion-chruthan air\n" +"ach bi barrachd eallaich air a’ phròiseasadh cuideachd.\n" +"Ma tha ath-thriall = 20, bidh an t-eallach aig gineadair nam mapa seo " +"coltach ri eallach gineadair nam mapa V7." + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) scale of fractal in nodes.\n" +"Actual fractal size will be 2 to 3 times larger.\n" +"These numbers can be made very large, the fractal does\n" +"not have to fit inside the world.\n" +"Increase these to 'zoom' into the detail of the fractal.\n" +"Default is for a vertically-squashed shape suitable for\n" +"an island, set all 3 numbers equal for the raw shape." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n" +"Can be used to move a desired point to (0, 0) to create a\n" +"suitable spawn point, or to allow 'zooming in' on a desired\n" +"point by increasing 'scale'.\n" +"The default is tuned for a suitable spawn point for Mandelbrot\n" +"sets with default parameters, it may need altering in other\n" +"situations.\n" +"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slice w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"W coordinate of the generated 3D slice of a 4D fractal.\n" +"Determines which 3D slice of the 4D shape is generated.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia x" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"X component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Y component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia z" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Z component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"W component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Seabed noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of seabed." +msgstr "Àirde-Y aig grunnd na mara." + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys" +msgstr "Gineadair nam mapa Valleys" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys specific flags" +msgstr "Brataich shònraichte do ghineadair nam mapa Valleys" + +#: 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 "" +"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa Valleys.\n" +"“altitude_chill”: Bidh tìr àrd nas fhuaire.\n" +"“humid_rivers”: Bidh an tìr nas buige faisg air aibhnean.\n" +"“vary_river_depth”: Ma tha seo an comas, bidh aibhnean nas tana agus tioram " +"aig amannan ma tha an saoghal tioram no teth.\n" +"’“altitude_dry”: Bidh tìr àrd nas tiorma." + +#: src/settings_translation_file.cpp +msgid "" +"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n" +"enabled. Also the vertical distance over which humidity drops by 10 if\n" +"'altitude_dry' is enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern upper limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River depth" +msgstr "Doimhne nan aibhnean" + +#: src/settings_translation_file.cpp +msgid "How deep to make rivers." +msgstr "Dè cho domhainn ’s a bhios aibhnean." + +#: src/settings_translation_file.cpp +msgid "River size" +msgstr "Meud nan aibhnean" + +#: src/settings_translation_file.cpp +msgid "How wide to make rivers." +msgstr "Dè cho leathann ’s a bhios aibhnean." + +#: src/settings_translation_file.cpp +msgid "Cave noise #1" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #2" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The depth of dirt or other biome filler node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base terrain height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Raises terrain to make valleys around the rivers." +msgstr "" +"Àrdaichidh seo an cruth-tìre airson glinn a chruthachadh timcheall air na " +"h-aibhnean." + +#: src/settings_translation_file.cpp +msgid "Valley fill" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slope and fill work together to modify the heights." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley profile" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amplifies the valleys." +msgstr "Meudaichidh seo na glinn." + +#: src/settings_translation_file.cpp +msgid "Valley slope" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "Meud nan cnapan" + +#: 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 "" +"Meud nan cnapan mapa a thèid a ghintinn le gineadair nam mapa, ann am bloca " +"mapa (16 nòd).\n" +"RABHADH: Chan fhaigh thu buannachd ach cunnartan à luach nas àirde na 5.\n" +"Le luach nas lugha, gheibh thu barrachd uamhan is thuill-dubha.\n" +"Chan fhiach atharrachadh an luach seo ach air adhbhar sònraichte ’s " +"mholamaid\n" +"nach atharraich thu e." + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "Dì-bhugachadh gineadair nam mapa" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug information." +msgstr "Dumpaich fiosrachadh dì-bhugachaidh aig gineadair nam mapa." + +#: src/settings_translation_file.cpp +msgid "Absolute limit of queued blocks to emerge" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use.\n" +"Value 0:\n" +"- Automatic selection. The number of emerge threads will be\n" +"- 'number of processors - 2', with a lower limit of 1.\n" +"Any other value:\n" +"- Specifies the number of emerge threads, with a lower limit of 1.\n" +"WARNING: Increasing the number of emerge threads increases engine mapgen\n" +"speed, but this may harm game performance by interfering with other\n" +"processes, especially in singleplayer and/or when running Lua code in\n" +"'on_generated'. For many users the optimum setting may be '1'." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Online Content Repository" +msgstr "Ionad-tasgaidh susbaint air loidhne" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The URL for the content repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of flags to hide in the content repository.\n" +"\"nonfree\" can be used to hide packages which do not qualify as 'free " +"software',\n" +"as defined by the Free Software Foundation.\n" +"You can also specify content ratings.\n" +"These flags are independent from Minetest versions,\n" +"so see a full list at https://content.minetest.net/help/content_flags/" +msgstr "" diff -Nru minetest-5.2.0/po/gl/minetest.po minetest-5.3.0/po/gl/minetest.po --- minetest-5.2.0/po/gl/minetest.po 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/po/gl/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,6328 @@ +# 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: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-08 20:47+0000\n" +"Last-Translator: sfan5 \n" +"Language-Team: Galician \n" +"Language: gl\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 4.2-dev\n" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "You died" +msgstr "Morreches" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "Respawn" +msgstr "Reaparecer" + +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "Vale" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "O servidor solicitou que reconectes:" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "Reconectar" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Menu principal" + +#: builtin/fstk/ui.lua +msgid "An error occurred in a Lua script:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occurred:" +msgstr "" + +#: builtin/mainmenu/common.lua src/client/game.cpp +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No modpack description provided." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No game description provided." +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 hard 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/tab_content.lua +msgid "Dependencies:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No optional dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "" + +#: 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_rename_modpack.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp +#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiPasswordChange.cpp +msgid "Cancel" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable modpack" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable modpack" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable all" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +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_contentstore.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "All packages" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Failed to download $1" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Back to Main Menu" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +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 "Vary river depth" +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 +msgid "Hills" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no games installed." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +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 "Network of tunnels and caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Smooth transition between biomes" +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 "Warning: The Development Test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a game, such as Minetest Game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Seed" +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 "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No game selected" +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 +#: src/client/keycode.cpp +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_rename_modpack.lua +msgid "Accept" +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_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Disabled" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Enabled" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Browse" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Offset" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Scale" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "2D Noise" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Octaves" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Persistance" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Lacunarity" +msgstr "" + +#. ~ "defaults" is a noise parameter flag. +#. It describes the default processing options +#. for noise settings in main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.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 +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "eased" +msgstr "" + +#. ~ "absvalue" is a noise parameter flag. +#. It is short for "absolute value". +#. It can be enabled in noise settings in +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "absvalue" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "(No description of setting given)" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid integer." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must be at least $1." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must not be larger than $1." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid number." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select directory" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select file" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "< Back to Settings page" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Edit" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Show technical names" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 (Enabled)" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a $1 as a texture pack" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Failed to install $1 to $2" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to find a valid mod or modpack" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a modpack as a $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find suitable folder name for modpack $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a mod as a $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find real mod name for: $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a game as a $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: file: \"$1\"" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: Unsupported file type \"$1\" or broken archive" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 mods" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Installed Packages:" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +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 "No dependencies." +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Use Texture Pack" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Information:" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Uninstall Package" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Active Contributors" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Configure" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Name/Password" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Play Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Start Game" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Address / Port" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name / Password" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Del. Favorite" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Favorite" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Ping" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "" + +#. ~ PvP = Player versus Player +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Join Game" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Outlining" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Particles" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Screen:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Autosave Screen Size" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Shaders" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders (unavailable)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/client/game.cpp +msgid "Change Keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "All Settings" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold: (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bump Mapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Tone Mapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Generate Normal Maps" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Liquids" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Settings" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "" + +#: src/client/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client/client.cpp +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided password file failed to open: " +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Please choose a name!" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "" + +#. ~ DO NOT TRANSLATE THIS LITERALLY! +#. This is a special string. Put either "no" or "yes" +#. into the translation field (literally). +#. Choose "yes" if the language requires use of the fallback +#. font, "no" otherwise. +#. The fallback font is (normally) required for languages with +#. non-Latin script, like Chinese. +#. When in doubt, test your translation. +#: src/client/fontengine.cpp +msgid "needs_fallback_font" +msgstr "no" + +#: src/client/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/client/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/client/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/client/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/client/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/client/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "Client side scripting is disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Sound muted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound unmuted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "" + +#: src/client/game.cpp +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 "" + +#: src/client/game.cpp +msgid "Fly mode enabled (note: no 'fly' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Pitch move mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Pitch move 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 "Fast 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 "Noclip mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Cinematic mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Cinematic mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x1" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x2" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x4" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x1" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x2" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x4" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info shown" +msgstr "" + +#: src/client/game.cpp +msgid "Profiler graph shown" +msgstr "" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info, profiler graph, and wireframe hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info and profiler graph hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update enabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at maximum: %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at minimum: %d" +msgstr "" + +#: src/client/game.cpp +msgid "Enabled unlimited viewing range" +msgstr "" + +#: src/client/game.cpp +msgid "Disabled unlimited viewing range" +msgstr "" + +#: src/client/game.cpp +msgid "Zoom currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\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 "" +"Controls:\n" +"- %s: move forwards\n" +"- %s: move backwards\n" +"- %s: move left\n" +"- %s: move right\n" +"- %s: jump/climb\n" +"- %s: sneak/go down\n" +"- %s: drop item\n" +"- %s: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- %s: chat\n" +msgstr "" + +#: src/client/game.cpp +msgid "Continue" +msgstr "" + +#: src/client/game.cpp +msgid "Change Password" +msgstr "" + +#: src/client/game.cpp +msgid "Game paused" +msgstr "" + +#: src/client/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to OS" +msgstr "" + +#: src/client/game.cpp +msgid "Game info:" +msgstr "" + +#: src/client/game.cpp +msgid "- Mode: " +msgstr "" + +#: src/client/game.cpp +msgid "Remote server" +msgstr "" + +#: src/client/game.cpp +msgid "- Address: " +msgstr "" + +#: src/client/game.cpp +msgid "Hosting server" +msgstr "" + +#: src/client/game.cpp +msgid "- Port: " +msgstr "" + +#: src/client/game.cpp +msgid "Singleplayer" +msgstr "" + +#: src/client/game.cpp +msgid "On" +msgstr "" + +#: src/client/game.cpp +msgid "Off" +msgstr "" + +#: src/client/game.cpp +msgid "- Damage: " +msgstr "" + +#: src/client/game.cpp +msgid "- Creative Mode: " +msgstr "" + +#. ~ PvP = Player versus Player +#: src/client/game.cpp +msgid "- PvP: " +msgstr "" + +#: src/client/game.cpp +msgid "- Public: " +msgstr "" + +#: src/client/game.cpp +msgid "- Server Name: " +msgstr "" + +#: src/client/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat hidden" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD hidden" +msgstr "" + +#: src/client/gameui.cpp +#, c-format +msgid "Profiler shown (page %d of %d)" +msgstr "" + +#: src/client/gameui.cpp +msgid "Profiler hidden" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Backspace" +msgstr "" + +#: src/client/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/client/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/client/keycode.cpp +msgid "Return" +msgstr "" + +#: src/client/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Control" +msgstr "" + +#. ~ Key name, common on Windows keyboards +#: src/client/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/client/keycode.cpp +msgid "Caps Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Space" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page up" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page down" +msgstr "" + +#: src/client/keycode.cpp +msgid "End" +msgstr "" + +#: src/client/keycode.cpp +msgid "Home" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Left" +msgstr "" + +#: src/client/keycode.cpp +msgid "Up" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Right" +msgstr "" + +#: src/client/keycode.cpp +msgid "Down" +msgstr "" + +#. ~ Key name +#: src/client/keycode.cpp +msgid "Select" +msgstr "" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" +msgstr "" + +#: src/client/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/client/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/client/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/client/keycode.cpp +msgid "Help" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad ." +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/client/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Escape" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Convert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Nonconvert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Accept" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Mode Change" +msgstr "" + +#: src/client/keycode.cpp +msgid "Apps" +msgstr "" + +#: src/client/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/client/keycode.cpp +msgid "Erase EOF" +msgstr "" + +#: src/client/keycode.cpp +msgid "Play" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Zoom" +msgstr "" + +#: src/client/keycode.cpp +msgid "OEM Clear" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp +#, c-format +msgid "" +"You are about to join this server with the name \"%s\" for the first time.\n" +"If you proceed, a new account using your credentials will be created on this " +"server.\n" +"Please retype your password and click 'Register and Join' to confirm account " +"creation, or click 'Cancel' to abort." +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp +msgid "Register and Join" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "" + +#: src/gui/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "\"Special\" = climb down" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Automatic jumping" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Special" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Prev. item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Next item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Change camera" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle minimap" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle pitchmove" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Mute" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Autoforward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Local command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle HUD" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle chat log" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fog" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Change" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Exit" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Muted" +msgstr "" + +#. ~ Imperative, as in "Enter/type in text". +#. Don't forget the space. +#: src/gui/modalMenu.cpp +msgid "Enter " +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 +msgid "LANG_CODE" +msgstr "gl" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks 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 "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the \"fly\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pitch move mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, makes move directions relative to the player's pitch when flying " +"or swimming." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via the \"special\" key).\n" +"This requires the \"fast\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the \"noclip\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when looking around. Also called look or mouse smoothing.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Special key for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, \"special\" key instead of \"sneak\" key is used for climbing " +"down and\n" +"descending." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If disabled, \"special\" key is used to fly fast if both fly and fast mode " +"are\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right\n" +"mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically jump up single-node obstacles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Safe digging and placing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prevent digging and placing from repeating when holding the mouse buttons.\n" +"Enable this when you dig or place too often by accident." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Continuous forward movement, toggled by autoforward key.\n" +"Press the autoforward key again or the backwards movement to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touch screen threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The length in pixels it takes for touch screen interaction to start." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed virtual joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) Fixes the position of virtual joystick.\n" +"If disabled, virtual joystick will center to first-touch's position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers aux button" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) Use virtual joystick to trigger \"aux\" button.\n" +"If enabled, virtual joystick will also tap \"aux\" button when out of main " +"circle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable joysticks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick ID" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The identifier of the joystick to use" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The type of joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick button repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated events\n" +"when holding down a joystick button combination." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick frustum sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"ingame view frustum around." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"Will also disable autoforward, when active.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Right key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Special key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Command key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type local commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pitch move key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling pitch move mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar next key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the next item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar previous key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the previous item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for muting the game.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inc. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dec. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatic forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling autoforward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View zoom key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key to use view zoom when possible.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 1 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the first hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 2 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the second hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 3 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the third hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 4 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fourth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 5 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fifth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 6 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the sixth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 7 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the seventh hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 8 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the eighth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 9 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the ninth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 10 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the tenth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 11 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 11th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 12 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 12th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 13 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 13th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 14 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 14th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 15 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 15th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 16 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 16th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 17 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 17th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 18 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 18th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 19 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 19th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 20 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 20th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 21 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 21st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 22 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 22nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 23 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 23rd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 24 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 24th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 25 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 25th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 26 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 26th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 27 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 27th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 28 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 28th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 29 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 29th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 30 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 30th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 31 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 31st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 32 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 32nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large chat console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the large chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camera update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-Game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic" +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 "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Method used to highlight selected object." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Digging particles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adds particles when digging a node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use mip mapping to scale 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 "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"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 "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +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 "" +"Shaders allow advanced visual effects and may increase performance on some " +"video\n" +"cards.\n" +"This only works with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shader path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to shader directory. If no path is defined, default location will be " +"used." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filmic tone mapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables Hable's 'Uncharted 2' filmic tone mapping.\n" +"Simulates the tone curve of photographic film and how this approximates the\n" +"appearance of high dynamic range images. Mid-range contrast is slightly\n" +"enhanced, highlights and shadows are gradually compressed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving liquids (like water).\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The maximum height of the surface of waving liquids.\n" +"4.0 = Wave height is two nodes.\n" +"0.0 = Wave doesn't move at all.\n" +"Default is 1.0 (1/2 node).\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wavelength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of liquid waves.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How fast liquid waves will move. Higher = faster.\n" +"If negative, liquid waves will move backwards.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +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 "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pause on lost window focus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Open the pause menu when the window's focus is lost. Does not pause if a " +"formspec is\n" +"open." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View distance in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Near plane" +msgstr "" + +#: src/settings_translation_file.cpp +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" +"Increasing can reduce artifacting on weaker GPUs.\n" +"0.1 = Default, 0.25 = Good value for weaker tablets." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autosave screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save window size automatically when modified." +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 "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VSync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Alters the light curve by applying 'gamma correction' to it.\n" +"Higher values make middle and lower light levels brighter.\n" +"Value '1.0' leaves the light curve unaltered.\n" +"This only has significant effect on daylight and artificial\n" +"light, it has very little effect on natural night light." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve low gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at minimum light level.\n" +"Controls the contrast of the lowest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve high gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at maximum light level.\n" +"Controls the contrast of the highest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Strength of light curve boost.\n" +"The 3 'boost' parameters define a range of the light\n" +"curve that is boosted in brightness." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost center" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Center of light curve boost range.\n" +"Where 0.0 is minimum light level, 1.0 is maximum light level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost spread" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Spread of light curve boost range.\n" +"Controls the width of the range to be boosted.\n" +"Standard deviation of the light curve boost Gaussian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The rendering back-end for Irrlicht.\n" +"A restart is required after changing this.\n" +"Note: On Android, stick with OGLES1 if unsure! App may fail to start " +"otherwise.\n" +"On other platforms, OpenGL is recommended, and it’s the only driver with\n" +"shader support currently." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable view bobbing and amount of view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side.\n" +"- crossview: Cross-eyed 3d\n" +"- pageflip: quadbuffer based 3d.\n" +"Note that the interlaced mode requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selection box lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Recent Chat Messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of recent chat messages to show" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD scale factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the hudbar elements." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Delay between mesh updates on the client in ms. Increasing this will slow\n" +"down the rate of mesh updates, thus reducing jitter on slower clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh 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" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Usable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables animation of inventory items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog start" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fraction of the visible distance at which fog starts to be rendered" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Opaque liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes all liquids opaque" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World-aligned textures mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Textures on a node may be aligned either to the node or to the world.\n" +"The former mode suits better things like machines, furniture, etc., while\n" +"the latter makes stairs and microblocks fit surroundings better.\n" +"However, as this possibility is new, thus may not be used by older servers,\n" +"this option allows enforcing it for certain node types. Note though that\n" +"that is considered EXPERIMENTAL and may not work properly." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World-aligned textures may be scaled to span several nodes. However,\n" +"the server may not send the scale you want, especially if you use\n" +"a specially-designed texture pack; with this option, the client tries\n" +"to determine the scale automatically basing on the texture size.\n" +"See also texture_min_size.\n" +"Warning: This option is EXPERIMENTAL!" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show entity selection boxes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale GUI by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"properly support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name to tooltip." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FreeType fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether FreeType fonts are used, requires FreeType support to be compiled " +"in.\n" +"If disabled, bitmap and XML vectors fonts are used instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font bold by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font italic by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shadow offset (in pixels) of the default font. If 0, then shadow will not be " +"drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the default font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Regular font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the default font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"The fallback font will be used if the font cannot be loaded." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the monospace font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the monospace font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font is used for e.g. the console and profiler screen." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the fallback font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not " +"be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path of the fallback font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font will be used for certain languages or if the default font is " +"unavailable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Font size of the recent chat text and chat prompt in point (pt).\n" +"Value 0 will use the default font size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to save screenshots at. Can be an absolute or relative path.\n" +"The folder will be created if it doesn't already exist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Format of screenshots." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot quality" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Screenshot quality. Only used for JPEG format.\n" +"1 means worst quality; 100 means best quality.\n" +"Use 0 for default quality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "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 "Enable console window" +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 "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables the sound system.\n" +"If disabled, this completely disables all sounds everywhere and the in-game\n" +"sound controls will be non-functional.\n" +"Changing this setting requires a restart." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Volume of all sounds.\n" +"Requires the sound system to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to mute sounds. You can unmute sounds at any time, unless the\n" +"sound system is disabled (enable_sound=false).\n" +"In-game, you can toggle the mute state with the mute key or by using the\n" +"pause menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable Lua modding support on client.\n" +"This support is experimental and API can change." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the\n" +"Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum size of the out chat queue" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum size of the out chat queue.\n" +"0 to disable queueing and -1 to make the queue size unlimited." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable register confirmation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable register confirmation when connecting to server.\n" +"If disabled, new account will be registered automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server / Singleplayer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce to this serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strip color codes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Remove color codes from incoming chat messages\n" +"Use this to stop players from being able to use color in their messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server.\n" +"Ignored if bind_address is set.\n" +"Needs enable_ipv6 to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneous block sends per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks that are simultaneously sent per client.\n" +"The maximum total count is calculated dynamically:\n" +"max_total = ceil((#clients + max_users) * per_client / 4)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay in sending blocks after building" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, 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 "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can be connected simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Creative" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable creative mode for new created maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Privileges that players with basic_privs can grant" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod channels support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +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 "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Format of player chat messages. The following strings are valid " +"placeholders:\n" +"@name, @message, @timestamp (optional)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes).\n" +"\n" +"Setting this larger than active_block_range will also cause the server\n" +"to maintain active objects up to this distance in the direction the\n" +"player is looking. (This can avoid mobs suddenly disappearing from view)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The radius of the volume of blocks around every player that is subject to " +"the\n" +"active block stuff, stated in mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run.\n" +"This is also the minimum range in which active objects (mobs) are " +"maintained.\n" +"This should be configured together with active_object_send_range_blocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples:\n" +"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World start time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time of day when a new world is started, in millihours (0-23999)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message max length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set the maximum character length of a chat message sent by clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message count limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amount of messages a player may send per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message kick threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Kick players who sent more than X messages per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration on ground or when climbing,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal acceleration in air when jumping or falling,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration in fast mode,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking and flying speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking, flying and climbing speed in fast mode, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical climbing speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Initial vertical speed when jumping, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Decrease this to increase liquid resistance to movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum liquid resistance. Controls deceleration when entering liquid at\n" +"high speed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sinking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls sinking speed in liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration of gravity, in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated Lua API calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over\n" +"network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block management interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between active block management cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ABM interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between Active Block Modifier (ABM) execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "NodeTimer interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between NodeTimer execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block send optimize distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"At this distance the server will aggressively optimize which blocks are sent " +"to\n" +"clients.\n" +"Small values potentially improve performance a lot, at the expense of " +"visible\n" +"rendering glitches (some blocks will not be rendered under water and in " +"caves,\n" +"as well as sometimes on land).\n" +"Setting this to a value greater than max_block_send_distance disables this\n" +"optimization.\n" +"Stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server side occlusion culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled the server will perform map block occlusion culling based on\n" +"on the eye position of the player. This can reduce the number of blocks\n" +"sent to the client 50-80%. The client will not longer receive most " +"invisible\n" +"so that the utility of noclip mode is reduced." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side modding restrictions" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Restricts the access of certain client-side functions on servers.\n" +"Combine the byteflags below to restrict client-side features, or set to 0\n" +"for no restrictions:\n" +"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n" +"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n" +"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n" +"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n" +"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n" +"csm_restriction_noderange)\n" +"READ_PLAYERINFO: 32 (disable get_player_names call client-side)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side node lookup range restriction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the CSM restriction for node range is enabled, get_node calls are " +"limited\n" +"to this distance from the player to the node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HTTP mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of mods that are allowed to access HTTP APIs, which\n" +"allow them to upload and download data to/from the internet." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Load the game profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Load the game profiler to collect game profiling data.\n" +"Provides a /profiler command to access the compiled profile.\n" +"Useful for mod developers and server operators." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default report format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The default format in which profiles are being saved,\n" +"when calling `/profiler save [format]` without format." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Report path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The file path relative to your worldpath in which profiles will be saved to." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrumentation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Entity methods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument the methods of entities on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Active Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Loading Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Loading Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chatcommands" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument chatcommands on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Global callbacks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument global callback functions on registration.\n" +"(anything you pass to a minetest.register_*() function)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Builtin" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument builtin.\n" +"This is usually only needed by core/builtin contributors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Have the profiler instrument itself:\n" +"* Instrument an empty function.\n" +"This estimates the overhead, that instrumentation is adding (+1 function " +"call).\n" +"* Instrument the sampler being used to update the statistics." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +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 "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log file size threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the file size of debug.txt exceeds the number of megabytes specified in\n" +"this setting when it is opened, the file is moved to debug.txt.1,\n" +"deleting an older debug.txt.1 if it exists.\n" +"debug.txt is only moved if this setting is positive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable IPv6 support (for both client and server).\n" +"Required for IPv6 connections to work at all." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Changes the main menu UI:\n" +"- Full: Multiple singleplayer worlds, game choice, texture pack chooser, " +"etc.\n" +"- Simple: One singleplayer world, no game or texture pack choosers. May " +"be\n" +"necessary for smaller screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Engine profiling data print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Print the engine's profiling data in regular intervals (in seconds).\n" +"0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this.\n" +"Current mapgens in a highly unstable state:\n" +"- The optional floatlands of v7 (disabled by default)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n" +"Only mapchunks completely within the mapgen limit are generated.\n" +"Value is stored per-world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" +"and junglegrass, in all other mapgens this flag controls all decorations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome API temperature and humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Temperature variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale temperature variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale humidity variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen v5." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls width of tunnels, a smaller value creates wider tunnels.\n" +"Value >= 10.0 completely disables generation of tunnels and avoids the\n" +"intensive noise calculations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of upper limit of large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave proportion flooded" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of cavern upper limit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern taper" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-distance over which caverns expand to full size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines full size of caverns, smaller values create larger caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noises" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of biome filler depth." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Factor noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Variation of terrain vertical scale.\n" +"When noise is < -0.55 terrain is near-flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of average terrain surface." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise that determines number of dungeons per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v6.\n" +"The 'snowbiomes' flag enables the new 5 biome system.\n" +"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" +"the 'jungles' flag is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desert noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Deserts occur when np_biome exceeds this value.\n" +"When the 'snowbiomes' flag is enabled, this is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sandy beaches occur when np_beach exceeds this value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain base noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of lower terrain and seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain higher noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of higher terrain that creates cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Steepness noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height select noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mud noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies depth of biome surface nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas with sandy beaches." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of number of caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines tree areas and tree density." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Apple trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas where trees have apples." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v7.\n" +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain zero level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y of mountain density gradient zero level. Used to shift mountains " +"vertically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y-distance over which floatlands taper from full density to nothing.\n" +"Tapering starts at this distance from the Y limit.\n" +"For a solid floatland layer, this controls the height of hills/mountains.\n" +"Must be less than or equal to half the distance between the Y limits." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\n" +"Value = 1.0 creates a uniform, linear tapering.\n" +"Values > 1.0 create a smooth tapering suitable for the default separated\n" +"floatlands.\n" +"Values < 1.0 (for example 0.25) create a more defined surface level with\n" +"flatter lowlands, suitable for a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "" + +#: src/settings_translation_file.cpp +#, c-format +msgid "" +"Adjusts the density of the floatland layer.\n" +"Increase value to increase density. Can be positive or negative.\n" +"Value = 0.0: 50% of volume is floatland.\n" +"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" +"to be sure) creates a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Surface level of optional water placed on a solid floatland layer.\n" +"Water is disabled by default and will only be placed if this value is set\n" +"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n" +"upper tapering).\n" +"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n" +"When enabling water placement the floatlands must be configured and tested\n" +"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n" +"required value depending on 'mgv7_np_floatland'), to avoid\n" +"server-intensive extreme water flow and to avoid vast flooding of the\n" +"world surface below." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain alternative noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain persistence noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Varies roughness of terrain.\n" +"Defines the 'persistence' value for terrain_base and terrain_alt noises." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain and steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of maximum mountain height (in nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge underwater noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines large-scale river channel structure." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining mountain structure and height.\n" +"Also defines structure of floatland mountain terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining structure of river canyon walls." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining structure of floatlands.\n" +"If altered from the default, the noise 'scale' (0.7 by default) may need\n" +"to be adjusted, as floatland tapering functions best when this noise has\n" +"a value range of approximately -2.0 to 2.0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen Carpathian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the base ground level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the depth of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River valley width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river valley." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness3 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Third of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness4 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fourth of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hills spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of ridged mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of step mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hill size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridged mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of ridged mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of step mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that locates the river valleys and channels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain variation noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Flat.\n" +"Occasional lakes and hills can be added to the flat world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of flat ground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for lakes.\n" +"Controls proportion of world area covered by lakes.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/depth of lake depressions." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for hills.\n" +"Controls proportion of world area covered by hills.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/height of hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines location and terrain of optional hills and lakes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Fractal.\n" +"'terrain' enables the generation of non-fractal terrain:\n" +"ocean, islands and underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fractal type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Selects one of 18 fractal types.\n" +"1 = 4D \"Roundy\" Mandelbrot set.\n" +"2 = 4D \"Roundy\" Julia set.\n" +"3 = 4D \"Squarry\" Mandelbrot set.\n" +"4 = 4D \"Squarry\" Julia set.\n" +"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n" +"6 = 4D \"Mandy Cousin\" Julia set.\n" +"7 = 4D \"Variation\" Mandelbrot set.\n" +"8 = 4D \"Variation\" Julia set.\n" +"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n" +"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n" +"11 = 3D \"Christmas Tree\" Mandelbrot set.\n" +"12 = 3D \"Christmas Tree\" Julia set.\n" +"13 = 3D \"Mandelbulb\" Mandelbrot set.\n" +"14 = 3D \"Mandelbulb\" Julia set.\n" +"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n" +"16 = 3D \"Cosine Mandelbulb\" Julia set.\n" +"17 = 4D \"Mandelbulb\" Mandelbrot set.\n" +"18 = 4D \"Mandelbulb\" Julia set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Iterations of the recursive function.\n" +"Increasing this increases the amount of fine detail, but also\n" +"increases processing load.\n" +"At iterations = 20 this mapgen has a similar load to mapgen V7." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) scale of fractal in nodes.\n" +"Actual fractal size will be 2 to 3 times larger.\n" +"These numbers can be made very large, the fractal does\n" +"not have to fit inside the world.\n" +"Increase these to 'zoom' into the detail of the fractal.\n" +"Default is for a vertically-squashed shape suitable for\n" +"an island, set all 3 numbers equal for the raw shape." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n" +"Can be used to move a desired point to (0, 0) to create a\n" +"suitable spawn point, or to allow 'zooming in' on a desired\n" +"point by increasing 'scale'.\n" +"The default is tuned for a suitable spawn point for Mandelbrot\n" +"sets with default parameters, it may need altering in other\n" +"situations.\n" +"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slice w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"W coordinate of the generated 3D slice of a 4D fractal.\n" +"Determines which 3D slice of the 4D shape is generated.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia x" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"X component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Y component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia z" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Z component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"W component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Seabed noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Valleys.\n" +"'altitude_chill': Reduces heat with altitude.\n" +"'humid_rivers': Increases humidity around rivers.\n" +"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n" +"to become shallower and occasionally dry.\n" +"'altitude_dry': Reduces humidity with altitude." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n" +"enabled. Also the vertical distance over which humidity drops by 10 if\n" +"'altitude_dry' is enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern upper limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How deep to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How wide to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #1" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #2" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The depth of dirt or other biome filler node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base terrain height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Raises terrain to make valleys around the rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley fill" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slope and fill work together to modify the heights." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley profile" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amplifies the valleys." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley slope" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n" +"WARNING!: There is no benefit, and there are several dangers, in\n" +"increasing this value above 5.\n" +"Reducing this value increases cave and dungeon density.\n" +"Altering this value is for special usage, leaving it unchanged is\n" +"recommended." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug information." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of queued blocks to emerge" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use.\n" +"Value 0:\n" +"- Automatic selection. The number of emerge threads will be\n" +"- 'number of processors - 2', with a lower limit of 1.\n" +"Any other value:\n" +"- Specifies the number of emerge threads, with a lower limit of 1.\n" +"WARNING: Increasing the number of emerge threads increases engine mapgen\n" +"speed, but this may harm game performance by interfering with other\n" +"processes, especially in singleplayer and/or when running Lua code in\n" +"'on_generated'. For many users the optimum setting may be '1'." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Online Content Repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The URL for the content repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of flags to hide in the content repository.\n" +"\"nonfree\" can be used to hide packages which do not qualify as 'free " +"software',\n" +"as defined by the Free Software Foundation.\n" +"You can also specify content ratings.\n" +"These flags are independent from Minetest versions,\n" +"so see a full list at https://content.minetest.net/help/content_flags/" +msgstr "" diff -Nru minetest-5.2.0/po/he/minetest.po minetest-5.3.0/po/he/minetest.po --- minetest-5.2.0/po/he/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/he/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Hebrew (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2019-11-10 15:04+0000\n" "Last-Translator: Krock \n" "Language-Team: Hebrew 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 "FPS in pause menu" msgstr "" @@ -2890,6 +3103,34 @@ 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 "Fly key" msgstr "" @@ -2943,6 +3184,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4239,14 +4486,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4310,6 +4549,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4377,7 +4620,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4471,10 +4716,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4542,13 +4783,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4633,6 +4874,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4791,9 +5036,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4870,10 +5112,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4883,7 +5121,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4917,6 +5157,14 @@ 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 "" @@ -4985,6 +5233,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5423,6 +5683,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5445,6 +5712,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5456,15 +5727,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5581,7 +5862,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5734,6 +6015,10 @@ 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 "" @@ -6054,6 +6339,14 @@ 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 "" @@ -6088,3 +6381,6 @@ #, fuzzy #~ msgid "Enable VBO" #~ msgstr "אפשר בכל" + +#~ msgid "Ok" +#~ msgstr "אישור" diff -Nru minetest-5.2.0/po/hi/minetest.po minetest-5.3.0/po/hi/minetest.po --- minetest-5.2.0/po/hi/minetest.po 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/po/hi/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,6390 @@ +# 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: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-29 07:53+0000\n" +"Last-Translator: Agastya \n" +"Language-Team: Hindi \n" +"Language: hi\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 4.2-dev\n" + +#: 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/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "Okay" + +#: 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 "Reconnect" +msgstr "वापस कनेक्ट करें" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "सर्वर वापस कनेक्ट करना चाहता है :" + +#: builtin/mainmenu/common.lua src/client/game.cpp +msgid "Loading..." +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 "Try reenabling public serverlist and check your internet connection." +msgstr "सार्वजनिक सर्वर शृंखला (सर्वर लिस्ट) को 'हां' करें और इंटरनेट कनेक्शन जांचें।" + +#: 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/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_rename_modpack.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp +#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiPasswordChange.cpp +msgid "Cancel" +msgstr "रोकें" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Dependencies:" +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/dlg_settings_advanced.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_contentstore.lua +msgid "All packages" +msgstr "सभी पैकेज" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Back to Main Menu" +msgstr "वापस मुख्य पृष्ठ पर जाएं" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Downloading..." +msgstr "लोड हो रहा है ..." + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Failed to download $1" +msgstr "$1 का डाऊनलोड असफल हुआ" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Games" +msgstr "अनेक खेल" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install" +msgstr "इन्स्टाल करें" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Mods" +msgstr "माॅड" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No packages could be retrieved" +msgstr "कोई पैकेज नहीं ला पाया गया" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No results" +msgstr "कुछ नहीं मिला" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "ढूंढें" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Texture packs" +msgstr "कला संकुल" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Uninstall" +msgstr "हटाऐं" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Update" +msgstr "नया संस्करण इन्स्टाल करें" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +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 +#, fuzzy +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 "Download a game, such as Minetest Game, from minetest.net" +msgstr "मैनटेस्ट खेल जैसे अन्य खेल minetest.net से डाऊनलोड किए जा सकते हैं" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "आप किसी भी खेल को minetest.net से डाऊनलोड कर सकते हैं" + +#: 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 src/settings_translation_file.cpp +msgid "Game" +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 "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/dlg_settings_advanced.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 +#, fuzzy +msgid "Warning: The Development Test is meant for developers." +msgstr "" +"चेतावनी : न्यूनतम विकास खेल (Minimal development test) खेल बनाने वालों के लिए है।" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "दुनिया का नाम" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no games installed." +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 +#: src/client/keycode.cpp +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 "दुनिया रद्द करें?" + +#: 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 "modpack.conf फाईल में इस माॅडपैक को जो नाम दिया गया है वही माना जाएगा।" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "(No description of setting given)" +msgstr "(सेटिंग के बारे में कुछ नहीं बताया गया है)" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "2D Noise" +msgstr "द्वि आयामी नॉइस" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "< Back to Settings page" +msgstr "वापस सेटिंग पृष्ठ पर जाएं" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Browse" +msgstr "ढूंढें" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Disabled" +msgstr "रुका हुआ" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Edit" +msgstr "बदलें" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Enabled" +msgstr "चालू" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Lacunarity" +msgstr "लैकुनारिटी" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Octaves" +msgstr "सप्टक (आक्टेव)" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Offset" +msgstr "आफसेट" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Persistance" +msgstr "हठ (पर्सिस्टेन्स)" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid integer." +msgstr "कृपया एक पूर्णांक (integer) भरें।" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid number." +msgstr "कृपया एक अंक भरें।" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Restore Default" +msgstr "मूल चुनें" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Scale" +msgstr "स्केल" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select directory" +msgstr "फाईल पाथ चुनें" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select file" +msgstr "फाईल चुनें" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Show technical names" +msgstr "तकनीकी नाम देखें" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must be at least $1." +msgstr "इसका मूल्य कम-से-कम $1 होना चाहिए।" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must not be larger than $1." +msgstr "इसका मूल्य $1 से अधिक नहीं होना चाहिए।" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X" +msgstr "एक्स" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X spread" +msgstr "X स्प्रेड" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y" +msgstr "वाई" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y spread" +msgstr "Y स्प्रेड" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z" +msgstr "जेड" + +#: builtin/mainmenu/dlg_settings_advanced.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 +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "absvalue" +msgstr "एब्सोल्यूट वैल्यू" + +#. ~ "defaults" is a noise parameter flag. +#. It describes the default processing options +#. for noise settings in main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.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 +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "eased" +msgstr "आरामदायक (ईज़्ड)" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 (Enabled)" +msgstr "($1) चालू" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 mods" +msgstr "$1 यह सब मॉड" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Failed to install $1 to $2" +msgstr "$2 में $1 को इन्स्टाल नहीं किया जा सका" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find real mod name for: $1" +msgstr "इन्स्टाल मॉड: $1 का असल नाम नहीं जान पाया गया" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find suitable folder name for modpack $1" +msgstr "माॅड इन्स्टाल: माॅडपैक $1 के लिए सही फोल्डर नहीं ढूंढा जा सका" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: Unsupported file type \"$1\" or broken archive" +msgstr "इन्स्टाल : \"$1\" का फाईल टाईप अंजान है याफिर आरकाइव खराब है" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: file: \"$1\"" +msgstr "इन्स्टाल : फाईल : \"$1\"" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to find a valid mod or modpack" +msgstr "सही माॅड या माॅडपैक नहीं ढूंढ पाया गया" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a $1 as a texture pack" +msgstr "$1 कला संकुल के रूप में इन्स्टाल नहीं किया जा सका" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a game as a $1" +msgstr "खेल को $1 के रूप में इन्स्टाल नहीं किया जा सका" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a mod as a $1" +msgstr "मॉड को $1 के रूप में इन्स्टाल नहीं किया जा सका" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a modpack as a $1" +msgstr "माॅडपैक को $1 के रूप में इन्स्टाल नहीं किया जा सका" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +msgstr "नेट पर वस्तुएं ढूंढें" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "वस्तुएं" + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "कला संकुल रोकें" + +#: builtin/mainmenu/tab_content.lua +msgid "Information:" +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 "Uninstall Package" +msgstr "पैकेज हटाएं" + +#: builtin/mainmenu/tab_content.lua +msgid "Use Texture Pack" +msgstr "कला संकुल चालू करें" + +#: builtin/mainmenu/tab_credits.lua +msgid "Active Contributors" +msgstr "सक्रिय सहायक" + +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "मुख्य डेवेलपर" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "आभार सूची" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "पूर्व सहायक" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "पूर्व मुख्य डेवेलपर" + +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" +msgstr "सर्वर सार्वजनिक सर्वर सूची (server list) में दिखे" + +#: builtin/mainmenu/tab_local.lua +msgid "Bind Address" +msgstr "बाईंड एड्रेस" + +#: builtin/mainmenu/tab_local.lua +msgid "Configure" +msgstr "सेटिंग बदलें" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative Mode" +msgstr "असीमित संसाधन" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.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 games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Name/Password" +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 +msgid "Port" +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_online.lua +msgid "Address / Port" +msgstr "ऐडरेस / पोर्ट" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "कनेक्ट करें" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "असीमित संसाधन" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "हानि व मृत्यु हो सकती है" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Del. Favorite" +msgstr "पसंद हटाएं" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Favorite" +msgstr "पसंद" + +#: builtin/mainmenu/tab_online.lua +msgid "Join Game" +msgstr "खेल में शामिल होएं" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name / Password" +msgstr "नाम/पासवर्ड" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Ping" +msgstr "पिंग" + +#. ~ PvP = Player versus Player +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "खिलाडियों में मारा-पीटी की अनुमती है" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "दुग्ना" + +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "त्रिविम दृश्यन बादल" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "चार गुना" + +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "आठ गुना" + +#: builtin/mainmenu/tab_settings.lua +msgid "All Settings" +msgstr "सभी सेटिंग देखें" + +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "ऐन्टी एलियासिंग :" + +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "क्या आप सचमुच अपने एक-खिलाडी दुनिया रद्द करना चाहते हैं?" + +#: builtin/mainmenu/tab_settings.lua +msgid "Autosave Screen Size" +msgstr "स्क्रीन परिमाण स्वयं सेव हो" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "द्विरेखिय फिल्टर" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bump Mapping" +msgstr "टकराव मैपिंग" + +#: builtin/mainmenu/tab_settings.lua src/client/game.cpp +msgid "Change Keys" +msgstr "की बदलें" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "जुडे शिशे" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "रोचक पत्ते" + +#: builtin/mainmenu/tab_settings.lua +msgid "Generate Normal Maps" +msgstr "मामूली नक्शे बनाएं" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "मिपमैप" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "मिपमैप व अनीसो. फिल्टर" + +#: builtin/mainmenu/tab_settings.lua +msgid "No" +msgstr "नहीं" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "कोई फिल्टर नहीं" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "मिपमैप नहीं हो" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "डिब्बें उजाले हों" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Outlining" +msgstr "डिब्बों की रूपरेखा" + +#: builtin/mainmenu/tab_settings.lua +msgid "None" +msgstr "कुछ नहीं" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "अपारदर्शी पत्ते" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "अपारदर्शी पानी" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "पेरलेक्स ऑक्लूजन" + +#: builtin/mainmenu/tab_settings.lua +msgid "Particles" +msgstr "कण" + +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "एक-खिलाडी दुनिया रीसेट करें" + +#: builtin/mainmenu/tab_settings.lua +msgid "Screen:" +msgstr "स्क्रीन :" + +#: builtin/mainmenu/tab_settings.lua +msgid "Settings" +msgstr "सेटिंग" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Shaders" +msgstr "छाया बनावट" + +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders (unavailable)" +msgstr "छाया बनावट (अनुपलब्ध)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "मामूली पत्ते" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "चिकना उजाला" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "कला बनावट :" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "छाया बनावट कॆ लिये OpenGL ड्राईवर आवश्यक हैं|" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Tone Mapping" +msgstr "टोन मैपिंग" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold: (px)" +msgstr "छूने की त्रिज्या : (px)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "त्रिरेखीय फिल्टर" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "पत्ते लहराएं" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Liquids" +msgstr "पानी में लहरें बनें" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "पाैधे लहराएं" + +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "हां" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "मॉड कॆ सेटिंग बदलें" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "मुख्य" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "एक-खिलाडी शुरू करें" + +#: src/client/client.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 "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 "मुख्य पृ़ष्ठ" + +#: 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 "दुनिया का फाईल पाथ नहीं है : " + +#. ~ DO NOT TRANSLATE THIS LITERALLY! +#. This is a special string. Put either "no" or "yes" +#. into the translation field (literally). +#. Choose "yes" if the language requires use of the fallback +#. font, "no" otherwise. +#. The fallback font is (normally) required for languages with +#. non-Latin script, like Chinese. +#. When in doubt, test your translation. +#: src/client/fontengine.cpp +msgid "needs_fallback_font" +msgstr "yes" + +#: src/client/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"अधिक जानकारी के लिए debug.txt देखें।" + +#: src/client/game.cpp +msgid "- Address: " +msgstr "- एड्रेस : " + +#: src/client/game.cpp +msgid "- Creative Mode: " +msgstr "- असीमित साधन " + +#: src/client/game.cpp +msgid "- Damage: " +msgstr "- हानि : " + +#: src/client/game.cpp +msgid "- Mode: " +msgstr "- तकनीक : " + +#: src/client/game.cpp +msgid "- Port: " +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 "Automatic forward disabled" +msgstr "स्वचाल रुका हुआ" + +#: src/client/game.cpp +msgid "Automatic forward enabled" +msgstr "स्वचाल चालू" + +#: src/client/game.cpp +msgid "Camera update disabled" +msgstr "कैमरा रुका हुआ" + +#: src/client/game.cpp +msgid "Camera update enabled" +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 side scripting is disabled" +msgstr "क्लाइंट की तरफ से स्क्रिप्ट लगाना मना है" + +#: src/client/game.cpp +msgid "Connecting to server..." +msgstr "सर्वर से कनेक्ट हुआ जा रहा है ..." + +#: src/client/game.cpp +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\n" +"- %s: sneak/go down\n" +"- %s: drop item\n" +"- %s: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\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 +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 +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\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 "" +"आम कंट्रोल्स :\n" +"कोई मेनू खुला नहीं है :\n" +"-एक बार टैप : बटन दबेगा\n" +"-दो टॉप: डालना/ इस्तेमाल करना\n" +"-उंगली फिसलाना : मुड़ना\n" +"कोई मेनू या वस्तु सूची खुली है :\n" +"-बाहर दो बार टैप :\n" +"--> बंद\n" +"- ढेर छूएं, स्थान छूएं\n" +"--> ढेर का स्थान बदलने के लिए\n" +"- छुए व खींचे, दूसरी उंगली से टैप करें\n" +"--> एक वस्तु स्थान में डालें\n" + +#: src/client/game.cpp +msgid "Disabled unlimited viewing range" +msgstr "दृष्टि सीमित" + +#: src/client/game.cpp +msgid "Enabled unlimited viewing range" +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 "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 "Media..." +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 "Minimap hidden" +msgstr "छोटा नक्शा गायब" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x1" +msgstr "छोटा नक्शा रेडार मोड, 1 गुना ज़ूम" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x2" +msgstr "छोटा नक्शा रेडर मोड, दोगुना जूम" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x4" +msgstr "छोटा नक्शा रेडार मोड, 4 गुना ज़ूम" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x1" +msgstr "छोटा नक्शा जमीन मोड, 1 गुना ज़ूम" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x2" +msgstr "छोटा नक्शा जमीन मोड, दोगुना जूम" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x4" +msgstr "छोटा नक्शा जमीन मोड, 4 गुना जून" + +#: 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 "Viewing range changed to %d" +msgstr "दृष्टि सीमा बदलकर %d है" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at maximum: %d" +msgstr "दृष्टि सीमा अधिकतम : %d" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at minimum: %d" +msgstr "दृष्टि सीमा न्यूनतम : %d" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "वॉल्यूम को बदलकर %d%%" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "डिब्बे रेखांकित" + +#: src/client/game.cpp +msgid "Zoom currently disabled by game or mod" +msgstr "खेल या मॉड़ के वजह से इस समय ज़ूम मना है" + +#: src/client/game.cpp +msgid "ok" +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 "प्रोफाईलर दिखाई दे रही है (पृष्ठ %d %d पृष्ठों में से)" + +#: src/client/keycode.cpp +msgid "Apps" +msgstr "एप्स" + +#: src/client/keycode.cpp +msgid "Backspace" +msgstr "बैकस्पेस" + +#: src/client/keycode.cpp +msgid "Caps Lock" +msgstr "कैप्स लाक" + +#: src/client/keycode.cpp +msgid "Clear" +msgstr "खाली करें" + +#: src/client/keycode.cpp +msgid "Control" +msgstr "कंट्रोल" + +#: src/client/keycode.cpp +msgid "Down" +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 src/gui/guiKeyChangeMenu.cpp +msgid "Left" +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" +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 "पेज अप" + +#: src/client/keycode.cpp +msgid "Pause" +msgstr "पॉज़" + +#: src/client/keycode.cpp +msgid "Play" +msgstr "खेलें" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" +msgstr "प्रिन्ट बटन" + +#: src/client/keycode.cpp +msgid "Return" +msgstr "रिटर्न बटन" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Right" +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" +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" +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 src/gui/guiKeyChangeMenu.cpp +msgid "Zoom" +msgstr "ज़ूम" + +#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "पासवर्ड अलग अलग हैं!" + +#: src/gui/guiConfirmRegistration.cpp +msgid "Register and Join" +msgstr "पंजीकरण व खेलें" + +#: src/gui/guiConfirmRegistration.cpp +#, c-format +msgid "" +"You are about to join this server with the name \"%s\" for the first time.\n" +"If you proceed, a new account using your credentials will be created on this " +"server.\n" +"Please retype your password and click 'Register and Join' to confirm account " +"creation, or click 'Cancel' to abort." +msgstr "" +"आप \"%s\" नाम से इस सरवर में पहली बार आने वाले हैं। अगर आप आगे बढ़ते हैं तो आपके लिए इस " +"सर्वर पर एक अकाउंट बनाया जाएगा।\n" +"\n" +"आगे बढ़ने ए लिखें कृपया अपने पासवर्ड को वापस लिखें और फिर 'पंजीकरण व खेलें' दबाएं, अथवा " +"'रोकें' दबाएं।" + +#: src/gui/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "आगे बढ़े" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "\"Special\" = 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 "Backward" +msgstr "पीछे जाएं" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Change camera" +msgstr "कैमरा बदलना" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Chat" +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. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "कीबोर्ड सेटिंग (अगर यह मेनू खराब हो जाए तो minetest.conf से सब कुछ खाली कर दें)" + +#: 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 src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "स्क्रीनशॉट" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "संभल के चलना" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Special" +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 "press key" +msgstr "की दबाएं" + +#: src/gui/guiPasswordChange.cpp +msgid "Change" +msgstr "बदलें" + +#: src/gui/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "पासवर्ड दोबारा लिखें" + +#: src/gui/guiPasswordChange.cpp +msgid "New Password" +msgstr "नया पासवर्ड" + +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" +msgstr "पुराना पासवर्ड" + +#: src/gui/guiVolumeChange.cpp +msgid "Exit" +msgstr "निकास" + +#: src/gui/guiVolumeChange.cpp +msgid "Muted" +msgstr "चुप" + +#: src/gui/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "आवाज " + +#. ~ Imperative, as in "Enter/type in text". +#. Don't forget the space. +#: src/gui/modalMenu.cpp +msgid "Enter " +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 +msgid "LANG_CODE" +msgstr "hi" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) 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 "" +"(Android) Use virtual joystick to trigger \"aux\" button.\n" +"If enabled, virtual joystick will also tap \"aux\" button when out of main " +"circle." +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 "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +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 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 polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side.\n" +"- crossview: Cross-eyed 3d\n" +"- pageflip: quadbuffer based 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 "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 "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +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 "" + +#: 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 "Advanced" +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 and fast" +msgstr "हमेशा उड़ान और तेज" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amount of messages a player may send per 10 seconds." +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 "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 "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 will not be rendered under water and in " +"caves,\n" +"as well as sometimes on land).\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 "Automatic forward key" +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 "Autosave screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +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 "Basic" +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 temperature and humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block send optimize distance" +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 "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +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" +"Increasing can reduce artifacting on weaker GPUs.\n" +"0.1 = Default, 0.25 = Good value for weaker tablets." +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 "Camera update toggle key" +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 "" +"Changes the main menu UI:\n" +"- Full: Multiple singleplayer worlds, game choice, texture pack chooser, " +"etc.\n" +"- Simple: One singleplayer world, no game or texture pack choosers. May " +"be\n" +"necessary for smaller screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat key" +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 toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chatcommands" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "सिनेमा मोड" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client" +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 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 "" +"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 "Command key" +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 "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Continuous forward movement, toggled by autoforward key.\n" +"Press the autoforward key again or the backwards movement to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls" +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." +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 "Creative" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +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 "Dec. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Decrease this to increase liquid resistance to movement." +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 game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +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 "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +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 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 sampling step of texture.\n" +"A higher value results in smoother normal maps." +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 maximal player transfer distance in blocks (0 = unlimited)." +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 "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 "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 "Drop item key" +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 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 console window" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable creative mode for new created maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable joysticks" +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 players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable register confirmation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable register confirmation when connecting to server.\n" +"If disabled, new account will be registered automatically." +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 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 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 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" +"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 bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables the sound system.\n" +"If disabled, this completely disables all sounds everywhere and the in-game\n" +"sound controls will be non-functional.\n" +"Changing this setting requires a restart." +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 "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +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 "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +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 "Fast movement" +msgstr "तेज चलन" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via the \"special\" key).\n" +"This requires the \"fast\" privilege on the server." +msgstr "" +"स्पेशल की दबाने पर आप बहुत तॆज चलने लगेंगे |\n" +"इसके लिये \"तेज\" विषेशाधिकार आवश्यक है |" + +#: 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 "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +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 "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 "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "उडना" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog start" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +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 of the default font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the fallback font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the monospace font in point (pt)." +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 "" +"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 Default Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Opacity" +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 default background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background opacity (between 0 and 255)." +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 "Forward key" +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 "FreeType fonts" +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 "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +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 "Generate normalmaps" +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 junglegrass, 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 "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 scale factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated Lua API calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\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 "High-precision FPU" +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 next key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar previous key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 1 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 10 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 11 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 12 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 13 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 14 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 15 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 16 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 17 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 18 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 19 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 2 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 20 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 21 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 22 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 23 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 24 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 25 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 26 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 27 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 28 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 29 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 3 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 30 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 31 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 32 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 4 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 5 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 6 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 7 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 8 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 9 key" +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.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +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, \"special\" key is used to fly fast if both fly and fast mode " +"are\n" +"enabled." +msgstr "" +"अगर यह रुका हुआ हुआ तो तेज उड़ने के लिए\n" +"स्पेशल की दबानी पड़ेगी |" + +#: 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 50-80%. The client will not longer receive most " +"invisible\n" +"so that the utility of noclip mode is reduced." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the \"noclip\" privilege on the server." +msgstr "" +"अगर यह उडान के साथ चालू होगा तो आप हर चीज़ के आर-पार उड पाएंगे |\n" +"इसके लिये \"तरल चाल\" विषेशाधिकार आवश्यक है |" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, \"special\" key instead of \"sneak\" key is used for climbing " +"down and\n" +"descending." +msgstr "" +"अगर यहां चालू हुआ तो नीचे उतरने के लिए स्पेशल\n" +"की का इस्तेमाल होगा।" + +#: 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, makes move directions relative to the player's pitch when flying " +"or swimming." +msgstr "चालू होने पर आप जहां देखेंगे उस दिशा को सामने माना जाएगा (पिच चलन)|" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks 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 "" +"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 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" +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 "Inc. volume key" +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 chatcommands 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 "Instrumentation" +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." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "माउस उल्टा" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "माउस ऊपर करने पर केमरा नीचे जाएगा, और नीचे करने पर ऊपर |" + +#: src/settings_translation_file.cpp +msgid "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 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 "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"Will also disable autoforward, when active.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for muting the game.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type local commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 11th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 12th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 13th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 14th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 15th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 16th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 17th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 18th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 19th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 20th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 21st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 22nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 23rd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 24th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 25th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 26th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 27th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 28th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 29th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 30th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 31st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 32nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the eighth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fifth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the first hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fourth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the next item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the ninth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the previous item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the second hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the seventh hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the sixth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the tenth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the third hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling autoforward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling pitch move mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camera update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the large chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key to use view zoom when possible.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +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 "Large chat console key" +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 "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over\n" +"network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of liquid waves.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between Active Block Modifier (ABM) execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between NodeTimer execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between active block management cycles" +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" +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 "" +"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 "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 "Main menu style" +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 "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes all liquids opaque" +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." +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 "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +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 "" + +#: 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 game is paused." +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 forceloaded mapblocks." +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 out chat queue" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum size of the out chat queue.\n" +"0 to disable queueing and -1 to make the queue size unlimited." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +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" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +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 "Minimum texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the hudbar 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 "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 "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 key" +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 "Near plane" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +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 "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "तरल चाल" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +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 "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +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 parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Online Content Repository" +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 "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the fallback 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 "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path of the fallback font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors 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 texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the default font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors 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.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors 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 "Pitch move key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pitch move mode" +msgstr "पिच चलन" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the \"fly\" privilege on the server." +msgstr "" +"खिलाडी के असर से मुक्त उड सकेगा |\n" +"इसके लिये \"उडान\" विषेशाधिकार आवश्यक है |" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prevent digging and placing from repeating when holding the mouse buttons.\n" +"Enable this when you dig or place too often by accident." +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 "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling" +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 fetch 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 "" +"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 "Range select key" +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 "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +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 "Right key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +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 "Round minimap" +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." +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 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 "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 "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" +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 / Singleplayer" +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 "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +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 "" + +#: src/settings_translation_file.cpp +msgid "Set the maximum character length of a chat message sent by clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving liquids (like water).\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shader path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visual effects and may increase performance on some " +"video\n" +"cards.\n" +"This only works with the OpenGL video backend." +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 offset (in pixels) of the fallback font. If 0, then shadow will not " +"be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +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 "Shutdown message" +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 "" +"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 "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 camera when looking around. Also called look or mouse smoothing.\n" +"Useful for recording videos." +msgstr "" +"आपका माउस चिकने तरीके से हिलेगा | इसे माउस या दृष्टि चिकनाई भी कहा जाता है |\n" +"विडियो बनाते वख़्त काम आ सकता है |" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "सिनेमा मोड में केमरा चिकने तरीके से मुडेगा | मना करने के लिये 0." + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "केमरा के मुडने की चिकनाई. मना करने के लिये 0." + +#: src/settings_translation_file.cpp +msgid "Sneak key" +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 "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Special key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Special key for climbing/descending" +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 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 spawnpoint" +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 generated normalmaps." +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 the 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 path" +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 default format in which profiles are being saved,\n" +"when calling `/profiler save [format]` without format." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The depth of dirt or other biome filler node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The file path relative to your worldpath in which profiles will be saved to." +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 touch screen interaction to start." +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).\n" +"Requires waving liquids to be enabled." +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 for Irrlicht.\n" +"A restart is required after changing this.\n" +"Note: On Android, stick with OGLES1 if unsure! App may fail to start " +"otherwise.\n" +"On other platforms, OpenGL is recommended, and it’s the only driver with\n" +"shader support currently." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"ingame 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 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 right clicks when holding the " +"right\n" +"mouse 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 "" +"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." +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 "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touch screen threshold" +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 "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 "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 viewing 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 mip mapping to scale 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 trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VBO" +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." +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 "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View zoom key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers aux button" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Volume of all sounds.\n" +"Requires the sound system to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"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 "" +"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. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"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 FreeType fonts are used, requires FreeType support to be compiled " +"in.\n" +"If disabled, bitmap and XML vectors fonts are used instead." +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 to allow players to damage and kill each other." +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 "" +"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 file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Back" +#~ msgstr "पीछे" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "$1 का डाऊनलोड व इन्स्टाल चल रहा है, कृपया ठहरें ..." + +#~ msgid "Ok" +#~ msgstr "ठीक है" diff -Nru minetest-5.2.0/po/hu/minetest.po minetest-5.3.0/po/hu/minetest.po --- minetest-5.2.0/po/hu/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/hu/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Hungarian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-04-03 20:24+0000\n" -"Last-Translator: sfan5 \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-22 17:56+0000\n" +"Last-Translator: Ács Zoltán \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -12,7 +12,7 @@ "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.0-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,10 +22,13 @@ msgid "You died" msgstr "Meghaltál" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred in a Lua script:" -msgstr "Hiba történt egy Lua parancsfájlban (egy mod-ban):" +msgstr "Hiba történt egy Lua parancsfájlban:" #: builtin/fstk/ui.lua msgid "An error occurred:" @@ -36,10 +39,6 @@ msgstr "Főmenü" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Ok" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Újrakapcsolódás" @@ -57,7 +56,7 @@ #: builtin/mainmenu/common.lua msgid "Server enforces protocol version $1. " -msgstr "A kiszolgáló által megkövetelt protokollverzió: $1. " +msgstr "A szerver által megkövetelt protokollverzió: $1. " #: builtin/mainmenu/common.lua msgid "Server supports protocol versions between $1 and $2. " @@ -71,11 +70,11 @@ #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." -msgstr "Csak $1 protokollverziót támogatunk." +msgstr "Csak $1 protokollverziót támogjuk." #: builtin/mainmenu/common.lua msgid "We support protocol versions between version $1 and $2." -msgstr "$1 és $2 közötti protokollverziókat támogatunk." +msgstr "$1 és $2 közötti protokollverziókat támogatjuk." #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_delete_content.lua @@ -96,9 +95,8 @@ msgstr "Összes letiltása" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "Disable modpack" -msgstr "Modok letiltása" +msgstr "Modcsomag letiltása" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -113,24 +111,26 @@ "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." msgstr "" -"A(z) „$1” mod engedélyezése sikertelen, mert meg nem engedett karaktereket " +"A(z) „$1” mod engedélyezése sikertelen, mert nem engedélyezett karaktereket " "tartalmaz. Csak az [a-z0-9_] karakterek engedélyezettek." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "További modok keresése" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No (optional) dependencies" -msgstr "Választható függőségek:" +msgstr "Nincsenek (választható) függőségek:" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." msgstr "Nincs elérhető játékleírás." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No hard dependencies" msgstr "Nincsenek függőségek." @@ -139,9 +139,8 @@ msgstr "Nincs elérhető modcsomag-leírás." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No optional dependencies" -msgstr "Választható függőségek:" +msgstr "Nincsenek választható függőségek. " #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" @@ -165,20 +164,20 @@ msgstr "Minden csomag" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Vissza" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Vissza a főmenübe" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "$1 letöltése és telepítése, kérlek várj…" +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "Letöltés…" #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" -msgstr "$1 telepítése nem sikerült" +msgstr "$1 letöltése nem sikerült" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -213,50 +212,207 @@ #: builtin/mainmenu/dlg_contentstore.lua msgid "Uninstall" -msgstr "Törlés" +msgstr "Eltávolítás" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update" msgstr "Frissítés" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Megtekintés" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Már létezik egy „$1” nevű világ" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "További terep" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +#, fuzzy +msgid "Altitude chill" +msgstr "Hőmérsékletcsökkenés a magassággal" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "Páratartalomcsökkenés a magassággal" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Biom keverés" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Biomok" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Üregek" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Barlangok" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Létrehozás" #: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Dekorációk" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" -msgstr "Aljáték (mint a minetest_game) letöltése a minetest.net címről" +msgstr "Játék (mint a minetest_game) letöltése a minetest.net címről" #: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" msgstr "Letöltés a minetest.net címről" +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Dungeons" +msgstr "Tömlöc zaj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Lebegő földdarabok az égben" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Lebegő földek" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Játék" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Dombok" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Párás folyók" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Megnöveli a páratartalmat a folyók körül" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Tavak" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "" +"Az alacsony páratartalom és a magas hőmérséklet sekélyesíti vagy ki is " +"száríthatja a folyókat" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen" -msgstr "Térkép-előállítás" +msgstr "Térkép generálás" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Térképgenerátor zászlók" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Térképgenerátor különleges zászlói" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Hegyek" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Iszap áramlás" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Alagutak és barlangok hálózata" #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" msgstr "Nincs játékmód kiválasztva" #: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "A magassággal csökken a hőmérséklet" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "A magassággal csökken a páratartalom" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Folyók" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Tengerszinti folyók" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Kezdőérték" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +msgid "Smooth transition between biomes" +msgstr "Sima átmenet a biomok között" + +#: 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 "" -"Figyelmeztetés: a minimális fejlesztői teszt fejlesztőknek számára készült." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Mérsékelt, Sivatag" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Mérsékelt, Sivatag, Dzsungel" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Mérsékelt, Sivatag, Dzsungel, Tundra, Tajga" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Terrain surface erosion" +msgstr "Terep alapzaj" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Fák és dzsungelfű" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Változatos folyómélység" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Nagyon nagy üregek mélyen a föld alatt" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." +msgstr "Figyelmeztetés: a fejlesztői teszt fejlesztők számára készült." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -264,7 +420,7 @@ #: builtin/mainmenu/dlg_create_world.lua msgid "You have no games installed." -msgstr "Nincsenek aljátékok telepítve." +msgstr "Nincsenek játékok telepítve." #: builtin/mainmenu/dlg_delete_content.lua msgid "Are you sure you want to delete \"$1\"?" @@ -278,11 +434,11 @@ #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: failed to delete \"$1\"" -msgstr "pkgmr: a(z) „$1” törlése meghiúsult" +msgstr "pkgmr: a(z) „$1” törlése sikertelen" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" -msgstr "pkgmgr: érvénytelen módútvonal: „$1”" +msgstr "pkgmgr: érvénytelen útvonal: „$1”" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" @@ -301,7 +457,7 @@ "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." msgstr "" -"Ennek a modcsomagnak a neve a a modpack.conf fájlban meghatározott, ami " +"Ennek a modcsomagnak a neve a modpack.conf fájlban meghatározott, ami " "felülír minden itteni átnevezést." #: builtin/mainmenu/dlg_settings_advanced.lua @@ -342,7 +498,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" -msgstr "offszet" +msgstr "Eltolás" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Persistance" @@ -366,7 +522,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select directory" -msgstr "Útvonal választása" +msgstr "Útvonal kiválasztása" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select file" @@ -389,34 +545,30 @@ msgstr "X" #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "X spread" -msgstr "X méret" +msgstr "X kiterjedés" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y" msgstr "Y" #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "Y spread" -msgstr "Y méret" +msgstr "Y kiterjedés" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z" msgstr "Z" #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "Z spread" -msgstr "Z méret" +msgstr "Z kiterjedés" #. ~ "absvalue" is a noise parameter flag. #. It is short for "absolute value". #. It can be enabled in noise settings in #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "absvalue" msgstr "abszolút érték" @@ -425,7 +577,7 @@ #. for noise settings in main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "defaults" -msgstr "alapértelmezések" +msgstr "alapértelmezett" #. ~ "eased" is a noise parameter flag. #. It is used to make the map smoother and @@ -462,15 +614,15 @@ #: builtin/mainmenu/pkgmgr.lua msgid "Install: file: \"$1\"" -msgstr "Telepítés: fájl: \"$1\"" +msgstr "Fájl telepítése: \"$1\"" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" -msgstr "Nem található érvényes mod, modcsomag" +msgstr "Nem található érvényes mod vagy modcsomag" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" -msgstr "$1 telepítése meghiúsult mint textúracsomag" +msgstr "$1 textúracsomag telepítése meghiúsult" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a game as a $1" @@ -502,7 +654,7 @@ #: builtin/mainmenu/tab_content.lua msgid "Installed Packages:" -msgstr "Telepített csomagok :" +msgstr "Telepített csomagok:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." @@ -510,7 +662,7 @@ #: builtin/mainmenu/tab_content.lua msgid "No package description available" -msgstr "Nincs elérhető csomag leírás" +msgstr "Nincs elérhető csomagleírás" #: builtin/mainmenu/tab_content.lua msgid "Rename" @@ -546,7 +698,7 @@ #: builtin/mainmenu/tab_local.lua msgid "Announce Server" -msgstr "Kiszolgáló nyilvánossá tétele" +msgstr "Szerver nyilvánossá tétele" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" @@ -570,7 +722,11 @@ #: builtin/mainmenu/tab_local.lua msgid "Host Server" -msgstr "Kiszolgáló felállítása" +msgstr "Szerver felállítása" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Játékok telepítése ContentDB-ről" #: builtin/mainmenu/tab_local.lua msgid "Name/Password" @@ -598,7 +754,7 @@ #: builtin/mainmenu/tab_local.lua msgid "Server Port" -msgstr "Kiszolgáló port" +msgstr "Szerver port" #: builtin/mainmenu/tab_local.lua msgid "Start Game" @@ -630,7 +786,7 @@ #: builtin/mainmenu/tab_online.lua msgid "Join Game" -msgstr "Belépés" +msgstr "Csatlakozás játékhoz" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Name / Password" @@ -663,7 +819,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "All Settings" -msgstr "Összes beállítás" +msgstr "Minden beállítás" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" @@ -723,11 +879,11 @@ #: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" -msgstr "Blokk kiemelés" +msgstr "Node kiemelés" #: builtin/mainmenu/tab_settings.lua msgid "Node Outlining" -msgstr "Körvonal" +msgstr "Node körvonal" #: builtin/mainmenu/tab_settings.lua msgid "None" @@ -767,7 +923,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" -msgstr "Árnyalók ( nem elérhető)" +msgstr "Árnyalók (nem elérhető)" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" @@ -802,7 +958,6 @@ msgstr "Hullámzó levelek" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Waving Liquids" msgstr "Hullámzó folyadékok" @@ -836,11 +991,11 @@ #: src/client/client.cpp msgid "Initializing nodes" -msgstr "Csomópontok előkészítése" +msgstr "Node-ok előkészítése" #: src/client/client.cpp msgid "Initializing nodes..." -msgstr "Csomópontok előkészítése…" +msgstr "Node-ok előkészítése…" #: src/client/client.cpp msgid "Loading textures..." @@ -880,7 +1035,7 @@ #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " -msgstr "jelszó fájl megnyitás hiba " +msgstr "jelszófájl megnyitás hiba: " #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " @@ -941,40 +1096,39 @@ #: src/client/game.cpp msgid "Automatic forward disabled" -msgstr "Automata előre kikapcsolva" +msgstr "Automatikus előre kikapcsolva" #: src/client/game.cpp -#, fuzzy msgid "Automatic forward enabled" -msgstr "automata elöre engedélyezve" +msgstr "Automatikus előre engedélyezve" #: src/client/game.cpp msgid "Camera update disabled" -msgstr "kamera frissítés kikapcsolva" +msgstr "Kamera frissítés letiltva" #: src/client/game.cpp msgid "Camera update enabled" -msgstr "Kamera frissítés bekapcsolva" +msgstr "Kamera frissítés engedélyezve" #: src/client/game.cpp msgid "Change Password" -msgstr "Jelszóváltoztatás" +msgstr "Jelszó változtatása" #: src/client/game.cpp msgid "Cinematic mode disabled" -msgstr "Film mód kikapcsolva" +msgstr "Filmszerű mód letiltva" #: src/client/game.cpp msgid "Cinematic mode enabled" -msgstr "Film mód bekapcsolva" +msgstr "Filmszerű mód engedélyezve" #: src/client/game.cpp msgid "Client side scripting is disabled" -msgstr "kliens oldali szkriptek KI" +msgstr "Kliens oldali szkriptek letiltva" #: src/client/game.cpp msgid "Connecting to server..." -msgstr "Kapcsolódás kiszolgálóhoz…" +msgstr "Kapcsolódás szerverhez..." #: src/client/game.cpp msgid "Continue" @@ -1023,15 +1177,15 @@ #: src/client/game.cpp msgid "Debug info and profiler graph hidden" -msgstr "debug infó sor, és graph KI" +msgstr "Hibakereső információ és pofiler elrejtése" #: src/client/game.cpp msgid "Debug info shown" -msgstr "Hibakereső infó BE" +msgstr "Hibakereső információ engedélyezve" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "debug infók, profiler grafika, hálós rajz KI" +msgstr "Hibakereső információk, profilgrafika, hálós rajz rejtett" #: src/client/game.cpp msgid "" @@ -1063,15 +1217,15 @@ #: src/client/game.cpp msgid "Disabled unlimited viewing range" -msgstr "korlátlan látótáv KI" +msgstr "Korlátlan látótáv letiltása" #: src/client/game.cpp msgid "Enabled unlimited viewing range" -msgstr "korlátlan látótáv BE" +msgstr "Korlátlan látótáv engedélyezése" #: src/client/game.cpp msgid "Exit to Menu" -msgstr "Kilépés a fömenübe" +msgstr "Kilépés a főmenübe" #: src/client/game.cpp msgid "Exit to OS" @@ -1079,35 +1233,35 @@ #: src/client/game.cpp msgid "Fast mode disabled" -msgstr "gyors mód KI" +msgstr "Gyors mód letiltva" #: src/client/game.cpp msgid "Fast mode enabled" -msgstr "gyors mód BE" +msgstr "Gyors mód engedélyezve" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "gyors haladási mód BE ( de nincs engedélyed )" +msgstr "Gyors mód engedélyezve (de nincs jogosultságod)" #: src/client/game.cpp msgid "Fly mode disabled" -msgstr "szabadon repülés KI" +msgstr "Repülés letiltva" #: src/client/game.cpp msgid "Fly mode enabled" -msgstr "szabadon repülés BE" +msgstr "Repülés engedélyezve" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "szabad repülés mód BE ( de nincs engedélyed )" +msgstr "Repülés engedélyezve (de nincs jogosultságod)" #: src/client/game.cpp msgid "Fog disabled" -msgstr "köd KI" +msgstr "Köd letiltva" #: src/client/game.cpp msgid "Fog enabled" -msgstr "köd BE" +msgstr "köd engedélyezve" #: src/client/game.cpp msgid "Game info:" @@ -1119,71 +1273,71 @@ #: src/client/game.cpp msgid "Hosting server" -msgstr "Kiszolgáló felállítása" +msgstr "Szerver felállítása" #: src/client/game.cpp msgid "Item definitions..." -msgstr "Tárgy meghatározok…" +msgstr "Tárgyak meghatározása…" #: src/client/game.cpp msgid "KiB/s" -msgstr "KiB/mp" +msgstr "KiB/s" #: src/client/game.cpp msgid "Media..." -msgstr "Média…" +msgstr "Tartalom..." #: src/client/game.cpp msgid "MiB/s" -msgstr "MiB/mp" +msgstr "MiB/s" #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" -msgstr "a kis térkép KI ( szerver , vagy MOD álltal )" +msgstr "A kistérkép letiltva (szerver, vagy mod által)" #: src/client/game.cpp msgid "Minimap hidden" -msgstr "Minitérkép KI" +msgstr "Kistérkép letiltva" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x1" -msgstr "kistérkép RADAR módban x1" +msgstr "Kistérkép radar módban x1" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x2" -msgstr "kistérkép RADAR módban x2" +msgstr "Kistérkép radar módban x2" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x4" -msgstr "kistérkép RADAR módban x4" +msgstr "Kistérkép radar módban x4" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x1" -msgstr "kistérkép terület módban x1" +msgstr "Kistérkép terület módban x1" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x2" -msgstr "kistérkép terület módban x2" +msgstr "Kistérkép terület módban x2" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x4" -msgstr "kistérkép terület módban x4" +msgstr "Kistérkép terület módban x4" #: src/client/game.cpp msgid "Noclip mode disabled" -msgstr "NOCLIP mód KI" +msgstr "Noclip mód letiltva" #: src/client/game.cpp msgid "Noclip mode enabled" -msgstr "noclip BE" +msgstr "Noclip mód engedélyezve" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "NOCLIP mód BE ( de nincs engedélyed )" +msgstr "Noclip mód engedélyezve (de nincs jogosultságod)" #: src/client/game.cpp msgid "Node definitions..." -msgstr "Csomópont meghatározások…" +msgstr "Node-ok meghatározása…" #: src/client/game.cpp msgid "Off" @@ -1194,18 +1348,16 @@ msgstr "Be" #: src/client/game.cpp -#, fuzzy msgid "Pitch move mode disabled" -msgstr "Pályamozgás mód kikapcsolva" +msgstr "Pályamozgás mód letiltva" #: src/client/game.cpp -#, fuzzy msgid "Pitch move mode enabled" -msgstr "Pályamozgás mód bekapcsolva" +msgstr "Pályamozgás mód engedélyezve" #: src/client/game.cpp msgid "Profiler graph shown" -msgstr "prifiler grafika BE" +msgstr "Profilergrafika megjelenítése" #: src/client/game.cpp msgid "Remote server" @@ -1229,11 +1381,19 @@ #: src/client/game.cpp msgid "Sound muted" -msgstr "hang KI" +msgstr "Hang némítva" + +#: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "A hangrendszer letiltva" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "A hangrendszer nem támogatott ebben build-ben" #: src/client/game.cpp msgid "Sound unmuted" -msgstr "hang BE" +msgstr "Hang visszahangosítva" #: src/client/game.cpp #, c-format @@ -1257,40 +1417,40 @@ #: src/client/game.cpp msgid "Wireframe shown" -msgstr "hálós rajzolás BE" +msgstr "Drótváz megjelenítése" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" -msgstr "ZOOM KI ( szerver, vagy MOD álltal )" +msgstr "Nagyítás letiltva (szerver, vagy mod által)" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" -msgstr "Ok" +msgstr "ok" #: src/client/gameui.cpp msgid "Chat hidden" -msgstr "Csevegés KI" +msgstr "Csevegés elrejtve" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "beszélgetös rész BE" +msgstr "Csevegés megjelenítése" #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "HUD KI" +msgstr "HUD elrejtése" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "HUD BE" +msgstr "HUD megjelenítése" #: src/client/gameui.cpp msgid "Profiler hidden" -msgstr "profiler KI" +msgstr "Profiler elrejtése" #: src/client/gameui.cpp #, c-format msgid "Profiler shown (page %d of %d)" -msgstr "Profiler BE (lap: %d1 ennyiböl : %d2)" +msgstr "Profiler megjelenítése (lap: %d1 ennyiből : %d2)" #: src/client/keycode.cpp msgid "Apps" @@ -1298,7 +1458,7 @@ #: src/client/keycode.cpp msgid "Backspace" -msgstr "bacspace gomb" +msgstr "Backspace" #: src/client/keycode.cpp msgid "Caps Lock" @@ -1318,7 +1478,7 @@ #: src/client/keycode.cpp msgid "End" -msgstr "Vége" +msgstr "End" #: src/client/keycode.cpp msgid "Erase EOF" @@ -1334,7 +1494,7 @@ #: src/client/keycode.cpp msgid "Home" -msgstr "Otthon" +msgstr "Home" #: src/client/keycode.cpp msgid "IME Accept" @@ -1346,7 +1506,7 @@ #: src/client/keycode.cpp msgid "IME Escape" -msgstr "IME Escape" +msgstr "IME Kilépés" #: src/client/keycode.cpp msgid "IME Mode Change" @@ -1354,7 +1514,7 @@ #: src/client/keycode.cpp msgid "IME Nonconvert" -msgstr "IME Nem konvertál" +msgstr "IME Nem átalakított" #: src/client/keycode.cpp msgid "Insert" @@ -1362,7 +1522,7 @@ #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp msgid "Left" -msgstr "Bal" +msgstr "Balra" #: src/client/keycode.cpp msgid "Left Button" @@ -1399,63 +1559,63 @@ #: src/client/keycode.cpp msgid "Numpad *" -msgstr "Numerikus bill. *" +msgstr "Numpad *" #: src/client/keycode.cpp msgid "Numpad +" -msgstr "Numerikus bill. +" +msgstr "Numpad +" #: src/client/keycode.cpp msgid "Numpad -" -msgstr "Numerikus bill. -" +msgstr "Numpad -" #: src/client/keycode.cpp msgid "Numpad ." -msgstr "Numerikus bill. ," +msgstr "Numpad ." #: src/client/keycode.cpp msgid "Numpad /" -msgstr "Numerikus bill. /" +msgstr "Numpad /" #: src/client/keycode.cpp msgid "Numpad 0" -msgstr "Numerikus bill. 0" +msgstr "Numpad 0" #: src/client/keycode.cpp msgid "Numpad 1" -msgstr "Numerikus bill. 1" +msgstr "Numpad 1" #: src/client/keycode.cpp msgid "Numpad 2" -msgstr "Numerikus bill. 2" +msgstr "Numpad 2" #: src/client/keycode.cpp msgid "Numpad 3" -msgstr "Numerikus bill. 3" +msgstr "Numpad 3" #: src/client/keycode.cpp msgid "Numpad 4" -msgstr "Numerikus bill. 4" +msgstr "Numpad 5" #: src/client/keycode.cpp msgid "Numpad 5" -msgstr "Numerikus bill. 5" +msgstr "Numpad 5" #: src/client/keycode.cpp msgid "Numpad 6" -msgstr "Numerikus bill. 6" +msgstr "Numpad 6" #: src/client/keycode.cpp msgid "Numpad 7" -msgstr "Numerikus bill. 7" +msgstr "Numpad 7" #: src/client/keycode.cpp msgid "Numpad 8" -msgstr "Numerikus bill. 8" +msgstr "Numpad 8" #: src/client/keycode.cpp msgid "Numpad 9" -msgstr "Numerikus bill. 9" +msgstr "Numpad 9" #: src/client/keycode.cpp msgid "OEM Clear" @@ -1463,11 +1623,11 @@ #: src/client/keycode.cpp msgid "Page down" -msgstr "page down" +msgstr "Page Down" #: src/client/keycode.cpp msgid "Page up" -msgstr "page up" +msgstr "Page Up" #: src/client/keycode.cpp msgid "Pause" @@ -1480,7 +1640,7 @@ #. ~ "Print screen" key #: src/client/keycode.cpp msgid "Print" -msgstr "Nyomtatás" +msgstr "PrintScreen" #: src/client/keycode.cpp msgid "Return" @@ -1488,7 +1648,7 @@ #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp msgid "Right" -msgstr "Jobb" +msgstr "Jobbra" #: src/client/keycode.cpp msgid "Right Button" @@ -1561,10 +1721,10 @@ #: src/gui/guiConfirmRegistration.cpp msgid "Register and Join" -msgstr "regisztrálás, és belépés" +msgstr "Regisztráció és belépés" #: src/gui/guiConfirmRegistration.cpp -#, fuzzy, c-format +#, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" "If you proceed, a new account using your credentials will be created on this " @@ -1572,10 +1732,12 @@ "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" -"Te most %1$s szerverre csatlakozol \"%2$s\" névvel először. Ha folytatod, " -"akkor egy új fiók lesz létrehozva a hitelesítő adatokkal a szerveren. Kérlek " -"írd be újra a jelszavad, kattints Regisztrációra majd Bejelentkezésre, hogy " -"megerősítsd a fióklétrehozást vagy kattints Kilépés gombra a megszakításhoz." +"Te most %1$s szerverre csatlakozol \"%2$s\" névvel először.\n" +"Ha folytatod, akkor egy új fiók lesz létrehozva a hitelesítő adatokkal a " +"szerveren.\n" +"Kérlek írd be újra a jelszavad, kattints Regisztrációra majd " +"Bejelentkezésre, hogy megerősítsd a fióklétrehozást vagy kattints Kilépés " +"gombra a megszakításhoz." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" @@ -1583,15 +1745,15 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "\"Special\" = climb down" -msgstr "„speciál” = lemászás" +msgstr "különleges = lemászás" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" -msgstr "automata Előre" +msgstr "Automatikus előre" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Automatic jumping" -msgstr "automatikus ugrás" +msgstr "Automatikus ugrás" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1599,7 +1761,7 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" -msgstr "másik kamera" +msgstr "Nézet váltása" #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" @@ -1615,7 +1777,7 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. range" -msgstr "KISSEBB látótáv" +msgstr "Látótáv csökkentése" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. volume" @@ -1623,7 +1785,7 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" -msgstr "Érints duplán az „ugrásra” a repülés be-/kikapcsolásához" +msgstr "Nyomj duplán az „ugrásra” a repülés be-/kikapcsolásához" #: src/gui/guiKeyChangeMenu.cpp msgid "Drop" @@ -1635,7 +1797,7 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. range" -msgstr "NAGYOBB látótáv" +msgstr "Látótáv növelése" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. volume" @@ -1656,8 +1818,8 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" -"Gombkiosztás. (Ha ez a menü összeomlik, távolíts el néhány dolgot a minetest." -"conf-ból)" +"Billentyűzetkiosztás. (Ha ez a menü összeomlik, távolíts el néhány dolgot a " +"minetest.conf-ból)" #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" @@ -1673,7 +1835,7 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Prev. item" -msgstr "Előző tárgy" +msgstr "Előző elem" #: src/gui/guiKeyChangeMenu.cpp msgid "Range select" @@ -1689,40 +1851,39 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Special" -msgstr "speciál" +msgstr "Különleges" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle HUD" -msgstr "HUD BE/KI" +msgstr "HUD váltása" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle chat log" -msgstr "csevegés log KI/BE" +msgstr "Csevegésnapló váltása" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fast" -msgstr "Gyors mód bekapcsolása" +msgstr "Gyors mód váltása" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fly" -msgstr "Repülés bekapcsolása" +msgstr "Repülés váltása" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fog" -msgstr "köd KI/BE" +msgstr "Köd váltása" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle minimap" -msgstr "kistérkép KI/BE" +msgstr "Kistérkép váltása" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle noclip" -msgstr "Váltás noclip-re" +msgstr "Noclip mód váltása" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle pitchmove" -msgstr "csevegés log KI/BE" +msgstr "Pályamozgás mód váltása" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" @@ -1730,7 +1891,7 @@ #: src/gui/guiPasswordChange.cpp msgid "Change" -msgstr "Változtatás" +msgstr "Megváltoztatás" #: src/gui/guiPasswordChange.cpp msgid "Confirm Password" @@ -1774,9 +1935,9 @@ "(Android) Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" -"(Android) Virtuális joystick helye javítva.\n" +"(Android) A virtuális joystick helyének javítása.\n" "Ha ez kikapcsolva, akkor a virtuális joystick középen lesz az 'Első " -"kattintás' pozicióba." +"kattintás' pozícióban." #: src/settings_translation_file.cpp msgid "" @@ -1828,37 +1989,34 @@ "1 = relief mapping (lassabb, pontosabb)." #: src/settings_translation_file.cpp -#, fuzzy msgid "2D noise that controls the shape/size of ridged mountains." -msgstr "2D zaj, amely szabályozza a méretét/alakját a hegységeknek" +msgstr "2D zaj, amely a hegyvonulatok az alakját/méretét szabályozza." #: src/settings_translation_file.cpp -#, fuzzy msgid "2D noise that controls the shape/size of rolling hills." -msgstr "2D zaj, amely szabályozza a méretét/alakját a domboknak" +msgstr "2D zaj, amely a dombok alakját/méretét szabályozza." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of step mountains." -msgstr "" +msgstr "2D zaj amely szabályozza a lépés hegyek formáját/méretét." #: src/settings_translation_file.cpp -#, fuzzy msgid "2D noise that controls the size/occurrence of ridged mountain ranges." -msgstr "2D zaj, amely szabályozza az előfordulását/méretét a hegységeknek" +msgstr "" +"2D zaj, amely szabályozza az méretét/előfordulását a sziklás hegyláncoknak." #: src/settings_translation_file.cpp -#, fuzzy msgid "2D noise that controls the size/occurrence of rolling hills." -msgstr "2D zaj, amely szabályozza az előfordulását/méretét a domboknak" +msgstr "2D zaj, amely a dombok méretét/előfordulását szabályozza." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of step mountain ranges." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "2D noise that locates the river valleys and channels." -msgstr "2D zaj, amely szabályozza az elhelyezkedését a folyómedreknek" +msgstr "" +"2D zaj, amely a folyóvölgyek és a folyómedrek elhelyezkedését szabályozza." #: src/settings_translation_file.cpp msgid "3D clouds" @@ -1869,8 +2027,13 @@ msgstr "3D mód" #: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode parallax strength" +msgstr "Parallax Occlusion hatás ereje" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." -msgstr "Hatalmas barlangokat meghatározó 3D zaj." +msgstr "Óriási üregeket meghatározó 3D zaj." #: src/settings_translation_file.cpp msgid "" @@ -1878,25 +2041,32 @@ "Also defines structure of floatland mountain terrain." msgstr "" "A hegyek szerkezetét és magasságát meghatározó 3D zaj.\n" -"A lebegő tájak hegységeit is meghatározza." +"A lebegő tájak hegyeit is meghatározza." + +#: 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 "A folyókanyonok falainak szerkezetét meghatározó 3D zaj." #: src/settings_translation_file.cpp -#, fuzzy msgid "3D noise defining terrain." -msgstr "\"+/+=%/=(/=()(=)Ö()Ö=()>#&@{#&@" +msgstr "3D zaj amely meghatározza a terepet." #: src/settings_translation_file.cpp msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." msgstr "" +"3D zaj a sziklapárkányokhoz, szirtekhez, stb. Általában kisebb változások." #: src/settings_translation_file.cpp -#, fuzzy 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 mapchunkonként." +msgstr "3D-s zaj, amely meghatározza a tömlöcök számát egy térképdarabkánként." #: src/settings_translation_file.cpp #, fuzzy @@ -1926,7 +2096,7 @@ "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 map seed az új térképhez, véletlenszerűhöz hagyd üresen.\n" +"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." #: src/settings_translation_file.cpp @@ -1942,7 +2112,8 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +#, fuzzy +msgid "Absolute limit of queued blocks to emerge" msgstr "A világgeneráló szálak számának abszolút határa" #: src/settings_translation_file.cpp @@ -1950,9 +2121,8 @@ msgstr "Gyorsulás levegőben" #: src/settings_translation_file.cpp -#, fuzzy msgid "Acceleration of gravity, in nodes per second per second." -msgstr "Gravitációs gyorsulás, csomópontokban másodpercenként." +msgstr "Gravitációs gyorsulás, node-okban másodpercenként." #: src/settings_translation_file.cpp msgid "Active Block Modifiers" @@ -1982,7 +2152,7 @@ #: src/settings_translation_file.cpp msgid "Adds particles when digging a node." -msgstr "Részecskéket hoz létre egy kocka ásásakor." +msgstr "Részecskéket hoz létre egy node ásásakor." #: src/settings_translation_file.cpp msgid "" @@ -1993,6 +2163,16 @@ "képernyőkhöz." #: 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 "Advanced" msgstr "Haladó" @@ -2006,13 +2186,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Altitude chill" -msgstr "Hőmérsékletcsökkenés a magassággal" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" -msgstr "Repülés és gyorsaság mindig" +msgstr "Repülés és gyors mód mindig" #: src/settings_translation_file.cpp msgid "Ambient occlusion gamma" @@ -2020,24 +2195,23 @@ #: src/settings_translation_file.cpp msgid "Amount of messages a player may send per 10 seconds." -msgstr "mennyi üzenet mehet / 10 ms." +msgstr "Üzenetek száma / 10 s." #: src/settings_translation_file.cpp -#, fuzzy msgid "Amplifies the valleys." -msgstr "A völgyek erősítése" +msgstr "Erősíti a völgyeket." #: src/settings_translation_file.cpp msgid "Anisotropic filtering" -msgstr "Anizotrópikus szűrés" +msgstr "Anizotróp szűrés" #: src/settings_translation_file.cpp msgid "Announce server" -msgstr "Szerver kihirdetése" +msgstr "Szerver hirdetése" #: src/settings_translation_file.cpp msgid "Announce to this serverlist." -msgstr "Szerver kihirdetése ERRE a szerverlistára." +msgstr "Szerver kihirdetése erre a szerverlistára." #: src/settings_translation_file.cpp #, fuzzy @@ -2045,9 +2219,8 @@ msgstr "Elem nevének hozzáadása" #: src/settings_translation_file.cpp -#, fuzzy msgid "Append item name to tooltip." -msgstr "Adja hozzá az elem nevét az eszköztipphez." +msgstr "Elem nevének hozzáadása az eszköztipphez." #: src/settings_translation_file.cpp msgid "Apple trees noise" @@ -2072,7 +2245,6 @@ 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" @@ -2093,21 +2265,19 @@ "(Néhány víz alatti és barlangokban lévő blokk nem jelenik meg, néha a " "felszínen lévők sem.)\n" "Ha nagyobb, mint a \"max_block_send_distance\", akkor nincs optimalizáció.\n" -"A távolság blokkokban értendő (16 kocka)" +"A távolság blokkokban értendő (16 node)" #: src/settings_translation_file.cpp -#, fuzzy msgid "Automatic forward key" -msgstr "automata Előre gomb" +msgstr "Automatikus előre gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Automatically jump up single-node obstacles." -msgstr "Automatikusan felugrik egy blokk magas akadályokra." +msgstr "Automatikusan felugrik az egy node magas akadályokra." #: src/settings_translation_file.cpp msgid "Automatically report to the serverlist." -msgstr "Automatikus bejelentés a FŐ szerverlistára." +msgstr "Automatikus bejelentés a szerverlistára." #: src/settings_translation_file.cpp msgid "Autosave screen size" @@ -2124,7 +2294,7 @@ #: src/settings_translation_file.cpp msgid "Base ground level" -msgstr "Talaj szint" +msgstr "Talajszint" #: src/settings_translation_file.cpp msgid "Base terrain height." @@ -2152,34 +2322,31 @@ #: src/settings_translation_file.cpp msgid "Bind address" -msgstr "Bind cím" +msgstr "Cím csatolása" #: src/settings_translation_file.cpp msgid "Biome API temperature and humidity noise parameters" -msgstr "Éghajlat API hőmérséklet- és páratartalom zaj paraméterei" +msgstr "Biom API hőmérséklet- és páratartalom zaj paraméterei" #: src/settings_translation_file.cpp msgid "Biome noise" -msgstr "Éghajlat zaj" +msgstr "Biom zaj" #: src/settings_translation_file.cpp msgid "Bits per pixel (aka color depth) in fullscreen mode." msgstr "Bit/pixel (vagyis színmélység) teljes képernyős módban." #: src/settings_translation_file.cpp -#, fuzzy msgid "Block send optimize distance" -msgstr "Max blokk generálási távolság" +msgstr "Max blokk küldési távolság" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic font path" -msgstr "Monospace betűtípus útvonal" +msgstr "Félkövér dőlt betűtípus útvonal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic monospace font path" -msgstr "Monospace betűtípus útvonal" +msgstr "Félkövér dőlt monospace betűtípus útvonal" #: src/settings_translation_file.cpp #, fuzzy @@ -2187,9 +2354,8 @@ msgstr "Betűtípus helye" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold monospace font path" -msgstr "Monospace betűtípus útvonal" +msgstr "Félkövér betűtípus útvonal" #: src/settings_translation_file.cpp msgid "Build inside player" @@ -2217,11 +2383,11 @@ #: src/settings_translation_file.cpp msgid "Camera smoothing in cinematic mode" -msgstr "Kamera simítás \"cinematic\" módban" +msgstr "Kamera simítás filmszerű módban" #: src/settings_translation_file.cpp msgid "Camera update toggle key" -msgstr "Kamera frissítés váltás gomb" +msgstr "Kamera frissítés váltása gomb" #: src/settings_translation_file.cpp msgid "Cave noise" @@ -2249,23 +2415,23 @@ #: src/settings_translation_file.cpp msgid "Cavern limit" -msgstr "Barlang korlát" +msgstr "Üreg korlát" #: src/settings_translation_file.cpp msgid "Cavern noise" -msgstr "Barlang zaj" +msgstr "Üreg zaj" #: src/settings_translation_file.cpp msgid "Cavern taper" -msgstr "Barlang vékonyodás" +msgstr "Üreg vékonyodás" #: src/settings_translation_file.cpp msgid "Cavern threshold" -msgstr "Barlang küszöb" +msgstr "Üreg küszöb" #: src/settings_translation_file.cpp msgid "Cavern upper limit" -msgstr "Barlang felső korlát" +msgstr "Üreg felső korlát" #: src/settings_translation_file.cpp msgid "" @@ -2290,11 +2456,21 @@ "Szükséges lehet a kisebb képernyőkhöz." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "Betűtípus mérete" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Csevegés gomb" #: src/settings_translation_file.cpp #, fuzzy +msgid "Chat log level" +msgstr "Hibakereső naplózás szintje" + +#: src/settings_translation_file.cpp +#, fuzzy msgid "Chat message count limit" msgstr "Chat üzenetek maximális száma" @@ -2304,17 +2480,16 @@ msgstr "Üzenet összeomláskor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message kick threshold" -msgstr "Sivatag zajának küszöbszintje" +msgstr "Sivatag zajának küszöbe" #: src/settings_translation_file.cpp msgid "Chat message max length" -msgstr "Chat üzenet maximális hossza" +msgstr "CSevegésüzenet maximális hossza" #: src/settings_translation_file.cpp msgid "Chat toggle key" -msgstr "Csevegés váltás gomb" +msgstr "Csevegés váltása gomb" #: src/settings_translation_file.cpp msgid "Chatcommands" @@ -2322,15 +2497,15 @@ #: src/settings_translation_file.cpp msgid "Chunk size" -msgstr "Térképdarab (chunk) mérete" +msgstr "Térképdarabka (chunk) mérete" #: src/settings_translation_file.cpp msgid "Cinematic mode" -msgstr "Filmkészítő mód" +msgstr "Filmszerű mód" #: src/settings_translation_file.cpp msgid "Cinematic mode key" -msgstr "Filmkészítő mód gomb" +msgstr "Filmszerű mód gomb" #: src/settings_translation_file.cpp msgid "Clean transparent textures" @@ -2346,11 +2521,11 @@ #: src/settings_translation_file.cpp msgid "Client modding" -msgstr "Kliens moddolás" +msgstr "Kliens modolás" #: src/settings_translation_file.cpp msgid "Client side modding restrictions" -msgstr "Kliens moddolási megkötések" +msgstr "Kliens modolási korlátozások" #: src/settings_translation_file.cpp msgid "Client side node lookup range restriction" @@ -2362,7 +2537,7 @@ #: src/settings_translation_file.cpp msgid "Cloud radius" -msgstr "Felhő rádiusz" +msgstr "Felhők sugara" #: src/settings_translation_file.cpp msgid "Clouds" @@ -2370,7 +2545,7 @@ #: src/settings_translation_file.cpp msgid "Clouds are a client side effect." -msgstr "A felhők egy kliens oldali effekt." +msgstr "A felhő kliens oldali effekt." #: src/settings_translation_file.cpp msgid "Clouds in menu" @@ -2424,7 +2599,7 @@ #: src/settings_translation_file.cpp msgid "Connects glass if supported by node." -msgstr "Üveg csatlakoztatása ha a blokk támogatja." +msgstr "Üveg csatlakoztatása ha a node támogatja." #: src/settings_translation_file.cpp msgid "Console alpha" @@ -2440,12 +2615,11 @@ #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" -msgstr "" +msgstr "ContentDB zászló feketelista" #: src/settings_translation_file.cpp -#, fuzzy msgid "ContentDB URL" -msgstr "tartalom" +msgstr "ContentDB URL" #: src/settings_translation_file.cpp msgid "Continuous forward" @@ -2467,7 +2641,7 @@ "Examples:\n" "72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." msgstr "" -"Nap/éjjel ciklus hossza.\n" +"Nappal/éjjel ciklus hossza.\n" "Példák: 72 = 20 perc, 360 = 4 perc, 1 = 24 óra, 0 = nappal/éjjel/bármelyik " "változatlan marad." @@ -2501,11 +2675,11 @@ #: src/settings_translation_file.cpp msgid "Crosshair alpha" -msgstr "Célkereszt alfa" +msgstr "Célkereszt átlátszóság" #: src/settings_translation_file.cpp msgid "Crosshair alpha (opaqueness, between 0 and 255)." -msgstr "Célkereszt alfa (átlátszatlanság, 0 és 255 között)." +msgstr "Célkereszt átlátszóság (0 és 255 között)." #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2525,7 +2699,7 @@ #: src/settings_translation_file.cpp msgid "Debug info toggle key" -msgstr "Hibakereső infó váltás gomb" +msgstr "Hibakereső információra váltás gomb" #: src/settings_translation_file.cpp #, fuzzy @@ -2534,16 +2708,15 @@ #: src/settings_translation_file.cpp msgid "Debug log level" -msgstr "Hibakereső napló szint" +msgstr "Hibakereső naplózás szintje" #: src/settings_translation_file.cpp msgid "Dec. volume key" -msgstr "Hangerő csökk. gomb" +msgstr "Hangerő csökkentés gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Decrease this to increase liquid resistance to movement." -msgstr "Csökkentse ezt a folyadék mozgásállóságának növelése érdekében." +msgstr "Csökkentse ezt hogy megnövelje a folyadék ellenállását." #: src/settings_translation_file.cpp msgid "Dedicated server step" @@ -2578,6 +2751,11 @@ msgstr "Alapértelmezett jelentésformátum" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Alapértelmezett játék" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2594,10 +2772,9 @@ msgstr "A homokos tengerpartok területeit határozza meg." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines distribution of higher terrain and steepness of cliffs." msgstr "" -"A magasabb terep (hegytetők) területeit szabja meg és a hegyoldalak\n" +"A magasabb terep (hegytetők) területeit szabja meg és a szirtek\n" "meredekségére is hatással van." #: src/settings_translation_file.cpp @@ -2608,8 +2785,8 @@ #: src/settings_translation_file.cpp msgid "Defines full size of caverns, smaller values create larger caverns." msgstr "" -"A barlangok teljes méretét adja meg. Kisebb értékek nagyobb\n" -"barlangokat képeznek." +"Az üregek teljes méretét adja meg. Kisebb értékek nagyobb\n" +"üregeket képeznek." #: src/settings_translation_file.cpp msgid "Defines large-scale river channel structure." @@ -2628,14 +2805,12 @@ "Nagyobb érték simább normal map-et eredményez." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the base ground level." -msgstr "Az erdős területeket és a fák sűrűségét szabályozza." +msgstr "Meghatározza az alap talajszintet." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the depth of the river channel." -msgstr "Az erdős területeket és a fák sűrűségét szabályozza." +msgstr "A folyómedrek mélységét határozza meg." #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." @@ -2644,14 +2819,12 @@ "blokkokban megadva (0 = korlátlan)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river channel." -msgstr "A nagy léptékű folyómeder-struktúrát határozza meg." +msgstr "A folyómedrek szélességét határozza meg." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river valley." -msgstr "Azokat a területeket adja meg, ahol a fák almát teremnek." +msgstr "A folyóvölgy szélességét határozza meg." #: src/settings_translation_file.cpp msgid "Defines tree areas and tree density." @@ -2662,7 +2835,7 @@ "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 "" -"A világ modelljének frissítésének időköze a klienseken. Ennek a megnövelése\n" +"A világ modelljének frissítési időköze a klienseken. Ennek a megnövelése\n" "lelassítja a frissítéseket,így csökkenti a lassú kliensek szaggatását." #: src/settings_translation_file.cpp @@ -2678,13 +2851,12 @@ msgstr "Elavult Lua API kezelése" #: src/settings_translation_file.cpp -#, fuzzy msgid "Depth below which you'll find giant caverns." -msgstr "A mélység, ami alatt nagy terjedelmű barlangokat találsz majd." +msgstr "A mélység, ami alatt óriási üregeket találsz majd." #: src/settings_translation_file.cpp msgid "Depth below which you'll find large caves." -msgstr "A mélység, ami alatt nagy terjedelmű barlangokat találsz majd." +msgstr "A mélység, ami alatt nagy barlangokat találsz majd." #: src/settings_translation_file.cpp msgid "" @@ -2696,21 +2868,19 @@ #: src/settings_translation_file.cpp msgid "Desert noise threshold" -msgstr "Sivatag zajának küszöbszintje" +msgstr "Sivatag zaj küszöbe" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Deserts occur when np_biome exceeds this value.\n" "When the 'snowbiomes' flag is enabled, this is ignored." msgstr "" "Sivatag akkor keletkezik, ha az np_biome meghaladja ezt az értéket.\n" -"Ha az új biome rendszer engedélyezve van, akkor ez mellőzésre kerül." +"Ha az új biom rendszer engedélyezve van, akkor ez mellőzésre kerül." #: src/settings_translation_file.cpp -#, fuzzy msgid "Desynchronize block animation" -msgstr "Blokk animáció deszinkronizálása" +msgstr "Blokkanimáció deszinkronizálása" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -2730,7 +2900,7 @@ #: src/settings_translation_file.cpp msgid "Double tap jump for fly" -msgstr "Az \"ugrás\" gomb duplán a repüléshez" +msgstr "Az ugrás gomb dupla megnyomása a repüléshez" #: src/settings_translation_file.cpp msgid "Double-tapping the jump key toggles fly mode." @@ -2738,12 +2908,11 @@ #: src/settings_translation_file.cpp msgid "Drop item key" -msgstr "Tárgy eldobás gomb" +msgstr "Tárgy eldobása gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dump the mapgen debug information." -msgstr "A térkép-előállítás hibakeresési információinak kiírása." +msgstr "A térképgenerátor hibakeresési információinak kiírása." #: src/settings_translation_file.cpp #, fuzzy @@ -2756,9 +2925,8 @@ msgstr "Tömlöc minimális Y magassága" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dungeon noise" -msgstr "Barlang zaj" +msgstr "Tömlöc zaj" #: src/settings_translation_file.cpp msgid "" @@ -2771,7 +2939,7 @@ "Enable Lua modding support on client.\n" "This support is experimental and API can change." msgstr "" -"Lua moddolás támogatás bekapcsolása a kliensen.\n" +"Lua modolás támogatás bekapcsolása a kliensen.\n" "Ez a támogatás még kísérleti fázisban van, így az API változhat." #: src/settings_translation_file.cpp @@ -2788,9 +2956,8 @@ msgstr "Joystick engedélyezése" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable mod channels support." -msgstr "Mod biztonság engedélyezése" +msgstr "A mod csatornák támogatásának engedélyezése." #: src/settings_translation_file.cpp msgid "Enable mod security" @@ -2864,8 +3031,9 @@ "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 "" -"nézet billegés, és mértéke.\n" -"például: 0 nincs billegés; 1.0 normál; 2.0 dupla." +"Bekapcsolja a fejmozgást és beállítja a mértékét.\n" +"Pl: 0 nincs fejmozgás; 1.0 alapértelmezett fejmozgás van; 2.0 dupla " +"fejmozgás van" #: src/settings_translation_file.cpp #, fuzzy @@ -2889,7 +3057,7 @@ #: src/settings_translation_file.cpp msgid "Enables animation of inventory items." -msgstr "Az eszköztár elemeinek animációjának engedélyezése." +msgstr "Az eszköztárelemek animációjának engedélyezése." #: src/settings_translation_file.cpp msgid "" @@ -2906,7 +3074,7 @@ #: src/settings_translation_file.cpp msgid "Enables minimap." -msgstr "Minitérkép engedélyezése." +msgstr "Engedélyezi a kistérképet." #: src/settings_translation_file.cpp msgid "" @@ -2920,7 +3088,7 @@ "Requires shaders to be enabled." msgstr "" "Parallax occlusion mapping bekapcsolása.\n" -"A shaderek engedélyezve kell legyenek." +"A shaderek engedélyezve kell hogy legyenek." #: src/settings_translation_file.cpp msgid "" @@ -2932,7 +3100,7 @@ #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" -msgstr "" +msgstr "Játékmotor profiler adatok kiírási időköze" #: src/settings_translation_file.cpp #, fuzzy @@ -2948,6 +3116,16 @@ "ha nagyobbra van állítva, mint 0." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "FPS a szünet menüben" @@ -2971,15 +3149,15 @@ #: src/settings_translation_file.cpp msgid "Fallback font shadow" -msgstr "Tartalék betűtípus árnyék" +msgstr "Tartalék betűtípus árnyéka" #: src/settings_translation_file.cpp msgid "Fallback font shadow alpha" -msgstr "Tartalék betűtípus árnyék alfa" +msgstr "Tartalék betűtípus árnyék átlátszósága" #: src/settings_translation_file.cpp msgid "Fallback font size" -msgstr "Tartalék betűtípus méret" +msgstr "Tartalék betűtípus mérete" #: src/settings_translation_file.cpp msgid "Fast key" @@ -2998,13 +3176,12 @@ msgstr "Gyors mozgás" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"special\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" "Gyors mozgás (a használat gombbal).\n" -"Szükséges hozzá a \"fast\" (gyorsaság) jogosultság a szerveren." +"Szükséges hozzá a gyors mód jogosultság a szerveren." #: src/settings_translation_file.cpp msgid "Field of view" @@ -3025,13 +3202,12 @@ "szervereket, amik a Többjátékos fül alatt jelennek meg." #: src/settings_translation_file.cpp -#, fuzzy msgid "Filler depth" -msgstr "Folyó mélység" +msgstr "A kitöltőanyag mélysége" #: src/settings_translation_file.cpp msgid "Filler depth noise" -msgstr "" +msgstr "Kitöltőanyag mélység zaj" #: src/settings_translation_file.cpp msgid "Filmic tone mapping" @@ -3059,7 +3235,7 @@ #: src/settings_translation_file.cpp msgid "Fixed map seed" -msgstr "lezárt pálya-generáló kód" +msgstr "Fix térkép seed" #: src/settings_translation_file.cpp #, fuzzy @@ -3067,6 +3243,35 @@ msgstr "Rögzített virtuális joystick" #: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "Lebegő földek sűrűsége" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "Lebegő földek maximális Y magassága" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "Lebegő földek minimális Y magassága" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "Lebegőföldek zaja" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "A lebegő hegyek alapzaja" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "A lebegő földek hegyeinek távolsága" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "Lebegő földek vízszintje" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Repülés gomb" @@ -3080,11 +3285,11 @@ #: src/settings_translation_file.cpp msgid "Fog start" -msgstr "Köd indító határa" +msgstr "Köd indulás" #: src/settings_translation_file.cpp msgid "Fog toggle key" -msgstr "Köd váltás gomb" +msgstr "Köd váltása gomb" #: src/settings_translation_file.cpp msgid "Font bold by default" @@ -3100,7 +3305,7 @@ #: src/settings_translation_file.cpp msgid "Font shadow alpha" -msgstr "Betűtípus árnyék alfa" +msgstr "Betűtípus árnyék átlátszósága" #: src/settings_translation_file.cpp msgid "Font size" @@ -3119,6 +3324,12 @@ 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 #, fuzzy msgid "" "Format of player chat messages. The following strings are valid " @@ -3167,11 +3378,9 @@ msgstr "Játékon belüli csevegő konzol hátterének színe (R,G,B)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Formspec full-screen background opacity (between 0 and 255)." msgstr "" -"Játékon belüli csevegő konzol hátterének alfája (átlátszatlanság, 0 és 255 " -"között)." +"Játékon belüli csevegő konzol hátterének átlátszósága (0 és 255 között)." #: src/settings_translation_file.cpp msgid "Forward key" @@ -3183,16 +3392,15 @@ #: src/settings_translation_file.cpp msgid "Fractal type" -msgstr "Fraktál tipusa" +msgstr "Fraktál típusa" #: src/settings_translation_file.cpp msgid "Fraction of the visible distance at which fog starts to be rendered" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "FreeType fonts" -msgstr "Freetype betűtípusok" +msgstr "FreeType betűtípusok" #: src/settings_translation_file.cpp msgid "" @@ -3288,12 +3496,11 @@ #: src/settings_translation_file.cpp msgid "Ground level" -msgstr "Talaj szint" +msgstr "Talajszint" #: src/settings_translation_file.cpp -#, fuzzy msgid "Ground noise" -msgstr "Talaj szint" +msgstr "Talaj zaj" #: src/settings_translation_file.cpp #, fuzzy @@ -3301,9 +3508,8 @@ msgstr "HTTP Modok" #: src/settings_translation_file.cpp -#, fuzzy msgid "HUD scale factor" -msgstr "vezérlőelemek mérete" +msgstr "Vezérlőelemek mérete" #: src/settings_translation_file.cpp msgid "HUD toggle key" @@ -3334,27 +3540,24 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Heat blend noise" -msgstr "Hőkevert zaj" +msgstr "Hőkeverési zaj" #: src/settings_translation_file.cpp -#, fuzzy msgid "Heat noise" msgstr "Hőzaj" #: src/settings_translation_file.cpp msgid "Height component of the initial window size." -msgstr "A kezdeti ablak méret magasság összetevője." +msgstr "A kezdeti ablak magassága." #: src/settings_translation_file.cpp msgid "Height noise" msgstr "Magasság zaj" #: src/settings_translation_file.cpp -#, fuzzy msgid "Height select noise" -msgstr "A magasságot választó zaj" +msgstr "A magasságot kiválasztó zaj" #: src/settings_translation_file.cpp msgid "High-precision FPU" @@ -3370,19 +3573,19 @@ #: src/settings_translation_file.cpp msgid "Hilliness1 noise" -msgstr "" +msgstr "1. dombosság zaj" #: src/settings_translation_file.cpp msgid "Hilliness2 noise" -msgstr "" +msgstr "2. dombosság zaj" #: src/settings_translation_file.cpp msgid "Hilliness3 noise" -msgstr "" +msgstr "3. dombosság zaj" #: src/settings_translation_file.cpp msgid "Hilliness4 noise" -msgstr "" +msgstr "4. dombosság zaj" #: src/settings_translation_file.cpp msgid "Homepage of server, to be displayed in the serverlist." @@ -3552,9 +3755,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "How deep to make rivers." -msgstr "Milyen mélyek legyenek a folyók" +msgstr "A folyók mélysége." #: src/settings_translation_file.cpp msgid "" @@ -3573,13 +3775,12 @@ "Magasabb érték egyenletesebb, de több RAM-ot használ." #: src/settings_translation_file.cpp -#, fuzzy msgid "How wide to make rivers." -msgstr "Milyen szélesek legyenek a folyók" +msgstr "A folyók szélessége." #: src/settings_translation_file.cpp msgid "Humidity blend noise" -msgstr "Páratartalom keverék zaj" +msgstr "Páratartalom keverés zaj" #: src/settings_translation_file.cpp #, fuzzy @@ -3587,9 +3788,8 @@ msgstr "Páratartalomzaj" #: src/settings_translation_file.cpp -#, fuzzy msgid "Humidity variation for biomes." -msgstr "Páratartalom-változás a biomokban." +msgstr "Páratartalom-változékonyság a biomokban." #: src/settings_translation_file.cpp msgid "IPv6" @@ -3633,9 +3833,8 @@ "nodes.\n" "This requires the \"noclip\" privilege on the server." msgstr "" -"Ha engedélyezve van együtt a repülés (fly) móddal, a játékos átrepülhet " -"szilárd\n" -"blokkokon. Szükséges hozzá a \"noclip\" jogosultság a szerveren." +"Ha a repülés móddal együtt van engedélyezve, a játékos átrepülhet szilárd\n" +"node-okon. Szükséges hozzá a noclip jogosultság a szerveren." #: src/settings_translation_file.cpp #, fuzzy @@ -3674,6 +3873,8 @@ "If enabled, makes move directions relative to the player's pitch when flying " "or swimming." msgstr "" +"Ha engedélyezve van a játékos abba az irányba megy amerre néz, amikor úszik " +"vagy repül." #: src/settings_translation_file.cpp msgid "If enabled, new players cannot join with an empty password." @@ -3685,7 +3886,7 @@ "you stand.\n" "This is helpful when working with nodeboxes in small areas." msgstr "" -"Ha engedélyezve van, elhelyezhetsz blokkokat oda, ahol állsz (láb + " +"Ha engedélyezve van, elhelyezhetsz node-okat oda, ahol állsz (láb + " "szemmagasság).\n" "Ez segít, ha kis területen dolgozol." @@ -3712,7 +3913,7 @@ #: src/settings_translation_file.cpp msgid "Ignore world errors" -msgstr "Világ hibák figyelmen kívül hagyása" +msgstr "Világhibák figyelmen kívül hagyása" #: src/settings_translation_file.cpp msgid "In-Game" @@ -3721,8 +3922,7 @@ #: 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 alfája (átlátszatlanság, 0 és 255 " -"között)." +"Játékon belüli csevegő konzol 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)." @@ -3730,17 +3930,15 @@ #: 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ő konzol magassága 0,1 (10%) és 1,0 (100%) között." +msgstr "Játékon belüli csevegéskonzol magassága 0,1 (10%) és 1,0 (100%) között." #: src/settings_translation_file.cpp msgid "Inc. volume key" -msgstr "Hangerő növ. gomb" +msgstr "Hangerő növelése gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Initial vertical speed when jumping, in nodes per second." -msgstr "Kezdeti függőleges sebesség ugráskor, blokk/másodpercben." +msgstr "Kezdeti függőleges sebesség ugráskor, node/másodpercben." #: src/settings_translation_file.cpp msgid "" @@ -3749,9 +3947,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Instrument chatcommands on registration." -msgstr "Chat-parancsok a regisztrációkor." +msgstr "Csevegésparancsok bemutatása regisztrációkor." #: src/settings_translation_file.cpp msgid "" @@ -3796,21 +3993,19 @@ #: src/settings_translation_file.cpp msgid "Invert mouse" -msgstr "Egér invertálása" +msgstr "Fordított egér" #: src/settings_translation_file.cpp msgid "Invert vertical mouse movement." -msgstr "Függőleges egérmozgás invertálása." +msgstr "Függőleges egérmozgás megfordítása." #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic font path" -msgstr "Monospace betűtípus útvonal" +msgstr "Dőlt betűtípus útvonal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic monospace font path" -msgstr "Monospace betűtípus útvonal" +msgstr "Dőlt monspace betűtípus útvonal" #: src/settings_translation_file.cpp #, fuzzy @@ -3823,38 +4018,35 @@ msgstr "Ismétlések" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"A rekurzív funkció ismétlései.\n" +"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 terhet.\n" -" 20 ismétléseknél ez a térképgeneráló hasonló terheléssel rendelkezik, mint " -"a V7." +"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 " +"V7." #: src/settings_translation_file.cpp msgid "Joystick ID" -msgstr "Botkormány ID" +msgstr "Joystick ID" #: src/settings_translation_file.cpp msgid "Joystick button repetition interval" -msgstr "Joystick gomb ismétlés időköz" +msgstr "Joystick gomb ismétlési időköz" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" msgstr "Joystick frustum érzékenység" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick type" -msgstr "Botkormány tipus" +msgstr "Joystick típus" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "W component of hypercomplex constant.\n" @@ -3865,11 +4057,10 @@ "Julia-halmaz.\n" "W komponens hiperkomplex állandó.\n" "Megváltoztatja a fraktál alakját.\n" -"Nincs hatása a 3D Fraktálok.\n" +"Nincs hatása a 3D Fraktálokra.\n" "Tartomány nagyjából -2 és 2 között." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "X component of hypercomplex constant.\n" @@ -3882,7 +4073,6 @@ "Tartomány nagyjából -2 és 2 között." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "Y component of hypercomplex constant.\n" @@ -3909,7 +4099,7 @@ #: src/settings_translation_file.cpp msgid "Julia w" -msgstr "" +msgstr "Julia W" #: src/settings_translation_file.cpp msgid "Julia x" @@ -3987,7 +4177,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Ugrás gombja.\n" +"Gomb az ugráshoz.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -3997,12 +4187,11 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a gyors mozgáshoz gyors (fast) módban.\n" +"Gomb a gyors mozgáshoz gyors módban.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for moving the player backward.\n" "Will also disable autoforward, when active.\n" @@ -4010,6 +4199,7 @@ "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" "Gomb a játékos hátrafelé mozgásához.\n" +"Az automatikus előremozgást is kikapcsolja, ha aktív.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4044,13 +4234,12 @@ "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for muting the game.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Ugrás gombja.\n" +"Gomb a játék némításához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4060,18 +4249,17 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a csevegő ablak megnyitásához, parancsok beírásához.\n" +"Gomb a csevegőablak megnyitásához, parancsok beírásához.\n" "Lásd: //irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for opening the chat window to type local commands.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a csevegő ablak megnyitásához, parancsok beírásához.\n" +"Gomb a csevegőablak megnyitásához, helyi parancsok beírásához.\n" "Lásd: //irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4081,7 +4269,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a csevegő ablak megnyitásához.\n" +"Gomb a csevegőablak megnyitásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4091,381 +4279,347 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb az eszköztár megnyitásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 11th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 11. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 12th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 12. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 13th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 13. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 14th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 14. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 15th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 15. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 16th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 16. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 17th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 17. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 18th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 18. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 19th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 19. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 20th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 20. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 21st hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 21. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 22nd hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 22. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 23rd hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 23. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 24th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 24. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 25th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 25. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 26th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 26. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 27th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 27. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 28th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 28. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 29th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 29. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 30th hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 30. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 31st hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 31. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the 32nd hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 32. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the eighth hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 8. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the fifth hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 5. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the first hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 1. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the fourth hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 4. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the next item in the hotbar.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a következő elem kiválasztásához az eszköztárban.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the ninth hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 9. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the previous item in the hotbar.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb az előző elem kiválasztásához az eszköztárban.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the second hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 2. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the seventh hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 7. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the sixth hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 6. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the tenth hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 10. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for selecting the third hotbar slot.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az Eszköztár megnyitásához.\n" +"Gomb a 3. eszköztárhely kiválasztásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4477,7 +4631,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a lopakodáshoz (sneak).\n" +"Gomb a lopakodáshoz.\n" "A lefelé mászáshoz és vízben történő ereszkedéshez is használt, ha a " "aux1_descends le van tiltva.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." @@ -4489,7 +4643,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a belső és külső nézetű kamera váltáshoz.\n" +"Gomb a belső és külső nézetre váltáshoz.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4499,18 +4653,17 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb képernyőfelvétel készítéshez.\n" +"Gomb képernyőkép készítéshez.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for toggling autoforward.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a gyors (fast) módra váltáshoz.\n" +"Gomb az automatikus előrehaladás módra váltáshoz.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4520,7 +4673,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a \"cinematic\" mód (filmkészítés) bekapcsolásához.\n" +"Gomb a filmszerű mód váltásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4530,7 +4683,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a minitérkép megjelenítéséhez.\n" +"Gomb a kistérkép váltásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4540,7 +4693,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a gyors (fast) módra váltáshoz.\n" +"Gomb a gyors mód váltásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4550,7 +4703,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a repülés (fly) módra váltáshoz.\n" +"Gomb a repülés mód váltásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4560,40 +4713,37 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a noclip módra váltáshoz.\n" +"Gomb a noclip mód váltásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for toggling pitch move mode.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a noclip módra váltáshoz.\n" +"Gomb pályamozgás mód váltásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for toggling the camera update. Only used for development\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a kamerafrissítés bekapcsolásához. Csak fejlesztők számára.\n" +"Gomb a kamerafrissítés váltásához. Csak fejlesztők számára.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for toggling the display of chat.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a csevegő megjelenítéséhez.\n" +"Gomb a csevegés megjelenítéséhez.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4603,18 +4753,17 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a hibakeresési infók megjelenítéséhez.\n" +"Gomb a hibakeresési információ megjelenítéséhez.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for toggling the display of fog.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a köd megjelenítésének ki/bekapcsolásához.\n" +"Gomb a köd váltásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4624,18 +4773,17 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a HUD megjelenítéséhez/kikapcsolásához.\n" +"Gomb a HUD váltásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for toggling the display of the large chat console.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a csevegő megjelenítéséhez.\n" +"Gomb a nagy csevegéskonzol megjelenítéséhez.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4652,37 +4800,33 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb a végtelen látóterület bekapcsolásához.\n" +"Gomb a végtelen látóterület váltásához.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key to use view zoom when possible.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Ugrás gombja.\n" +"Gomb a nagyításhoz amikor lehetséges.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "Kick players who sent more than X messages per 10 seconds." msgstr "" -"Rúgja ki azokat a játékosokat, akik 10 másodpercenként több mint X üzenetet " +"Azon játékosok kirúgása, akik 10 másodpercenként több mint X üzenetet " "küldtek." #: src/settings_translation_file.cpp -#, fuzzy msgid "Lake steepness" -msgstr "Flat (lapos) térképgenerátor tó meredekség" +msgstr "Tó meredekség" #: src/settings_translation_file.cpp -#, fuzzy msgid "Lake threshold" -msgstr "Flat (lapos) térképgenerátor tó küszöb" +msgstr "Tó küszöb" #: src/settings_translation_file.cpp msgid "Language" @@ -4694,20 +4838,19 @@ #: src/settings_translation_file.cpp msgid "Large cave maximum number" -msgstr "" +msgstr "Nagy barlangok maximális száma" #: src/settings_translation_file.cpp msgid "Large cave minimum number" -msgstr "" +msgstr "Nagy barlangok minimális száma" #: src/settings_translation_file.cpp msgid "Large cave proportion flooded" -msgstr "" +msgstr "A nagy barlangok egy része elárasztott" #: src/settings_translation_file.cpp -#, fuzzy msgid "Large chat console key" -msgstr "Konzol gomb" +msgstr "Nagy csevegéskonzol gomb" #: src/settings_translation_file.cpp msgid "Leaves style" @@ -4721,10 +4864,10 @@ "- Opaque: disable transparency" msgstr "" "Levelek stílusa:\n" -"- Szép (Fancy): minden oldal látható\n" -"- Egyszerű (Simple): csak a külső oldalak láthatók, if defined " -"special_tiles are used\n" -"- Átlátszatlan (Opaque): átlátszóság kikapcsolása" +"- Szép: minden oldal látható\n" +"- Egyszerű: csak a külső oldalak láthatók, ha meg van határozva a " +"special_tiles használt\n" +"- Átlátszatlan: átlátszóság kikapcsolása" #: src/settings_translation_file.cpp msgid "Left key" @@ -4738,13 +4881,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of liquid waves.\n" "Requires waving liquids to be enabled." msgstr "" -"A \"true\" beállítás engedélyezi a levelek hullámzását.\n" -"A shaderek engedélyezése szükséges hozzá." +"Folyadékhullámok hossza.\n" +"A hullámzó folyadékok engedélyezése szükséges hozzá." #: src/settings_translation_file.cpp #, fuzzy @@ -4760,7 +4902,6 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Level of logging to be written to debug.txt:\n" "- (no logging)\n" @@ -4771,12 +4912,12 @@ "- info\n" "- verbose" msgstr "" -"A Debug. txt fájlba írandó naplózási szint:\n" +"A debug.txt fájlba írandó naplózási szint:\n" "-semmi (nincs naplózás)\n" "-minimális (szint nélküli üzenetek)\n" "-hiba\n" "-figyelmeztetés\n" -"-cselekvés\n" +"-művelet\n" "-információ\n" "-fecsegő" @@ -4805,14 +4946,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4834,12 +4967,11 @@ #: src/settings_translation_file.cpp msgid "Liquid fluidity smoothing" -msgstr "Folyadék folyékonyságának simítása" +msgstr "Folyadék folyásának simítása" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid loop max" -msgstr "Folyadékhullám Max" +msgstr "Folyadékhullámzás maximum" #: src/settings_translation_file.cpp msgid "Liquid queue purge time" @@ -4857,12 +4989,11 @@ #: src/settings_translation_file.cpp msgid "Liquid update tick" -msgstr "" +msgstr "Folyadékfrissítés tick" #: src/settings_translation_file.cpp -#, fuzzy msgid "Load the game profiler" -msgstr "Töltse be a játék profilját" +msgstr "Játék profiler betöltése" #: src/settings_translation_file.cpp msgid "" @@ -4872,9 +5003,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Loading Block Modifiers" -msgstr "Aktív blokk módosító időköze" +msgstr "Blokk módosítók betöltése" #: src/settings_translation_file.cpp #, fuzzy @@ -4882,24 +5012,28 @@ msgstr "A tömlöcök alsó Y határa." #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "A lebegő földek alsó Y határa." + +#: src/settings_translation_file.cpp msgid "Main menu script" -msgstr "Főmenü script" +msgstr "Főmenü szkript" #: src/settings_translation_file.cpp -#, fuzzy msgid "Main menu style" -msgstr "Főmenü script" +msgstr "Főmenü stílusa" #: src/settings_translation_file.cpp msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -"A köd és ég színe függjön a napszaktól (hajnal/naplemente) és a látószögtől." +"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 DirectX work with LuaJIT. Disable if it causes troubles." msgstr "" -"Lehetővé teszi, hogy a DriectX működjön a LuaJIT-tel. Tiltsd le, ha " +"Lehetővé teszi, hogy a DirectX működjön a LuaJIT-tel. Tiltsd le, ha " "problémákat okoz." #: src/settings_translation_file.cpp @@ -4976,10 +5110,20 @@ "Flags starting with \"no\" are used to explicitly disable them." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" +"Térkép generálási jellemzők csak a Flat (lapos) térképgenerátor esetében.\n" +"Esetenkénti tavak és dombok generálása a lapos világba.\n" +"The default flags set in the engine are: none\n" +"The flags string modifies the engine defaults.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with \"no\" are used to explicitly disable them." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5008,99 +5152,80 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Carpathian" -msgstr "Fractal térképgenerátor" +msgstr "Kárpátok térképgenerátor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Carpathian specific flags" -msgstr "Flat (lapos) térképgenerátor domb meredekség" +msgstr "Kárpátok térképgenerátor különleges zászlói" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat" -msgstr "Flat (lapos) térképgenerátor" +msgstr "Lapos térképgenerátor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat specific flags" -msgstr "Flat (lapos) térképgenerátor domb meredekség" +msgstr "Lapos térképgenerátor különleges zászlói" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal" -msgstr "Fractal térképgenerátor" +msgstr "Fraktál térképgenerátor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal specific flags" -msgstr "Flat (lapos) térképgenerátor domb meredekség" +msgstr "Fraktál térképgenerátor domb meredekség" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5" -msgstr "Térkép generátor v5" +msgstr "V5 térképgenerátor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5 specific flags" -msgstr "Flat (lapos) térképgenerátor domb meredekség" +msgstr "Lapos térképgenerátor különleges zászlók" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6" -msgstr "Térkép generátor v6" +msgstr "V6 térképgenerátor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6 specific flags" -msgstr "Flat (lapos) térképgenerátor domb meredekség" +msgstr "V6 térképgenerátor különleges zászlói" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7" -msgstr "Térkép generátor v7" +msgstr "V7 térképgenerátor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7 specific flags" -msgstr "Flat (lapos) térképgenerátor domb meredekség" +msgstr "V7 térképgenerátor különleges zászlói" #: src/settings_translation_file.cpp msgid "Mapgen Valleys" -msgstr "Valleys térképgenerátor" +msgstr "Völgyek térképgenerátor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Valleys specific flags" -msgstr "Flat (lapos) térképgenerátor domb meredekség" +msgstr "Völgyek térképgenerátor különleges zászlói" #: src/settings_translation_file.cpp msgid "Mapgen debug" -msgstr "Térkép generátor hibakereső" - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Mapgen flags" -msgstr "Térképgeneráló zászlók" +msgstr "Térképgenerátor hibakereső" #: src/settings_translation_file.cpp msgid "Mapgen name" -msgstr "Térkép generátor neve" +msgstr "Térképgenerátor neve" #: src/settings_translation_file.cpp msgid "Max block generate distance" msgstr "Max blokk generálási távolság" #: src/settings_translation_file.cpp -#, fuzzy msgid "Max block send distance" -msgstr "Maximális blokkküldési távolság" +msgstr "Max blokk-küldési távolság" #: src/settings_translation_file.cpp msgid "Max liquids processed per step." -msgstr "" +msgstr "Max folyadék feldolgozva lépésenként." #: src/settings_translation_file.cpp msgid "Max. clearobjects extra blocks" @@ -5154,17 +5279,19 @@ msgstr "Maximum blokkok száma, amik sorban állhatnak betöltésre." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Maximum blokkok száma, amik sorban állhatnak generálásra.\n" "Hagyd üresen, hogy automatikusan legyen kiválasztva a megfelelő mennyiség." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Maximum blokkok száma, amik sorban állhatnak egy fájlból való betöltésre.\n" "Hagyd üresen, hogy automatikusan legyen kiválasztva a megfelelő mennyiség." @@ -5194,9 +5321,8 @@ msgstr "Az egy időben csatlakozó játékosok maximális száma." #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum number of recent chat messages to show" -msgstr "Az egy időben csatlakozó játékosok maximális száma." +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." @@ -5261,16 +5387,20 @@ msgstr "Kijelölt objektum kiemelésére használt módszer." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" -msgstr "Minitérkép" +msgstr "Kistérkép" #: src/settings_translation_file.cpp msgid "Minimap key" -msgstr "Minitérkép gomb" +msgstr "Kistérkép gomb" #: src/settings_translation_file.cpp msgid "Minimap scan height" -msgstr "Minitérkép letapogatási magasság" +msgstr "Kistérkép letapogatási magasság" #: src/settings_translation_file.cpp #, fuzzy @@ -5282,9 +5412,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimum texture size" -msgstr "Minimum textúra méret a szűrőknek" +msgstr "Minimum textúra méret" #: src/settings_translation_file.cpp #, fuzzy @@ -5293,11 +5422,11 @@ #: src/settings_translation_file.cpp msgid "Mod channels" -msgstr "" +msgstr "Mod csatornák" #: src/settings_translation_file.cpp msgid "Modifies the size of the hudbar elements." -msgstr "" +msgstr "A hudbar elemméretét módosítja" #: src/settings_translation_file.cpp msgid "Monospace font path" @@ -5305,24 +5434,23 @@ #: src/settings_translation_file.cpp msgid "Monospace font size" -msgstr "Monospace betűtípus méret" +msgstr "Monospace betűméret" #: src/settings_translation_file.cpp msgid "Mountain height noise" -msgstr "" +msgstr "Hegy magasság zaj" #: src/settings_translation_file.cpp msgid "Mountain noise" -msgstr "" +msgstr "Hegy zaj" #: src/settings_translation_file.cpp msgid "Mountain variation noise" -msgstr "" +msgstr "Hegy változékonyság zaj" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mountain zero level" -msgstr "Vízszint" +msgstr "Hegyek legkisebb szintje" #: src/settings_translation_file.cpp msgid "Mouse sensitivity" @@ -5334,7 +5462,7 @@ #: src/settings_translation_file.cpp msgid "Mud noise" -msgstr "" +msgstr "Iszap zaj" #: src/settings_translation_file.cpp msgid "" @@ -5343,13 +5471,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mute key" -msgstr "Használat gomb" +msgstr "Némítás gomb" #: src/settings_translation_file.cpp msgid "Mute sound" -msgstr "hang némitás" +msgstr "Hang némítása" #: src/settings_translation_file.cpp msgid "" @@ -5378,7 +5505,7 @@ #: src/settings_translation_file.cpp msgid "Near plane" -msgstr "" +msgstr "Majdnem mint a repülőgép" #: src/settings_translation_file.cpp msgid "Network" @@ -5400,11 +5527,11 @@ #: src/settings_translation_file.cpp msgid "Noclip key" -msgstr "Noclip gomb" +msgstr "Noclip mód gomb" #: src/settings_translation_file.cpp msgid "Node highlighting" -msgstr "Blokk kiemelés" +msgstr "Node kiemelés" #: src/settings_translation_file.cpp msgid "NodeTimer interval" @@ -5412,7 +5539,7 @@ #: src/settings_translation_file.cpp msgid "Noises" -msgstr "" +msgstr "Zajok" #: src/settings_translation_file.cpp msgid "Normalmaps sampling" @@ -5429,9 +5556,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5456,11 +5580,11 @@ #: src/settings_translation_file.cpp msgid "Online Content Repository" -msgstr "" +msgstr "Online tartalomtár" #: src/settings_translation_file.cpp msgid "Opaque liquids" -msgstr "folyadékok NEM átlátszók" +msgstr "Átlátszatlan folyadékok" #: src/settings_translation_file.cpp msgid "" @@ -5508,10 +5632,6 @@ msgstr "Parallax Occlusion mértéke" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Parallax Occlusion hatás ereje" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5521,8 +5641,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Képernyőmentések mappája." +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 "" @@ -5555,18 +5677,24 @@ 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 "Fizika" #: src/settings_translation_file.cpp -#, fuzzy msgid "Pitch move key" -msgstr "Repülés gomb" +msgstr "Pályamozgás mód gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Pitch move mode" -msgstr "Pályamozgás mód bekapcsolva" +msgstr "Pályamozgás mód" #: src/settings_translation_file.cpp msgid "" @@ -5574,7 +5702,7 @@ "This requires the \"fly\" privilege on the server." msgstr "" "A játékos képes repülni, nem hat rá a gravitáció.\n" -"Szükséges hozzá a repülés jogosultság (fly) a szerveren." +"Szükséges hozzá a repülés jogosultság a szerveren." #: src/settings_translation_file.cpp msgid "Player name" @@ -5586,7 +5714,7 @@ #: src/settings_translation_file.cpp msgid "Player versus player" -msgstr "mindenki ellen (PvP)" +msgstr "Játékos játékos ellen" #: src/settings_translation_file.cpp msgid "" @@ -5605,7 +5733,7 @@ #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." msgstr "" -"Annak megelőzése, hogy a modok nem biztonágos dolgokat futtassanak, pl. " +"Annak megelőzése, hogy a modok nem biztonságos dolgokat futtassanak, pl. " "shell parancsok." #: src/settings_translation_file.cpp @@ -5613,6 +5741,9 @@ "Print the engine's profiling data in regular intervals (in seconds).\n" "0 = disable. Useful for developers." msgstr "" +"A játékmotor profiladatainak kiírása szabályos időközökben (másodpercekben)." +"\n" +"0 a kikapcsoláshoz. Hasznos fejlesztőknek." #: src/settings_translation_file.cpp msgid "Privileges that players with basic_privs can grant" @@ -5620,35 +5751,46 @@ #: src/settings_translation_file.cpp msgid "Profiler" -msgstr "" +msgstr "Profiler" #: src/settings_translation_file.cpp msgid "Profiler toggle key" -msgstr "" +msgstr "Profiler váltó gomb" #: src/settings_translation_file.cpp msgid "Profiling" msgstr "" #: src/settings_translation_file.cpp -msgid "Proportion of large caves that contain liquid." +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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "Nagy barlangok aránya amelyek folyadékot tartalmaznak." + +#: 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 -#, fuzzy msgid "Raises terrain to make valleys around the rivers." -msgstr "Megemeli a terepet, hogy völgyek alakuljanak a folyók körül" +msgstr "Megemeli a terepet, hogy völgyek alakuljanak a folyók körül." #: src/settings_translation_file.cpp msgid "Random input" -msgstr "" +msgstr "Véletlenszerű bemenet" #: src/settings_translation_file.cpp msgid "Range select key" @@ -5656,7 +5798,7 @@ #: src/settings_translation_file.cpp msgid "Recent Chat Messages" -msgstr "" +msgstr "Legutóbbi csevegésüzenetek" #: src/settings_translation_file.cpp #, fuzzy @@ -5676,15 +5818,17 @@ "Remove color codes from incoming chat messages\n" "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 " +"üzeneteikben." #: src/settings_translation_file.cpp msgid "Replaces the default main menu with a custom one." msgstr "Az alapértelmezett főmenüt lecseréli egy másikkal." #: src/settings_translation_file.cpp -#, fuzzy msgid "Report path" -msgstr "Betűtípus helye" +msgstr "Napló útvonala" #: src/settings_translation_file.cpp msgid "" @@ -5722,37 +5866,31 @@ #: src/settings_translation_file.cpp msgid "Rightclick repetition interval" -msgstr "Jobb kattintás ismétlés időköz" +msgstr "Jobb kattintás ismétlési időköz" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel depth" -msgstr "Folyó mélység" +msgstr "Folyómeder mélysége" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel width" -msgstr "Folyó mélység" +msgstr "Folyómeder szélessége" #: src/settings_translation_file.cpp -#, fuzzy msgid "River depth" msgstr "Folyó mélység" #: src/settings_translation_file.cpp -#, fuzzy msgid "River noise" -msgstr "Barlang zaj" +msgstr "Folyó zaj" #: src/settings_translation_file.cpp -#, fuzzy msgid "River size" msgstr "Folyó méret" #: src/settings_translation_file.cpp -#, fuzzy msgid "River valley width" -msgstr "Folyó mélység" +msgstr "Folyóvölgy szélessége" #: src/settings_translation_file.cpp msgid "Rollback recording" @@ -5760,19 +5898,19 @@ #: src/settings_translation_file.cpp msgid "Rolling hill size noise" -msgstr "" +msgstr "Dombok méret zaja" #: src/settings_translation_file.cpp msgid "Rolling hills spread noise" -msgstr "" +msgstr "Dombok kiterjedés zaja" #: src/settings_translation_file.cpp msgid "Round minimap" -msgstr "Kör alakú minitérkép" +msgstr "Kerek kistérkép" #: src/settings_translation_file.cpp msgid "Safe digging and placing" -msgstr "" +msgstr "Biztonságos ásás és elhelyezés" #: src/settings_translation_file.cpp msgid "Sandy beaches occur when np_beach exceeds this value." @@ -5784,14 +5922,13 @@ #: src/settings_translation_file.cpp msgid "Save window size automatically when modified." -msgstr "" +msgstr "Ablakméret automatikus mentése amikor módosítva van." #: src/settings_translation_file.cpp msgid "Saving map received from server" msgstr "A szerverről fogadott térkép mentése" #: 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" @@ -5800,8 +5937,8 @@ "edge pixels when images are scaled by non-integer sizes." msgstr "" "A felhasználói felület méretezése egy meghatározott értékkel.\n" -"A legközelebbi szomszédos anti-alias szűrőt használja a GUI méretezésére.\n" -"Ez elsimít néhány durva élt, és elhajlít pixeleket a méretezés " +"A legközelebbi-szomszéd-élsimítás szűrőt használja a GUI méretezésére.\n" +"Ez elsimít néhány durva élt, és elhajlítja a pixeleket a méretezés " "csökkentésekor,\n" "de ennek az az ára, hogy elhomályosít néhány szélső pixelt, ha a képek nem\n" "egész számok alapján vannak méretezve." @@ -5838,7 +5975,7 @@ #: src/settings_translation_file.cpp msgid "Seabed noise" -msgstr "" +msgstr "Folyómeder zaj" #: src/settings_translation_file.cpp msgid "Second of 4 2D noises that together define hill/mountain range height." @@ -5867,7 +6004,7 @@ #: src/settings_translation_file.cpp msgid "Selection box width" -msgstr "Kijelölő doboz szélesség" +msgstr "Kijelölő doboz szélessége" #: src/settings_translation_file.cpp #, fuzzy @@ -5930,7 +6067,7 @@ #: src/settings_translation_file.cpp msgid "Server name" -msgstr "Szerver neve" +msgstr "Szerver név" #: src/settings_translation_file.cpp msgid "Server port" @@ -5958,79 +6095,73 @@ #: src/settings_translation_file.cpp msgid "Set the maximum character length of a chat message sent by clients." -msgstr "" +msgstr "A csevegés maximális szöveghossza amelyet a kliensek küldhetnek." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving leaves.\n" "Requires shaders to be enabled." msgstr "" "A \"true\" beállítás engedélyezi a levelek hullámzását.\n" -"A shaderek engedélyezése szükséges hozzá." +"Az árnyalók engedélyezése szükséges hozzá." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving liquids (like water).\n" "Requires shaders to be enabled." msgstr "" "A \"true\" beállítás engedélyezi a víz hullámzását.\n" -"A shaderek engedélyezése szükséges hozzá." +"Az árnyalók engedélyezése szükséges hozzá." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving plants.\n" "Requires shaders to be enabled." msgstr "" "A \"true\" beállítás engedélyezi a növények hullámzását.\n" -"A shaderek engedélyezése szükséges hozzá." +"Az árnyalók engedélyezése szükséges hozzá." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shader path" -msgstr "Shaderek" +msgstr "Árnyaló útvonala" #: 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." msgstr "" -"A shaderek fejlett vizuális effekteket engedélyeznek és növelhetik a " +"Az árnyalók fejlett vizuális effekteket engedélyeznek és növelhetik a " "teljesítményt néhány videókártya esetében.\n" "Csak OpenGL-el működnek." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the default font. If 0, then shadow will not be " "drawn." -msgstr "Betűtípus árnyék eltolás, ha 0, akkor nem lesz árnyék rajzolva." +msgstr "Betűtípus árnyékának eltolása. Ha 0, akkor nem lesz árnyék rajzolva." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the fallback font. If 0, then shadow will not " "be drawn." -msgstr "Betűtípus árnyék eltolás, ha 0, akkor nem lesz árnyék rajzolva." +msgstr "" +"Tartalék betűtípus árnyékának eltolása. Ha 0, akkor nem lesz árnyék rajzolva." #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." msgstr "" -"A minitérkép alakja. Engedélyezve (enabled) = kerek, letiltva (disabled) = " +"A kistérkép alakja. Engedélyezve (enabled) = kerek, letiltva (disabled) = " "négyzet." #: src/settings_translation_file.cpp msgid "Show debug info" -msgstr "Hibakereső infó mutatása" +msgstr "Hibakereső információ megjelenítése" #: src/settings_translation_file.cpp msgid "Show entity selection boxes" -msgstr "Entitások kijelölő dobozának mutatása" +msgstr "Entitások kijelölő dobozának megjelenítése" #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -6059,15 +6190,15 @@ #: src/settings_translation_file.cpp msgid "Slope and fill work together to modify the heights." -msgstr "" +msgstr "A lejtés és a kitöltés együtt módosítja a magasságot." #: src/settings_translation_file.cpp msgid "Small cave maximum number" -msgstr "" +msgstr "Kis barlangok maximális száma" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "" +msgstr "Kis barlangok minimális száma" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." @@ -6088,12 +6219,11 @@ "Useful for recording videos." msgstr "" "Kamera mozgásának simítása mozgáskor és körbenézéskor.\n" -"Videofelvételekhez hasznos." +"Videófelvételekhez hasznos." #: src/settings_translation_file.cpp msgid "Smooths rotation of camera in cinematic mode. 0 to disable." -msgstr "" -"A kamera forgását simítja a cinematic (filmkészítés) módban. 0 = letiltás." +msgstr "A kamera forgását simítja filmszerű módban. 0 a letiltáshoz." #: src/settings_translation_file.cpp msgid "Smooths rotation of camera. 0 to disable." @@ -6104,27 +6234,24 @@ msgstr "Lopakodás gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Sneaking speed" -msgstr "Járás sebessége" +msgstr "Lopakodás sebessége" #: src/settings_translation_file.cpp msgid "Sneaking speed, in nodes per second." -msgstr "" +msgstr "Lopakodás sebessége node/másodpercben" #: src/settings_translation_file.cpp msgid "Sound" msgstr "Hang" #: src/settings_translation_file.cpp -#, fuzzy msgid "Special key" -msgstr "Lopakodás gomb" +msgstr "Különleges gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Special key for climbing/descending" -msgstr "Gomb használat a mászás/ereszkedéshez" +msgstr "Különleges gomb a mászáshoz/ereszkedéshez" #: src/settings_translation_file.cpp msgid "" @@ -6136,6 +6263,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -6143,11 +6277,11 @@ #: src/settings_translation_file.cpp msgid "Static spawnpoint" -msgstr "Statikus feléledési (spawn) pont" +msgstr "Statikus újraéledési pont" #: src/settings_translation_file.cpp msgid "Steepness noise" -msgstr "" +msgstr "Meredekség zaj" #: src/settings_translation_file.cpp #, fuzzy @@ -6159,6 +6293,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "Generált normálfelületek erőssége." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Generált normálfelületek erőssége." @@ -6170,15 +6309,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -6187,17 +6336,15 @@ #: src/settings_translation_file.cpp msgid "Temperature variation for biomes." -msgstr "" +msgstr "Hőmérséklet-változékonyság a biomokban." #: src/settings_translation_file.cpp -#, fuzzy msgid "Terrain alternative noise" -msgstr "Terep magasság" +msgstr "Terep alternatív zaj" #: src/settings_translation_file.cpp -#, fuzzy msgid "Terrain base noise" -msgstr "Terep magasság" +msgstr "Terep alapzaj" #: src/settings_translation_file.cpp #, fuzzy @@ -6205,14 +6352,12 @@ msgstr "Terep magasság" #: src/settings_translation_file.cpp -#, fuzzy msgid "Terrain higher noise" -msgstr "Terep magasság" +msgstr "Terep legmagasabb zaj" #: src/settings_translation_file.cpp -#, fuzzy msgid "Terrain noise" -msgstr "Terep magasság" +msgstr "Terepzaj" #: src/settings_translation_file.cpp msgid "" @@ -6248,7 +6393,7 @@ #: src/settings_translation_file.cpp msgid "The URL for the content repository" -msgstr "" +msgstr "Az URL a tartalomtárhoz" #: src/settings_translation_file.cpp msgid "" @@ -6267,7 +6412,7 @@ #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" -msgstr "" +msgstr "A használni kívánt joystick azonosítója" #: src/settings_translation_file.cpp msgid "The length in pixels it takes for touch screen interaction to start." @@ -6303,7 +6448,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6358,7 +6503,7 @@ #: src/settings_translation_file.cpp msgid "The type of joystick" -msgstr "" +msgstr "A joystick típusa" #: src/settings_translation_file.cpp msgid "" @@ -6402,9 +6547,9 @@ "This determines how long they are slowed down after placing or removing a " "node." msgstr "" -"A lag (késés) csökkentéséért a blokkok lerakása le van lassítva, ha a " +"A lag (késés) csökkentéséért a node-ok lerakása le van lassítva, ha a " "játékos épít valamit.\n" -"Ez azt határozza meg, hogy mennyire van lelassítva blokkok elhelyezésekor, " +"Ez azt határozza meg, hogy mennyire van lelassítva node-ok elhelyezésekor, " "vagy eltávolításakor." #: src/settings_translation_file.cpp @@ -6416,17 +6561,16 @@ msgstr "Eszköztipp késleltetés" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touch screen threshold" -msgstr "Tengerpart zaj határa" +msgstr "Érintőképernyő küszöbe" #: src/settings_translation_file.cpp msgid "Trees noise" -msgstr "" +msgstr "Fa zaj" #: src/settings_translation_file.cpp msgid "Trilinear filtering" -msgstr "Tri-lineáris szűrés" +msgstr "Trilineáris szűrés" #: src/settings_translation_file.cpp #, fuzzy @@ -6462,8 +6606,9 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "Unlimited player transfer distance" -msgstr "" +msgstr "Korlátlan játékosátviteli távolság" #: src/settings_translation_file.cpp msgid "Unload unused server data" @@ -6471,11 +6616,16 @@ #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." -msgstr "" +msgstr "A tömlöcök felső Y határa." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "A tömlöcök felső Y határa." #: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." -msgstr "3D felhő kinézet használata lapos helyett." +msgstr "3D felhők használata lapos helyett." #: src/settings_translation_file.cpp msgid "Use a cloud animation for the main menu background." @@ -6483,7 +6633,7 @@ #: src/settings_translation_file.cpp msgid "Use anisotropic filtering when viewing at textures from an angle." -msgstr "Anizotropikus 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 egy szögből nézzük a textúrákat." #: src/settings_translation_file.cpp msgid "Use bilinear filtering when scaling textures." @@ -6506,7 +6656,7 @@ #: src/settings_translation_file.cpp msgid "VSync" -msgstr "" +msgstr "Függőleges szinkron" #: src/settings_translation_file.cpp #, fuzzy @@ -6514,9 +6664,8 @@ msgstr "Völgyek mélysége" #: src/settings_translation_file.cpp -#, fuzzy msgid "Valley fill" -msgstr "Völgyek meredeksége" +msgstr "Völgyek kitöltése" #: src/settings_translation_file.cpp #, fuzzy @@ -6530,7 +6679,7 @@ #: src/settings_translation_file.cpp msgid "Variation of biome filler depth." -msgstr "" +msgstr "A biom töltőanyag mélységének változékonysága." #: src/settings_translation_file.cpp msgid "Variation of maximum mountain height (in nodes)." @@ -6538,7 +6687,7 @@ #: src/settings_translation_file.cpp msgid "Variation of number of caves." -msgstr "" +msgstr "A barlangok számának változása." #: src/settings_translation_file.cpp msgid "" @@ -6557,13 +6706,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Varies steepness of cliffs." -msgstr "A dombok meredekségét/magasságát állítja." +msgstr "A szirtek meredekségét állítja." #: src/settings_translation_file.cpp msgid "Vertical climbing speed, in nodes per second." -msgstr "" +msgstr "Függőleges mászási sebesség node/másodpercben." #: src/settings_translation_file.cpp msgid "Vertical screen synchronization." @@ -6578,23 +6726,20 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "View distance in nodes." -msgstr "" -"Látótávolság blokkokban megadva.\n" -"Min = 20" +msgstr "Látótávolság node-okban megadva." #: src/settings_translation_file.cpp msgid "View range decrease key" -msgstr "Látóterület csökkentés gomb" +msgstr "Látóterület csökkentése gomb" #: src/settings_translation_file.cpp msgid "View range increase key" -msgstr "Látóterület növelés gomb" +msgstr "Látóterület növelése gomb" #: src/settings_translation_file.cpp msgid "View zoom key" -msgstr "" +msgstr "Nagyítás gomb" #: src/settings_translation_file.cpp msgid "Viewing range" @@ -6628,15 +6773,15 @@ #: src/settings_translation_file.cpp msgid "Walking and flying speed, in nodes per second." -msgstr "" +msgstr "Sétálás, repülés és mászás sebessége gyors módban node/másodpercben." #: src/settings_translation_file.cpp msgid "Walking speed" -msgstr "Járás sebessége" +msgstr "Sétálás sebessége" #: src/settings_translation_file.cpp msgid "Walking, flying and climbing speed in fast mode, in nodes per second." -msgstr "" +msgstr "Sétálás, repülés és mászás sebessége gyors módban node/másodpercben." #: src/settings_translation_file.cpp msgid "Water level" @@ -6648,31 +6793,27 @@ #: src/settings_translation_file.cpp msgid "Waving Nodes" -msgstr "Hullámzó blokkok" +msgstr "Hullámzó node-ok" #: src/settings_translation_file.cpp msgid "Waving leaves" msgstr "Hullámzó levelek" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids" msgstr "Hullámzó folyadékok" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wave height" -msgstr "Hullámzó víz magassága" +msgstr "Hullámzó folyadékok hullámmagassága" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wave speed" -msgstr "Hullámzó víz sebessége" +msgstr "Hullámzó folyadékok hullámsebessége" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wavelength" -msgstr "Hullámzó víz szélessége" +msgstr "Hullámzó folyadékok hullámhossza" #: src/settings_translation_file.cpp msgid "Waving plants" @@ -6728,7 +6869,7 @@ #: src/settings_translation_file.cpp msgid "Whether to allow players to damage and kill each other." -msgstr "Engedélyezve van-e, hogy a játékosok sebezzék, ill. megöljék egymást." +msgstr "Engedélyezve van-e, hogy a játékosok sebezzék és megöljék egymást." #: src/settings_translation_file.cpp msgid "" @@ -6753,16 +6894,16 @@ #: src/settings_translation_file.cpp msgid "" "Whether to show the client debug info (has the same effect as hitting F5)." -msgstr "A hibakereső infó mutatása (ugyanaz a hatás, ha F5-öt nyomunk)." +msgstr "" +"A hibakereső információ megjelenítése (ugyanaz a hatás, ha F5-öt nyomunk)." #: src/settings_translation_file.cpp msgid "Width component of the initial window size." -msgstr "Kezdeti ablak méret szélessége." +msgstr "Kezdeti ablak szélessége." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width of the selection box lines around nodes." -msgstr "A kijelölődoboz vonalainak szélessége a blokkok körül." +msgstr "A kijelölésdoboz vonalainak szélessége a node-ok körül." #: src/settings_translation_file.cpp msgid "" @@ -6770,19 +6911,22 @@ "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" +"Csak Windows rendszeren: Minetest indítása parancssorral a háttérben.\n" +"Ugyanazokat az információkat tartalmazza, mint a debug.txt fájl (" +"alapértelmezett név)." #: 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 "" -"Világ (world) mappa (minden itt tárolódik ami a világban van).\n" -"Ez nem szükséges, ha a főmenüből indítunk." +"Világ mappája (minden itt tárolódik ami a világban van).\n" +"Ez nem szükséges, ha a főmenüből indítják." #: src/settings_translation_file.cpp #, fuzzy msgid "World start time" -msgstr "Világ neve" +msgstr "Világ-kezdőidő" #: src/settings_translation_file.cpp msgid "" @@ -6800,7 +6944,7 @@ #: src/settings_translation_file.cpp msgid "Y of flat ground." -msgstr "" +msgstr "Lapos föld Y magassága." #: src/settings_translation_file.cpp msgid "" @@ -6809,37 +6953,44 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Y of upper limit of large caves." -msgstr "A világgeneráló szálak számának abszolút határa" +msgstr "Nagy barlangok felső Y határa." #: src/settings_translation_file.cpp msgid "Y-distance over which caverns expand to full size." +msgstr "Y-távolság, amelyen az üregek teljes méretre kinyúlnak." + +#: 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 "" +msgstr "A terep átlagos Y szintje." #: src/settings_translation_file.cpp msgid "Y-level of cavern upper limit." -msgstr "" +msgstr "Az üregek felső Y határa." #: src/settings_translation_file.cpp msgid "Y-level of higher terrain that creates cliffs." -msgstr "" +msgstr "Magas terep Y szintje amely szirteket hoz létre." #: src/settings_translation_file.cpp msgid "Y-level of lower terrain and seabed." -msgstr "" +msgstr "Alacsony terep és tengerfenék Y szintje." #: src/settings_translation_file.cpp msgid "Y-level of seabed." -msgstr "" +msgstr "Tengerfenék Y szintje." #: src/settings_translation_file.cpp msgid "cURL file download timeout" -msgstr "cURL fájlletöltés időkorlátja" +msgstr "cURL fájlletöltés időkorlát" #: src/settings_translation_file.cpp msgid "cURL parallel limit" @@ -6847,100 +6998,101 @@ #: src/settings_translation_file.cpp msgid "cURL timeout" -msgstr "cURL időkorlátja" +msgstr "cURL időkorlát" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Gamma kódolás beállítása a fényhez. Alacsonyabb számok - nagyobb " -#~ "fényerő.\n" -#~ "Ez a beállítás csak a kliensre érvényes, a szerver nem veszi figyelembe." +#~ msgid "Toggle Cinematic" +#~ msgstr "Váltás „mozi” módba" -#, fuzzy -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "A lebegő szigetek hegységeinek sűrűségét szabályozza.\n" -#~ "Az \"np_mountain\" zaj értékéhez hozzáadott eltolás." +#~ msgid "Select Package File:" +#~ msgstr "csomag fájl kiválasztása:" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "A járatok szélességét határozza meg, alacsonyabb érték szélesebb " -#~ "járatokat hoz létre." +#~ msgid "Waving Water" +#~ msgstr "Hullámzó víz" -#~ msgid "Darkness sharpness" -#~ msgstr "a sötétség élessége" +#~ msgid "Waving water" +#~ msgstr "Hullámzó víz" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." -#~ msgstr "" -#~ "A lebegő szigetek sima területeit határozza meg.\n" -#~ "Lapos szigetek ott fordulnak elő, ahol a zaj értéke pozitív." +#~ msgid "This font will be used for certain languages." +#~ msgstr "Ezt a betűtípust bizonyos nyelvek használják." -#~ msgid "Enable VBO" -#~ msgstr "VBO engedélyez" +#, fuzzy +#~ msgid "Shadow limit" +#~ msgstr "Térképblokk korlát" -#~ msgid "Enables filmic tone mapping" -#~ msgstr "filmes tónus effektek bekapcsolása" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "A TrueType betűtípus (ttf) vagy bitmap útvonala." #, fuzzy -#~ msgid "Floatland base height noise" -#~ msgstr "A lebegő hegyek alapmagassága" +#~ msgid "Lightness sharpness" +#~ msgstr "Fényélesség" #, fuzzy -#~ msgid "Floatland base noise" -#~ msgstr "A lebegő hegyek alapzaja" +#~ msgid "Lava depth" +#~ msgstr "Nagy barlang mélység" -#~ msgid "Floatland level" -#~ msgstr "Lebegő föld szintje" +#~ msgid "IPv6 support." +#~ msgstr "IPv6 támogatás." -#, fuzzy -#~ msgid "Floatland mountain density" -#~ msgstr "Lebegő hegyek sűrűsége" +#~ msgid "Gamma" +#~ msgstr "Gamma" + +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "Betűtípus árnyék alfa (átlátszatlanság, 0 és 255 között)." #, fuzzy #~ msgid "Floatland mountain height" #~ msgstr "Lebegő hegyek magassága" -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "Betűtípus árnyék alfa (átlátszatlanság, 0 és 255 között)." +#, fuzzy +#~ msgid "Floatland base height noise" +#~ msgstr "A lebegő hegyek alapmagassága" -#~ msgid "Gamma" -#~ msgstr "Gamma" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "filmes tónus effektek bekapcsolása" -#~ msgid "IPv6 support." -#~ msgstr "IPv6 támogatás." +#~ msgid "Enable VBO" +#~ msgstr "VBO engedélyez" -#, fuzzy -#~ msgid "Lava depth" -#~ msgstr "Nagy barlang mélység" +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "A lebegő szigetek sima területeit határozza meg.\n" +#~ "Lapos szigetek ott fordulnak elő, ahol a zaj értéke pozitív." -#, fuzzy -#~ msgid "Lightness sharpness" -#~ msgstr "Fényélesség" +#~ msgid "Darkness sharpness" +#~ msgstr "a sötétség élessége" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "A TrueType betűtípus (ttf) vagy bitmap útvonala." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "" +#~ "A járatok szélességét határozza meg, alacsonyabb érték szélesebb " +#~ "járatokat hoz létre." #, fuzzy -#~ msgid "Shadow limit" -#~ msgstr "Térképblokk korlát" +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "A lebegő szigetek hegységeinek sűrűségét szabályozza.\n" +#~ "Az \"np_mountain\" zaj értékéhez hozzáadott eltolás." -#~ msgid "This font will be used for certain languages." -#~ msgstr "Ezt a betűtípust bizonyos nyelvek használják." +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Gamma kódolás beállítása a fényhez. Alacsonyabb számok - nagyobb " +#~ "fényerő.\n" +#~ "Ez a beállítás csak a kliensre érvényes, a szerver nem veszi figyelembe." -#~ msgid "Waving water" -#~ msgstr "Hullámzó víz" +#~ msgid "Path to save screenshots at." +#~ msgstr "Képernyőmentések mappája." -#~ msgid "Waving Water" -#~ msgstr "Hullámzó víz" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "$1 letöltése és telepítése, kérlek várj…" -#~ msgid "Select Package File:" -#~ msgstr "csomag fájl kiválasztása:" +#~ msgid "Back" +#~ msgstr "Vissza" -#~ msgid "Toggle Cinematic" -#~ msgstr "Váltás „mozi” módba" +#~ msgid "Ok" +#~ msgstr "Ok" diff -Nru minetest-5.2.0/po/id/minetest.po minetest-5.3.0/po/id/minetest.po --- minetest-5.2.0/po/id/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/id/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,10 @@ msgstr "" "Project-Id-Version: Indonesian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-04-03 20:24+0000\n" -"Last-Translator: Allan Nordhøy \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-25 16:39+0000\n" +"Last-Translator: Muhammad Rifqi Priyo Susanto " +"\n" "Language-Team: Indonesian \n" "Language: id\n" @@ -12,7 +13,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,9 +23,13 @@ msgid "You died" msgstr "Anda mati" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "Oke" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" -msgstr "Kesalahan terjadi pada suatu skrip Lua:" +msgstr "Suatu galat terjadi pada suatu skrip Lua:" #: builtin/fstk/ui.lua msgid "An error occurred:" @@ -35,10 +40,6 @@ msgstr "Menu utama" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Oke" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Sambung ulang" @@ -87,7 +88,7 @@ #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" -msgstr "Bergantung pada:" +msgstr "Dependensi:" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" @@ -114,32 +115,36 @@ "karakter [a-z0-9_] yang dibolehkan." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Cari Mod Lainnya" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" #: builtin/mainmenu/dlg_config_world.lua msgid "No (optional) dependencies" -msgstr "Tidak ada dependensi (opsional)" +msgstr "Tiada dependensi (opsional)" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." -msgstr "Tidak ada penjelasan permainan yang tersedia." +msgstr "Tiada keterangan permainan yang tersedia." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" -msgstr "Tidak ada dependensi yang sulit (keterkaitan dengan mod lain)" +msgstr "Tiada dependensi wajib" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "Tidak ada penjelasan paket mod yang tersedia." +msgstr "Tiada keterangan paket mod yang tersedia." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" -msgstr "Tidak ada dependensi opsional" +msgstr "Tiada dependensi opsional" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" -msgstr "Tidak harus bergantung pada:" +msgstr "Dependensi opsional:" #: builtin/mainmenu/dlg_config_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp @@ -152,23 +157,23 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "enabled" -msgstr "diaktifkan" +msgstr "dinyalakan" #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Semua paket" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Kembali" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Kembali ke menu utama" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Mengunduh dan memasang $1, mohon tunggu..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB tidak tersedia ketika Minetest tidak dikompilasi dengan cURL" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "Mengunduh..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -190,11 +195,11 @@ #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "Tidak ada paket yang dapat diambil" +msgstr "Tiada paket yang dapat diambil" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" -msgstr "Tidak ada hasil" +msgstr "Tiada hasil" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua @@ -213,33 +218,145 @@ msgid "Update" msgstr "Perbarui" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Tinjau" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Dunia yang bernama \"$1\" telah ada" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "Medan tambahan" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "Dingin di ketinggian" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "Kering di ketinggian" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Pemaduan bioma" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Bioma" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Gua besar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Gua" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Buat" #: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Dekorasi" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" -msgstr "Unduh sebuah permainan, misalnya Minetest Game, dari minetest.net" +msgstr "Unduh suatu permainan, misalnya Minetest Game, dari minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" msgstr "Unduh satu dari minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Dungeon" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Medan datar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Tanah mengambang di langit" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Floatland (uji coba)" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Permainan" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Buat medan nonfraktal: Samudra dan bawah tanah" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Bukit" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Sungai lembap" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Tambah kelembapan di sekitar sungai" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Danau" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "Kelembapan rendah dan suhu tinggi membuat sungai dangkal atau kering" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" msgstr "Pembuat peta" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Flag pembuat peta" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Flag khusus pembuat peta" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Pegunungan" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Aliran tanah" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Jaringan terowongan dan gua" + #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" -msgstr "Tidak ada permainan yang dipilih" +msgstr "Tiada permainan yang dipilih" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "Mengurangi suhu di ketinggian" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "Mengurangi kelembapan di ketinggian" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Sungai" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Sungai setinggi permukaan laut" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -247,8 +364,52 @@ msgstr "Seed" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." -msgstr "Peringatan: Minimal development test ditujukan untuk pengembang." +msgid "Smooth transition between biomes" +msgstr "Pergantian halus antarbioma" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" +"Struktur muncul pada permukaan (tidak berdampak pada pohon dan rumput hutan " +"rimba yang dibuat oleh v6)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "Struktur muncul pada permukaan, biasanya pohon dan tanaman" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Iklim Sedang, Gurun" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Iklim Sedang, Gurun, Hutan Rimba" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Iklim Sedang, Gurun, Hutan Rimba, Tundra, Taiga" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "Erosi permukaan medan" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Pohon dan rumput hutan rimba" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Variasi kedalaman sungai" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Gua sangat besar di kedalaman bawah tanah" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." +msgstr "Peringatan: Development Test ditujukan untuk para pengembang." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -270,7 +431,7 @@ #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: failed to delete \"$1\"" -msgstr "pkgmgr: gagal untuk menghapus \"$1\"" +msgstr "pkgmgr: gagal menghapus \"$1\"" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" @@ -294,11 +455,11 @@ "override any renaming here." msgstr "" "Paket mod ini memiliki nama tersurat yang diberikan dalam modpack.conf yang " -"akan menimpa penamaan ulang yang ada." +"akan menimpa penggantian nama yang ada." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" -msgstr "(Tidak ada keterangan pengaturan yang diberikan)" +msgstr "(Tiada keterangan pengaturan yang diberikan)" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "2D Noise" @@ -322,15 +483,15 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Enabled" -msgstr "Diaktifkan" +msgstr "Dinyalakan" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Lacunarity" -msgstr "Lacunarity (celah)" +msgstr "Lakuna (celah)" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Octaves" -msgstr "Oktav" +msgstr "Oktaf" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" @@ -406,7 +567,7 @@ #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "absvalue" -msgstr "Nilai mutlak" +msgstr "nilai mutlak" #. ~ "defaults" is a noise parameter flag. #. It describes the default processing options @@ -433,7 +594,7 @@ #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" -msgstr "Gagal untuk memasang $1 ke $2" +msgstr "Gagal memasang $1 ke $2" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" @@ -499,7 +660,7 @@ #: builtin/mainmenu/tab_content.lua msgid "No package description available" -msgstr "Tidak ada penjelasan paket tersedia" +msgstr "Tiada keterangan paket tersedia" #: builtin/mainmenu/tab_content.lua msgid "Rename" @@ -551,19 +712,23 @@ #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua msgid "Enable Damage" -msgstr "Nyalakan kerusakan" +msgstr "Nyalakan Kerusakan" #: builtin/mainmenu/tab_local.lua msgid "Host Game" -msgstr "Host permainan" +msgstr "Host Permainan" #: builtin/mainmenu/tab_local.lua msgid "Host Server" -msgstr "Host peladen" +msgstr "Host Server" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Pasang permainan dari ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Name/Password" -msgstr "Nama/Kata sandi" +msgstr "Nama/Kata Sandi" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -571,11 +736,11 @@ #: builtin/mainmenu/tab_local.lua msgid "No world created or selected!" -msgstr "Tidak ada dunia yang dibuat atau dipilih!" +msgstr "Tiada dunia yang dibuat atau dipilih!" #: builtin/mainmenu/tab_local.lua msgid "Play Game" -msgstr "Mainkan permainan" +msgstr "Mainkan Permainan" #: builtin/mainmenu/tab_local.lua msgid "Port" @@ -583,7 +748,7 @@ #: builtin/mainmenu/tab_local.lua msgid "Select World:" -msgstr "Pilih dunia:" +msgstr "Pilih Dunia:" #: builtin/mainmenu/tab_local.lua msgid "Server Port" @@ -591,7 +756,7 @@ #: builtin/mainmenu/tab_local.lua msgid "Start Game" -msgstr "Mulai permainan" +msgstr "Mulai Permainan" #: builtin/mainmenu/tab_online.lua msgid "Address / Port" @@ -619,11 +784,11 @@ #: builtin/mainmenu/tab_online.lua msgid "Join Game" -msgstr "Gabung permainan" +msgstr "Gabung Permainan" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Name / Password" -msgstr "Nama/Kata sandi" +msgstr "Nama/Kata Sandi" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Ping" @@ -652,7 +817,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "All Settings" -msgstr "Semua pengaturan" +msgstr "Semua Pengaturan" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" @@ -664,31 +829,31 @@ #: builtin/mainmenu/tab_settings.lua msgid "Autosave Screen Size" -msgstr "Autosimpan Ukuran Layar" +msgstr "Simpan Ukuran Layar" #: builtin/mainmenu/tab_settings.lua msgid "Bilinear Filter" -msgstr "Filter bilinear" +msgstr "Filter Bilinear" #: builtin/mainmenu/tab_settings.lua msgid "Bump Mapping" -msgstr "Bump mapping" +msgstr "Bump Mapping" #: builtin/mainmenu/tab_settings.lua src/client/game.cpp msgid "Change Keys" -msgstr "Ubah tombol" +msgstr "Ubah Tombol" #: builtin/mainmenu/tab_settings.lua msgid "Connected Glass" -msgstr "Kaca tersambung" +msgstr "Kaca Tersambung" #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" -msgstr "Daun megah" +msgstr "Daun Megah" #: builtin/mainmenu/tab_settings.lua msgid "Generate Normal Maps" -msgstr "Buat normal maps" +msgstr "Buat Normal Maps" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -696,7 +861,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Mipmap + Aniso. Filter" -msgstr "Filter aniso. + Mipmap" +msgstr "Filter Aniso. + Mipmap" #: builtin/mainmenu/tab_settings.lua msgid "No" @@ -704,19 +869,19 @@ #: builtin/mainmenu/tab_settings.lua msgid "No Filter" -msgstr "Tanpa filter" +msgstr "Tanpa Filter" #: builtin/mainmenu/tab_settings.lua msgid "No Mipmap" -msgstr "Tanpa mipmap" +msgstr "Tanpa Mipmap" #: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" -msgstr "Sorot Node" +msgstr "Sorot Nodus" #: builtin/mainmenu/tab_settings.lua msgid "Node Outlining" -msgstr "Garis bentuk nodus" +msgstr "Garis Bentuk Nodus" #: builtin/mainmenu/tab_settings.lua msgid "None" @@ -724,11 +889,11 @@ #: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" -msgstr "Daun opak" +msgstr "Daun Opak" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Water" -msgstr "Air opak" +msgstr "Air Opak" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Parallax Occlusion" @@ -760,7 +925,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" -msgstr "Daun sederhana" +msgstr "Daun Sederhana" #: builtin/mainmenu/tab_settings.lua msgid "Smooth Lighting" @@ -776,15 +941,15 @@ #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" -msgstr "Tone mapping" +msgstr "Tone Mapping" #: builtin/mainmenu/tab_settings.lua msgid "Touchthreshold: (px)" -msgstr "Batas sentuhan: (px)" +msgstr "Batas Sentuhan: (px)" #: builtin/mainmenu/tab_settings.lua msgid "Trilinear Filter" -msgstr "Filter trilinear" +msgstr "Filter Trilinear" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -792,7 +957,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Waving Liquids" -msgstr "Laimbaian Cairan" +msgstr "Air Berombak" #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" @@ -812,7 +977,7 @@ #: builtin/mainmenu/tab_simple_main.lua msgid "Start Singleplayer" -msgstr "Mulai pemain tunggal" +msgstr "Mulai Pemain Tunggal" #: src/client/client.cpp msgid "Connection timed out." @@ -856,7 +1021,7 @@ #: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." -msgstr "Tidak ada dunia yang dipilih dan tidak ada alamat yang diberikan." +msgstr "Tiada dunia yang dipilih dan tiada alamat yang diberikan." #: src/client/clientlauncher.cpp msgid "Player name too long." @@ -900,7 +1065,7 @@ #: src/client/game.cpp msgid "- Creative Mode: " -msgstr "- Mode kreatif: " +msgstr "- Mode Kreatif: " #: src/client/game.cpp msgid "- Damage: " @@ -925,7 +1090,7 @@ #: src/client/game.cpp msgid "- Server Name: " -msgstr "- Nama peladen: " +msgstr "- Nama Server: " #: src/client/game.cpp msgid "Automatic forward disabled" @@ -961,7 +1126,7 @@ #: src/client/game.cpp msgid "Connecting to server..." -msgstr "Menyambung ke peladen..." +msgstr "Menyambung ke server..." #: src/client/game.cpp msgid "Continue" @@ -1006,7 +1171,7 @@ #: src/client/game.cpp msgid "Creating server..." -msgstr "Membuat peladen..." +msgstr "Membuat server..." #: src/client/game.cpp msgid "Debug info and profiler graph hidden" @@ -1058,11 +1223,11 @@ #: src/client/game.cpp msgid "Exit to Menu" -msgstr "Menu utama" +msgstr "Menu Utama" #: src/client/game.cpp msgid "Exit to OS" -msgstr "Tutup aplikasi" +msgstr "Tutup Aplikasi" #: src/client/game.cpp msgid "Fast mode disabled" @@ -1074,7 +1239,7 @@ #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "Mode cepat dinyalakan (catatan: tanpa izin \"fast\")" +msgstr "Mode cepat dinyalakan (catatan: tanpa hak \"fast\")" #: src/client/game.cpp msgid "Fly mode disabled" @@ -1086,7 +1251,7 @@ #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "Mode terbang dinyalakan (catatan: tanpa izin \"fly\")" +msgstr "Mode terbang dinyalakan (catatan: tanpa hak \"fly\")" #: src/client/game.cpp msgid "Fog disabled" @@ -1106,7 +1271,7 @@ #: src/client/game.cpp msgid "Hosting server" -msgstr "Membuat peladen" +msgstr "Membuat server" #: src/client/game.cpp msgid "Item definitions..." @@ -1166,7 +1331,7 @@ #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "Mode tembus blok dinyalakan (catatan: tanpa izin \"noclip\")" +msgstr "Mode tembus blok dinyalakan (catatan: tanpa hak \"noclip\")" #: src/client/game.cpp msgid "Node definitions..." @@ -1194,7 +1359,7 @@ #: src/client/game.cpp msgid "Remote server" -msgstr "Peladen jarak jauh" +msgstr "Server jarak jauh" #: src/client/game.cpp msgid "Resolving address..." @@ -1210,13 +1375,21 @@ #: src/client/game.cpp msgid "Sound Volume" -msgstr "Volume suara" +msgstr "Volume Suara" #: src/client/game.cpp msgid "Sound muted" msgstr "Suara dibisukan" #: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "Sistem suara dimatikan" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "Sistem suara tidak didukung dalam buatan ini" + +#: src/client/game.cpp msgid "Sound unmuted" msgstr "Suara dibunyikan" @@ -1248,7 +1421,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "Zum sedang dilarang oleh permainan atau mod" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "oke" @@ -1546,10 +1719,10 @@ #: src/gui/guiConfirmRegistration.cpp msgid "Register and Join" -msgstr "Daftar dan gabung" +msgstr "Daftar dan Gabung" #: src/gui/guiConfirmRegistration.cpp -#, fuzzy, c-format +#, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" "If you proceed, a new account using your credentials will be created on this " @@ -1557,10 +1730,10 @@ "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" -"Anda akan bergabung dengan server dengan nama \"%s\" untuk pertama kalinya. " +"Anda akan bergabung ke server dengan nama \"%s\" untuk pertama kalinya.\n" "Jika Anda melanjutkan, akun baru yang telah Anda isikan akan dibuat pada " "server ini.\n" -"Silakan ketik ulang kata sandi Anda dan klik Daftar dan gabung untuk " +"Silakan ketik ulang kata sandi Anda dan klik \"Daftar dan Gabung\" untuk " "mengonfirmasi pembuatan akun atau klik Batal untuk membatalkan." #: src/gui/guiFormSpecMenu.cpp @@ -1706,9 +1879,8 @@ msgstr "Tembus nodus" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle pitchmove" -msgstr "Alih log obrolan" +msgstr "Gerak sesuai pandang" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" @@ -1740,7 +1912,7 @@ #: src/gui/guiVolumeChange.cpp msgid "Sound Volume: " -msgstr "Volume suara: " +msgstr "Volume Suara: " #. ~ Imperative, as in "Enter/type in text". #. Don't forget the space. @@ -1761,8 +1933,7 @@ "If disabled, virtual joystick will center to first-touch's position." msgstr "" "(Android) Tetapkan posisi joystick virtual.\n" -"Jika dimatikan, joystick virtual akan menengah kepada posisi sentuhan " -"pertama." +"Jika dimatikan, joystick virtual akan menengah di posisi sentuhan pertama." #: src/settings_translation_file.cpp msgid "" @@ -1775,7 +1946,6 @@ "berada di luar lingkaran utama." #: 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" @@ -1790,10 +1960,10 @@ "Dapat digunakan untuk memindahkan titik yang diinginkan ke (0, 0)\n" "untuk membuat titik bangkit atau untuk \"zum masuk\" pada titik yang\n" "diinginkan dengan menaikkan \"scale\".\n" -"Nilai bawaan telah diatur agar cocok untuk mandelbrot set dengan\n" -"parameter bawaan, butuh diganti untuk keadaan lain.\n" -"Jangkauan sekitar -2 ke 2. Kalikan dengan \"scale\" untuk pergeseran dalam\n" -"nodus." +"Nilai bawaan telah diatur agar cocok untuk Mandelbrot set dengan\n" +"parameter bawaan, ini mungkin butuh diganti untuk keadaan lain.\n" +"Jangkauan sekitar -2 ke 2. Kalikan dengan \"scale\" untuk pergeseran\n" +"dalam satuan nodus." #: src/settings_translation_file.cpp msgid "" @@ -1805,7 +1975,7 @@ "Default is for a vertically-squashed shape suitable for\n" "an island, set all 3 numbers equal for the raw shape." msgstr "" -"Skala (X,Y,Z) dari fraktal dalam nodus.\n" +"Skala (X,Y,Z) fraktal dalam nodus.\n" "Ukuran fraktal sebenarnya bisa jadi 2 hingga 3 kali lebih besar.\n" "Angka-angka ini dapat dibuat sangat besar, fraktal tidak harus\n" "cukup di dalam dunia.\n" @@ -1846,9 +2016,8 @@ msgstr "Noise 2D yang mengatur ukuran/kemunculan teras pegunungan." #: src/settings_translation_file.cpp -#, fuzzy msgid "2D noise that locates the river valleys and channels." -msgstr "Noise 2D yang mengatur bentuk/ukuran perbukitan." +msgstr "Noise 2D yang mengatur letak sungai dan kanal." #: src/settings_translation_file.cpp msgid "3D clouds" @@ -1859,6 +2028,10 @@ msgstr "Mode 3D" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "Kekuatan mode paralaks 3D" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "Noise 3D yang mengatur gua besar." @@ -1871,6 +2044,18 @@ "Juga mengatur struktur dari medan gunung floatland." #: 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 "" +"Noise 3D yang membentuk struktur floatland.\n" +"Jika diubah dari bawaan, skala noise (bawaannya 0.7) mungkin butuh\n" +"disesuaikan karena fungsi penirus floatland berfungsi baik ketika\n" +"noise ini bernilai antara -2.0 hingga 2.0." + +#: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." msgstr "Noise 3D yang mengatur struktur dari dinding ngarai sungai." @@ -1885,7 +2070,7 @@ #: src/settings_translation_file.cpp msgid "3D noise that determines number of dungeons per mapchunk." -msgstr "" +msgstr "Noise 3D yang mengatur jumlah dungeon per mapchunk." #: src/settings_translation_file.cpp msgid "" @@ -1903,7 +2088,7 @@ "Dukungan 3D.\n" "Yang didukung saat ini:\n" "- none: tidak ada keluaran 3d.\n" -"- anaglyph: 3d berwarna cyan/magenta.\n" +"- anaglyph: 3d berwarna sian/magenta.\n" "- interlaced: garis ganjil/genap berdasarkan polarisasi layar.\n" "- topbottom: pisahkan layar atas/bawah.\n" "- sidebyside: pisahkan layar kiri/kanan.\n" @@ -1917,25 +2102,24 @@ "Will be overridden when creating a new world in the main menu." msgstr "" "Seed peta terpilih untuk peta baru, kosongkan untuk nilai acak.\n" -"Akan diganti ketika menciptakan dunia baru dalam menu utama." +"Akan diganti ketika menciptakan dunia baru lewat menu utama." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." -msgstr "" -"Sebuah pesan yang akan ditampilkan ke semua klien ketika peladen gagal." +msgstr "Sebuah pesan yang akan ditampilkan ke semua klien ketika server gagal." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server shuts down." msgstr "" -"Sebuah pesan yang akan ditampilkan ke semua klien ketika peladen dimatikan." +"Sebuah pesan yang akan ditampilkan ke semua klien ketika server dimatikan." #: src/settings_translation_file.cpp msgid "ABM interval" msgstr "Selang waktu ABM" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" -msgstr "Batas mutlak dari antrean kemunculan (emerge queues)" +msgid "Absolute limit of queued blocks to emerge" +msgstr "Batas mutlak antrean kemunculan blok" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -1943,7 +2127,7 @@ #: src/settings_translation_file.cpp msgid "Acceleration of gravity, in nodes per second per second." -msgstr "" +msgstr "Percepatan gravitasi dalam nodus per detik per detik." #: src/settings_translation_file.cpp msgid "Active Block Modifiers" @@ -1968,7 +2152,7 @@ "Note that the address field in the main menu overrides this setting." msgstr "" "Alamat tujuan sambungan.\n" -"Biarkan kosong untuk memulai sebuah peladen lokal.\n" +"Biarkan kosong untuk memulai sebuah server lokal.\n" "Perhatikan bahwa bidang alamat dalam menu utama menimpa pengaturan ini." #: src/settings_translation_file.cpp @@ -1980,10 +2164,25 @@ "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) misalkan untuk " +"Atur konfigurasi dpi ke layar Anda (selain X11/Android saja) misalnya untuk " "layar 4K." #: 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 "" +"Sesuaikan kepadatan lapisan floatland.\n" +"Tambahkan nilai untuk menambah kepadatan. Dapat positif atau negatif.\n" +"Nilai = 0.0: 50% volume adalah floatland.\n" +"Nilai = 2.0 (dapat lebih tinggi tergantung 'mgv7_np_floatland', selalu uji\n" +"terlebih dahulu) membuat lapisan floatland padat (penuh)." + +#: src/settings_translation_file.cpp msgid "Advanced" msgstr "Lanjutan" @@ -1995,10 +2194,11 @@ "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 "Altitude chill" -msgstr "Dingin di ketinggian" +"Ubah kurva cahaya dengan menerapkan penyesuaian gama.\n" +"Nilai yang lebih tinggi menerangkan tingkatan cahaya rendah\n" +"dan menengah. Nilai \"1.0\" membiarkan kurva cahaya seperti\n" +"asalnya. Ini hanya berpengaruh kepada cahaya siang dan cahaya\n" +"buatan. Ini punya pengaruh kecil kepada cahaya malam alami." #: src/settings_translation_file.cpp msgid "Always fly and fast" @@ -2026,7 +2226,7 @@ #: src/settings_translation_file.cpp msgid "Announce to this serverlist." -msgstr "Umumkan ke daftar peladen ini." +msgstr "Umumkan ke daftar server ini." #: src/settings_translation_file.cpp msgid "Append item name" @@ -2070,12 +2270,13 @@ "optimization.\n" "Stated in mapblocks (16 nodes)." msgstr "" -"Pada jarak ini, peladen akan melakukan optimasi dengan agresif tentang blok\n" -"yang dikirim kepada klien.\n" -"Nilai yang kecil dapat meningkatkan banyak performa dengan glitch pada\n" -"tampilan (beberapa blok di bawah air dan dalam gua tidak akan digambar,\n" +"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 ini.\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 @@ -2088,7 +2289,7 @@ #: src/settings_translation_file.cpp msgid "Automatically report to the serverlist." -msgstr "Secara otomatis melaporkan ke daftar peladen." +msgstr "Secara otomatis melaporkan ke daftar server ini." #: src/settings_translation_file.cpp msgid "Autosave screen size" @@ -2116,7 +2317,7 @@ #: src/settings_translation_file.cpp msgid "Basic privileges" -msgstr "Izin dasar" +msgstr "Hak-hak dasar" #: src/settings_translation_file.cpp msgid "Beach noise" @@ -2151,24 +2352,20 @@ msgstr "Jarak optimasi pengiriman blok" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic font path" -msgstr "Jalur fon monospace" +msgstr "Jalur fon tebal dan miring" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic monospace font path" -msgstr "Jalur fon monospace" +msgstr "Jalur fon monospace tebal dan miring" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold font path" -msgstr "Jalur fon" +msgstr "Jalur fon tebal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold monospace font path" -msgstr "Jalur fon monospace" +msgstr "Jalur fon monospace tebal" #: src/settings_translation_file.cpp msgid "Build inside player" @@ -2183,7 +2380,6 @@ msgstr "Bumpmapping" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -2191,7 +2387,7 @@ "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" "Jarak bidang dekat kamera dalam nodus, antara 0 dan 0.5\n" -"Kebanyakan pengguna tidak perlu mengganti ini.\n" +"Hanya untuk GLES. Kebanyakan pengguna tidak perlu mengganti ini.\n" "Menaikkan nilai dapat mengurangi cacat pada GPU yang lebih lemah.\n" "0.1 = Bawaan, 0.25 = Bagus untuk tablet yang lebih lemah." @@ -2241,7 +2437,7 @@ #: src/settings_translation_file.cpp msgid "Cavern taper" -msgstr "Gua lancip" +msgstr "Kelancipan gua" #: src/settings_translation_file.cpp msgid "Cavern threshold" @@ -2256,6 +2452,8 @@ "Center of light curve boost range.\n" "Where 0.0 is minimum light level, 1.0 is maximum light level." msgstr "" +"Pertengahan rentang penguatan kurva cahaya.\n" +"Nilai 0.0 adalah minimum, 1.0 adalah maksimum." #: src/settings_translation_file.cpp msgid "" @@ -2272,17 +2470,24 @@ "tekstur. Cocok untuk layar kecil." #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "Ukuran fon obrolan" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Tombol obrolan" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "Tingkat log obrolan" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "Batas jumlah pesan obrolan" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message format" -msgstr "Panjang maksimum pesan obrolan" +msgstr "Format pesan obrolan" #: src/settings_translation_file.cpp msgid "Chat message kick threshold" @@ -2322,7 +2527,7 @@ #: src/settings_translation_file.cpp msgid "Client and Server" -msgstr "Klien dan peladen" +msgstr "Klien dan Server" #: src/settings_translation_file.cpp msgid "Client modding" @@ -2330,7 +2535,7 @@ #: src/settings_translation_file.cpp msgid "Client side modding restrictions" -msgstr "Batasan mod sisi klien" +msgstr "Pembatasan mod sisi klien" #: src/settings_translation_file.cpp msgid "Client side node lookup range restriction" @@ -2338,7 +2543,7 @@ #: src/settings_translation_file.cpp msgid "Climbing speed" -msgstr "Kecepatan memanjat" +msgstr "Kelajuan memanjat" #: src/settings_translation_file.cpp msgid "Cloud radius" @@ -2407,7 +2612,7 @@ #: src/settings_translation_file.cpp msgid "Connect to external media server" -msgstr "Sambungkan ke peladen media eksternal" +msgstr "Sambungkan ke server media eksternal" #: src/settings_translation_file.cpp msgid "Connects glass if supported by node." @@ -2462,7 +2667,7 @@ #: src/settings_translation_file.cpp msgid "Controls sinking speed in liquid." -msgstr "" +msgstr "Atur kelajuan tenggelam dalam cairan." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -2478,10 +2683,13 @@ "Value >= 10.0 completely disables generation of tunnels and avoids the\n" "intensive noise calculations." msgstr "" +"Atur lebah terowongan, nilai yang lebih kecil melebarkan terowongan.\n" +"Nilai >= 10.0 mematikan terowongan dan menghindari perhitungan\n" +"noise intensif." #: src/settings_translation_file.cpp msgid "Crash message" -msgstr "Pesan kerusakan" +msgstr "Pesan crash" #: src/settings_translation_file.cpp msgid "Creative" @@ -2516,9 +2724,8 @@ msgstr "Tombol info awakutu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Debug log file size threshold" -msgstr "Ambang batas noise gurun" +msgstr "Ambang batas ukuran log awakutu" #: src/settings_translation_file.cpp msgid "Debug log level" @@ -2530,11 +2737,11 @@ #: src/settings_translation_file.cpp msgid "Decrease this to increase liquid resistance to movement." -msgstr "" +msgstr "Turunkan ini untuk menaikkan ketahanan cairan terhadap gerakan." #: src/settings_translation_file.cpp msgid "Dedicated server step" -msgstr "Langkah peladen khusus" +msgstr "Langkah server khusus" #: src/settings_translation_file.cpp msgid "Default acceleration" @@ -2550,7 +2757,7 @@ "This will be overridden when creating a world from the main menu." msgstr "" "Permainan bawaan saat membuat dunia baru.\n" -"Ini akan diganti saat membuat dunia dari menu utama." +"Ini akan diganti saat membuat dunia lewat menu utama." #: src/settings_translation_file.cpp msgid "Default password" @@ -2558,13 +2765,17 @@ #: src/settings_translation_file.cpp msgid "Default privileges" -msgstr "Izin bawaan" +msgstr "Hak-hak bawaan" #: src/settings_translation_file.cpp msgid "Default report format" msgstr "Format laporan bawaan" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "Ukuran tumpukan bawaan" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2591,12 +2802,11 @@ #: src/settings_translation_file.cpp msgid "Defines full size of caverns, smaller values create larger caverns." msgstr "" -"Mengatur ukuran penuh dari gua besar, nilai yang lebih kecil membuat gua " -"yang lebih besar." +"Mengatur ukuran penuh gua besar, nilai yang lebih kecil memperbesar gua." #: src/settings_translation_file.cpp msgid "Defines large-scale river channel structure." -msgstr "Menetapkan struktur saluran sungai skala besar." +msgstr "Menetapkan struktur kanal sungai skala besar." #: src/settings_translation_file.cpp msgid "Defines location and terrain of optional hills and lakes." @@ -2607,7 +2817,7 @@ "Defines sampling step of texture.\n" "A higher value results in smoother normal maps." msgstr "" -"Menentukan tahap sampling tekstur.\n" +"Menentukan langkah penyampelan tekstur.\n" "Nilai lebih tinggi menghasilkan peta lebih halus." #: src/settings_translation_file.cpp @@ -2615,9 +2825,8 @@ msgstr "Mengatur ketinggian dasar tanah." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the depth of the river channel." -msgstr "Mengatur ketinggian dasar tanah." +msgstr "Mengatur kedalaman kanal sungai." #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." @@ -2625,14 +2834,12 @@ "Menentukan jarak maksimal perpindahan pemain dalam blok (0 = tak terbatas)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river channel." -msgstr "Menetapkan struktur saluran sungai skala besar." +msgstr "Mengatur lebar kanal sungai." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river valley." -msgstr "Menetapkan daerah tempat pohon punya apel." +msgstr "Mengatur lebar ngarai sungai." #: src/settings_translation_file.cpp msgid "Defines tree areas and tree density." @@ -2645,15 +2852,15 @@ msgstr "" "Jeda antarpembaruan mesh pada klien dalam milidetik. Menaikkan nilai ini " "akan\n" -"memperlambat pembaruan mesh, sehingga mengurangi jitter pada klien lambat." +"memperlambat pembaruan mesh sehingga mengurangi jitter pada klien lambat." #: src/settings_translation_file.cpp msgid "Delay in sending blocks after building" -msgstr "Jeda dalam mengirim blok setelah membangun" +msgstr "Jeda dalam pengiriman blok setelah membangun" #: src/settings_translation_file.cpp msgid "Delay showing tooltips, stated in milliseconds." -msgstr "Jeda menampilkan tooltip, dalam milidetik." +msgstr "Jeda menampilkan tooltip dalam milidetik." #: src/settings_translation_file.cpp msgid "Deprecated Lua API handling" @@ -2661,7 +2868,7 @@ #: src/settings_translation_file.cpp msgid "Depth below which you'll find giant caverns." -msgstr "Kedalaman minimal tempat Anda akan menemukan gua besar." +msgstr "Kedalaman minimal tempat Anda akan menemukan gua raksasa." #: src/settings_translation_file.cpp msgid "Depth below which you'll find large caves." @@ -2672,21 +2879,20 @@ "Description of server, to be displayed when players join and in the " "serverlist." msgstr "" -"Deskripsi dari peladen, ditampilkan saat pemain bergabung dan dalam daftar " -"peladen." +"Keterangan server yang ditampilkan saat pemain bergabung dan dalam daftar " +"server." #: src/settings_translation_file.cpp msgid "Desert noise threshold" msgstr "Ambang batas noise gurun" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Deserts occur when np_biome exceeds this value.\n" "When the 'snowbiomes' flag is enabled, this is ignored." msgstr "" "Gurun muncul saat np_biome melebihi nilai ini.\n" -"Saat sistem bioma baru digunakan, ini diabaikan." +"Ketika flag \"snowbiomes\" dinyalakan, nilai ini diabaikan." #: src/settings_translation_file.cpp msgid "Desynchronize block animation" @@ -2706,11 +2912,11 @@ #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." -msgstr "Nama domain dari peladen yang akan ditampilkan pada daftar peladen." +msgstr "Nama domain dari server yang akan ditampilkan pada daftar server." #: src/settings_translation_file.cpp msgid "Double tap jump for fly" -msgstr "Tekan ganda \"lompat\" untuk terbang" +msgstr "Tekan ganda lompat untuk terbang" #: src/settings_translation_file.cpp msgid "Double-tapping the jump key toggles fly mode." @@ -2733,15 +2939,16 @@ msgstr "Y minimum dungeon" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dungeon noise" -msgstr "Y minimum dungeon" +msgstr "Noise dungeon" #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" "Required for IPv6 connections to work at all." msgstr "" +"Nyalakan dukungan IPv6 (untuk kllien dan server).\n" +"Membutuhkan sambungan IPv6." #: src/settings_translation_file.cpp msgid "" @@ -2781,14 +2988,14 @@ #: src/settings_translation_file.cpp msgid "Enable register confirmation" -msgstr "Nyalakan konfirmasi pendaftaran" +msgstr "Gunakan konfirmasi pendaftaran" #: src/settings_translation_file.cpp msgid "" "Enable register confirmation when connecting to server.\n" "If disabled, new account will be registered automatically." msgstr "" -"Nyalakan konfirmasi pendaftaran saat menyambung ke peladen.\n" +"Gunakan konfirmasi pendaftaran saat menyambung ke server.\n" "Jika dimatikan, akun baru akan didaftarkan otomatis." #: src/settings_translation_file.cpp @@ -2807,11 +3014,10 @@ "to new servers, but they may not support all new features that you are " "expecting." msgstr "" -"Nyalakan untuk melarang klien lawas untuk tersambung.\n" -"Klien-klien lawas dianggap sesuai jika mereka tidak rusak saat " -"menyambungkan\n" -"ke peladen-peladen baru, tetapi mereka mungkin tidak mendukung semua fitur\n" -"baru yang Anda harapkan." +"Nyalakan untuk melarang sambungan dari klien lawas.\n" +"Klien lawas dianggap sesuai jika mereka tidak rusak saat menyambung ke " +"server-\n" +"server baru, tetapi mungkin tidak mendukung semua fitur baru yang diharapkan." #: src/settings_translation_file.cpp msgid "" @@ -2820,16 +3026,17 @@ "textures)\n" "when connecting to the server." msgstr "" -"Gunakan peladen media jarak jauh (jika diberikan oleh peladen).\n" -"Peladen jarak jauh menawarkan cara lebih cepat untuk mengunduh media (misal: " -"tekstur)\n" -"saat tersambung ke peladen." +"Gunakan server media jarak jauh (jika diberikan oleh server).\n" +"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 "" @@ -2840,14 +3047,14 @@ "Misalkan: 0 untuk tanpa view bobbing; 1.0 untuk normal; 2.0 untuk 2x lipat." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enable/disable running an IPv6 server.\n" "Ignored if bind_address is set.\n" "Needs enable_ipv6 to be enabled." msgstr "" -"Nyalakan/matikan peladen IPv6.\n" -"Diabaikan jika bind_address telah diatur." +"Nyalakan/matikan server IPv6.\n" +"Diabaikan jika bind_address telah diatur.\n" +"Membutuhkan enable_ipv6 untuk dinyalakan." #: src/settings_translation_file.cpp msgid "" @@ -2856,6 +3063,10 @@ "appearance of high dynamic range images. Mid-range contrast is slightly\n" "enhanced, highlights and shadows are gradually compressed." msgstr "" +"Nyalakan tone mapping \"Uncharted 2\" dari Hable.\n" +"Menyimulasikan kurva warna film foto dan memperkirakan penampilan\n" +"citra rentang dinamis tinggi (HDR). Kontras tengah sedikit dikuatkan,\n" +"sedangkan sorotan dan bayangan dilemahkan." #: src/settings_translation_file.cpp msgid "Enables animation of inventory items." @@ -2903,6 +3114,10 @@ "sound controls will be non-functional.\n" "Changing this setting requires a restart." msgstr "" +"Nyalakan sistem suara.\n" +"Jika dimatikan, semua suara dimatikan dan pengaturan suara dalam permainan\n" +"akan tidak berfungsi.\n" +"Perubahan pengaturan ini membutuhkan mulai ulang." #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" @@ -2921,6 +3136,22 @@ "saat diatur dengan angka yang lebih besar dari 0." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "" +"Pangkat untuk penirusan floatland. Mengubah perilaku penirusan.\n" +"Nilai = 1.0 membuat penirusan linear seragam.\n" +"Nilai > 1.0 membuat penirusan halus yang cocok untuk pemisahan\n" +"floatland bawaan.\n" +"Nilai < 1.0 (misal 0.25) membuat tingkat permukaan dengan lembah\n" +"yang rata dan cocok untuk lapisan floatland padat (penuh)." + +#: src/settings_translation_file.cpp msgid "FPS in pause menu" msgstr "FPS (bingkai per detik) pada menu jeda" @@ -2937,9 +3168,8 @@ msgstr "Faktor fall bobbing" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "Fon cadangan" +msgstr "Jalur fon cadangan" #: src/settings_translation_file.cpp msgid "Fallback font shadow" @@ -2959,23 +3189,23 @@ #: src/settings_translation_file.cpp msgid "Fast mode acceleration" -msgstr "Mode akselerasi cepat" +msgstr "Percepatan mode gerak cepat" #: src/settings_translation_file.cpp msgid "Fast mode speed" -msgstr "Mode cepat" +msgstr "Kelajuan mode gerak cepat" #: src/settings_translation_file.cpp msgid "Fast movement" -msgstr "Gerakan cepat" +msgstr "Gerak cepat" #: src/settings_translation_file.cpp msgid "" "Fast movement (via the \"special\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Gerakan cepat (lewat tombol \"spesial\").\n" -"Membutuhkan izin \"fast\" pada peladen." +"Gerak cepat (lewat tombol \"spesial\").\n" +"Membutuhkan hak \"fast\" pada server." #: src/settings_translation_file.cpp msgid "Field of view" @@ -2991,7 +3221,7 @@ "the\n" "Multiplayer Tab." msgstr "" -"Berkas dalam client/serverlist/ yang berisi peladen favorit Anda yang\n" +"Berkas dalam client/serverlist/ yang berisi server favorit Anda yang\n" "ditampilkan dalam Tab Multipemain." #: src/settings_translation_file.cpp @@ -3039,6 +3269,34 @@ msgstr "Joystick virtual tetap" #: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "Kepadatan floatland" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "Y maksimum floatland" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "Y minimum floatland" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "Noise floatland" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "Pangkat penirusan floatland" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "Jarak penirusan floatland" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "Ketinggian permukaan air floatland" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Tombol terbang" @@ -3060,11 +3318,11 @@ #: src/settings_translation_file.cpp msgid "Font bold by default" -msgstr "" +msgstr "Fon tebal bawaan" #: src/settings_translation_file.cpp msgid "Font italic by default" -msgstr "" +msgstr "Fon miring bawaan" #: src/settings_translation_file.cpp msgid "Font shadow" @@ -3080,15 +3338,23 @@ #: src/settings_translation_file.cpp msgid "Font size of the default font in point (pt)." -msgstr "" +msgstr "Ukuran fon bawaan dalam poin (pt)." #: src/settings_translation_file.cpp msgid "Font size of the fallback font in point (pt)." -msgstr "" +msgstr "Ukuran fon cadangan bawaan dalam poin (pt)." #: src/settings_translation_file.cpp msgid "Font size of the monospace font in point (pt)." +msgstr "Ukuran fon monospace bawaan dalam poin (pt)." + +#: 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 "" +"Ukuran fon teks obrolan terkini dan prompt obrolan dalam poin (pt).\n" +"Nilai 0 akan memakai ukuran bawaan." #: src/settings_translation_file.cpp msgid "" @@ -3096,6 +3362,8 @@ "placeholders:\n" "@name, @message, @timestamp (optional)" msgstr "" +"Format pesan obrolan pemain. Berikut daftar kode yang sah:\n" +"@name, @message, @timestamp (opsional)" #: src/settings_translation_file.cpp msgid "Format of screenshots." @@ -3178,7 +3446,7 @@ "Jarak terjauh objek dapat diketahui klien, dalam blok peta (16 nodus).\n" "\n" "Mengatur dengan nilai yang lebih tinggi daripada active_block_range akan\n" -"menyebabkan peladen menjaga objek aktif hingga jarak ini pada arah pandang\n" +"menyebabkan server menjaga objek aktif hingga jarak ini pada arah pandang\n" "pemain. (Ini dapat menghindari makhluk yang mendadak hilang dari pandangan.)" #: src/settings_translation_file.cpp @@ -3225,22 +3493,24 @@ "semua dekorasi." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Gradient of light curve at maximum light level.\n" "Controls the contrast of the highest light levels." -msgstr "Kemiringan kurva cahaya di titik maksimum." +msgstr "" +"Kemiringan kurva cahaya di titik maksimum.\n" +"Mengatur kontras tingkatan cahaya tertinggi." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Gradient of light curve at minimum light level.\n" "Controls the contrast of the lowest light levels." -msgstr "Kemiringan kurva cahaya di titik minimum." +msgstr "" +"Kemiringan kurva cahaya di titik minimum.\n" +"Mengatur kontras tingkatan cahaya terendah." #: src/settings_translation_file.cpp msgid "Graphics" -msgstr "Grafik" +msgstr "Grafika" #: src/settings_translation_file.cpp msgid "Gravity" @@ -3267,14 +3537,13 @@ msgstr "Tombol beralih HUD" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- legacy: (try to) mimic old behaviour (default for release).\n" "- log: mimic and log backtrace of deprecated call (default for debug).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" -"Penanganan panggilan lua api usang:\n" +"Penanganan panggilan Lua API usang:\n" "- legacy: (mencoba untuk) menyerupai aturan lawas (bawaan untuk rilis).\n" "- log: menyerupai dan mencatat asal-usul panggilan usang (bawaan untuk " "awakutu).\n" @@ -3344,25 +3613,31 @@ #: src/settings_translation_file.cpp msgid "Homepage of server, to be displayed in the serverlist." -msgstr "Halaman awal peladen, ditampilkan pada daftar peladen." +msgstr "Halaman awal server, ditampilkan pada daftar server." #: src/settings_translation_file.cpp msgid "" "Horizontal acceleration in air when jumping or falling,\n" "in nodes per second per second." msgstr "" +"Percepatan mendatar di udara saat lompat atau jatuh\n" +"dalam nodus per detik per detik." #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration in fast mode,\n" "in nodes per second per second." msgstr "" +"Percepatan mendatar dan vertikal dalam mode gerak\n" +"cepat dalam nodus per detik per detik." #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration on ground or when climbing,\n" "in nodes per second per second." msgstr "" +"Percepatan mendatar dan vertikal di atas tanah atau saat memanjat\n" +"dalam nodus per detik per detik." #: src/settings_translation_file.cpp msgid "Hotbar next key" @@ -3510,13 +3785,16 @@ "If negative, liquid waves will move backwards.\n" "Requires waving liquids to be enabled." msgstr "" +"Kelajuan gerakan ombak. Lebih tinggi = lebih cepat.\n" +"Jika negatif, ombak akan bergerak mundur.\n" +"Membutuhkan air berombak untuk dinyalakan." #: src/settings_translation_file.cpp msgid "" "How much the server will wait before unloading unused mapblocks.\n" "Higher value is smoother, but will use more RAM." msgstr "" -"Seberapa lama peladen akan menunggu sebelum membongkar blok peta yang tidak " +"Seberapa lama server akan menunggu sebelum membongkar blok peta yang tidak " "dipakai.\n" "Semakin tinggi semakin halus, tetapi menggunakan lebih banyak RAM." @@ -3542,7 +3820,7 @@ #: src/settings_translation_file.cpp msgid "IPv6 server" -msgstr "Peladen IPv6" +msgstr "Server IPv6" #: src/settings_translation_file.cpp msgid "" @@ -3570,7 +3848,7 @@ "invisible\n" "so that the utility of noclip mode is reduced." msgstr "" -"Jika dinyalakan, peladen akan melakukan occlusion culling blok peta\n" +"Jika dinyalakan, server akan melakukan occlusion culling blok peta\n" "menurut posisi mata pemain. Ini dapat mengurangi jumlah blok yang\n" "dikirim ke klien sebesar 50-80%. Klien tidak dapat menerima yang tidak\n" "terlihat sehingga kemampuan mode tembus blok berkurang." @@ -3583,7 +3861,7 @@ msgstr "" "Jika dinyalakan bersama mode terbang, pemain mampu terbang melalui nodus " "padat.\n" -"Hal ini membutuhkan izin \"noclip\" pada peladen." +"Hal ini membutuhkan hak \"noclip\" pada server." #: src/settings_translation_file.cpp msgid "" @@ -3601,7 +3879,7 @@ "This option is only read when server starts." msgstr "" "Jika dinyalakan, perilaku akan direkam untuk cadangan.\n" -"Pilihan ini hanya dibaca saat peladen dimulai." +"Pilihan ini hanya dibaca saat server dimulai." #: src/settings_translation_file.cpp msgid "If enabled, disable cheat prevention in multiplayer." @@ -3612,7 +3890,7 @@ "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 "" -"Jika dinyalakan, data dunia yang tidak sah tidak akan menyebabkan peladen " +"Jika dinyalakan, data dunia yang tidak sah tidak akan menyebabkan server " "mati.\n" "Hanya nyalakan ini jika Anda tahu yang Anda lakukan." @@ -3621,8 +3899,8 @@ "If enabled, makes move directions relative to the player's pitch when flying " "or swimming." msgstr "" -"Jika dinyalakan, menyebabkan arah gerak sesuai pandangan pemain saat terbang " -"atau menyelam." +"Jika dinyalakan, arah gerak menyesuaikan pandangan pemain saat terbang atau " +"menyelam." #: src/settings_translation_file.cpp msgid "If enabled, new players cannot join with an empty password." @@ -3656,6 +3934,11 @@ "deleting an older debug.txt.1 if it exists.\n" "debug.txt is only moved if this setting is positive." msgstr "" +"Jika ukuran berkas debug.txt melebihi nilai yang diberikan (dalam " +"megabita),\n" +"berkas tersebut akan dipindah ke debug.txt.1 dan berkas debug.txt.1 lama\n" +"akan dihapus jika ada.\n" +"Berkas debug.txt hanya dipindah jika pengaturan ini dinyalakan." #: src/settings_translation_file.cpp msgid "If this is set, players will always (re)spawn at the given position." @@ -3663,7 +3946,7 @@ #: src/settings_translation_file.cpp msgid "Ignore world errors" -msgstr "Abaikan kesalahan pada dunia" +msgstr "Abaikan galat pada dunia" #: src/settings_translation_file.cpp msgid "In-Game" @@ -3689,7 +3972,7 @@ #: src/settings_translation_file.cpp msgid "Initial vertical speed when jumping, in nodes per second." -msgstr "" +msgstr "Kelajuan vertikal awal ketika lompat dalam nodus per detik." #: src/settings_translation_file.cpp msgid "" @@ -3716,18 +3999,19 @@ msgid "" "Instrument the action function of Active Block Modifiers on registration." msgstr "" -"Melengkapi fungsi aksi Pengubah Blok Aktif saat didaftarkan, dengan perkakas." +"Melengkapi fungsi aksi Pengubah Blok Aktif dengan perkakas ketika " +"didaftarkan." #: src/settings_translation_file.cpp msgid "" "Instrument the action function of Loading Block Modifiers on registration." msgstr "" -"Melengkapi fungsi aksi Pengubah Blok Termuat saat didaftarkan, dengan " -"perkakas." +"Melengkapi fungsi aksi Pengubah Blok Termuat dengan perkakas ketika " +"didaftarkan." #: src/settings_translation_file.cpp msgid "Instrument the methods of entities on registration." -msgstr "Melengkapi metode entitas saat didaftarkan, dengan perkakas." +msgstr "Melengkapi metode entitas dengan perkakas ketika didaftarkan." #: src/settings_translation_file.cpp msgid "Instrumentation" @@ -3735,7 +4019,7 @@ #: src/settings_translation_file.cpp msgid "Interval of saving important changes in the world, stated in seconds." -msgstr "Jarak waktu penyimpanan perubahan penting dari dunia, dalam detik." +msgstr "Jarak waktu penyimpanan perubahan penting dari dunia dalam detik." #: src/settings_translation_file.cpp msgid "Interval of sending time of day to clients." @@ -3758,18 +4042,16 @@ msgstr "Balik pergerakan vertikal tetikus." #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic font path" -msgstr "Jalur fon monospace" +msgstr "Jalur fon miring" #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic monospace font path" -msgstr "Jalur fon monospace" +msgstr "Jalur fon monospace miring" #: src/settings_translation_file.cpp msgid "Item entity TTL" -msgstr "Umur hidup wujud barang" +msgstr "Umur hidup entitas barang" #: src/settings_translation_file.cpp msgid "Iterations" @@ -3812,7 +4094,7 @@ "Has no effect on 3D fractals.\n" "Range roughly -2 to 2." msgstr "" -"Hanya Julia set.\n" +"Khusus Julia set.\n" "Komponen W dari tetapan hiperkompleks.\n" "Mengubah bentuk fraktal.\n" "Tidak berlaku pada fraktal 3D.\n" @@ -3825,7 +4107,7 @@ "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"Hanya Julia set.\n" +"Khusus Julia set.\n" "Komponen X dari tetapan hiperkompleks.\n" "Mengubah bentuk fraktal.\n" "Jangkauan sekitar -2 ke 2." @@ -3837,7 +4119,7 @@ "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"Hanya Julia set.\n" +"Khusus Julia set.\n" "Komponen Y dari tetapan hiperkompleks.\n" "Mengubah bentuk fraktal.\n" "Jangkauan sekitar -2 ke 2." @@ -3849,7 +4131,7 @@ "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"Hanya Julia set.\n" +"Khusus Julia set.\n" "Komponen Z dari tetapan hiperkompleks.\n" "Mengubah bentuk fraktal.\n" "Jangkauan sekitar -2 ke 2." @@ -3876,7 +4158,7 @@ #: src/settings_translation_file.cpp msgid "Jumping speed" -msgstr "Kecepatan lompat" +msgstr "Kelajuan lompat" #: src/settings_translation_file.cpp msgid "" @@ -4596,15 +4878,15 @@ #: src/settings_translation_file.cpp msgid "Large cave maximum number" -msgstr "" +msgstr "Nilai maksimum gua besar" #: src/settings_translation_file.cpp msgid "Large cave minimum number" -msgstr "" +msgstr "Nilai minimum gua besar" #: src/settings_translation_file.cpp msgid "Large cave proportion flooded" -msgstr "" +msgstr "Perbandingan cairan dalam gua besar" #: src/settings_translation_file.cpp msgid "Large chat console key" @@ -4637,18 +4919,17 @@ "updated over\n" "network." msgstr "" -"Lama detikan peladen dan selang waktu bagi objek secara umum untuk " +"Lama detikan server dan selang waktu bagi objek secara umum untuk " "diperbarui\n" "ke jaringan." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of liquid waves.\n" "Requires waving liquids to be enabled." msgstr "" -"Atur ke true untuk menyalakan daun melambai.\n" -"Membutuhkan penggunaan shader." +"Panjang ombak.\n" +"Membutuhkan air berombak untuk dinyalakan." #: src/settings_translation_file.cpp msgid "Length of time between Active Block Modifier (ABM) execution cycles" @@ -4683,42 +4964,28 @@ "- verbose" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost" -msgstr "Penguatan tengah kurva cahaya" +msgstr "Penguatan kurva cahaya" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost center" -msgstr "Titik tengah penguatan tengah kurva cahaya" +msgstr "Titik tengah penguatan kurva cahaya" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost spread" -msgstr "Persebaran penguatan tengah kurva cahaya" +msgstr "Persebaran penguatan kurva cahaya" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve gamma" -msgstr "Penguatan tengah kurva cahaya" +msgstr "Gama kurva cahaya" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve high gradient" -msgstr "Penguatan tengah kurva cahaya" +msgstr "Titik tinggi gradasi kurva cahaya" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve low gradient" -msgstr "Titik tengah penguatan tengah kurva cahaya" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Batas antrean kemunculan (emerge queue) pada diska" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Batas antrean kemunculan (emerge queue) untuk dibuat" +msgstr "Titik rendah gradasi kurva cahaya" #: src/settings_translation_file.cpp msgid "" @@ -4740,8 +5007,8 @@ "Only has an effect if compiled with cURL." msgstr "" "Membatasi jumlah permintaan HTTP paralel. Memengaruhi:\n" -"- Pengambilan media jika peladen menggunakan pengaturan remote_media.\n" -"- Unduhan daftar peladen dan mengumumkan peladen.\n" +"- Pengambilan media jika server menggunakan pengaturan remote_media.\n" +"- Unduhan daftar server dan mengumumkan server.\n" "- Unduhan oleh menu utama (misal. pengelola mod).\n" "Hanya berlaku jika dikompilasi dengan cURL." @@ -4762,9 +5029,8 @@ msgstr "Waktu pembersihan antrean cairan" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid sinking" -msgstr "Kecepatan tenggelam dalam cairan" +msgstr "Kelajuan tenggelam dalam cairan" #: src/settings_translation_file.cpp msgid "Liquid update interval in seconds." @@ -4786,7 +5052,7 @@ msgstr "" "Muat profiler permainan untuk mengumpulkan data game profiling.\n" "Menyediakan perintah /profiler untuk akses ke rangkuman profile.\n" -"Berguna untuk pengembang mod dan operator peladen." +"Berguna untuk pengembang mod dan operator server." #: src/settings_translation_file.cpp msgid "Loading Block Modifiers" @@ -4797,6 +5063,10 @@ msgstr "Batas bawah Y dungeon." #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "Batas bawah Y floatland." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Skrip menu utama" @@ -4828,23 +5098,22 @@ msgstr "Atribut pembuatan peta khusus untuk pembuat peta 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 "" -"Atribut pembuatan peta khusus untuk pembuat peta flat.\n" +"Atribut pembuatan peta khusus untuk pembuat peta Flat.\n" "Beberapa danau dan bukit dapat ditambahkan ke dunia datar." #: 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 "" -"Atribut pembuatan peta khusus untuk pembuat peta v7.\n" -"\"ridges\" menyalakan sungai." +"Atribut pembuatan peta khusus untuk pembuat peta Fractal.\n" +"\"terrain\" membolehkan pembuatan medan nonfraktal:\n" +"samudra, pulau, dan bawah tanah." #: src/settings_translation_file.cpp msgid "" @@ -4867,7 +5136,6 @@ 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" @@ -4882,10 +5150,14 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "Atribut pembuatan peta khusus untuk pembuat peta v7.\n" -"\"ridges\" menyalakan sungai." +"\"ridges\": Sungai.\n" +"\"floatlands\": Tanah mengambang di atmosfer.\n" +"\"caverns\": Gua raksasa di kedalaman bawah tanah." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -4925,16 +5197,15 @@ #: src/settings_translation_file.cpp msgid "Mapgen Flat specific flags" -msgstr "Flag khusus pembuat peta flat" +msgstr "Flag khusus pembuat peta Flat" #: src/settings_translation_file.cpp msgid "Mapgen Fractal" msgstr "Pembuat peta fraktal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal specific flags" -msgstr "Flag khusus pembuat peta flat" +msgstr "Flag khusus pembuat peta Fractal" #: src/settings_translation_file.cpp msgid "Mapgen V5" @@ -4973,10 +5244,6 @@ msgstr "Awakutu pembuat peta" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Flag pembuat peta" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Nama pembuat peta" @@ -5018,17 +5285,19 @@ #: src/settings_translation_file.cpp msgid "Maximum limit of random number of large caves per mapchunk." -msgstr "" +msgstr "Batas maksimal nilai acak untuk gua besar per mapchunk." #: src/settings_translation_file.cpp msgid "Maximum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Batas maksimal nilai acak untuk gua kecil per mapchunk." #: src/settings_translation_file.cpp msgid "" "Maximum liquid resistance. Controls deceleration when entering liquid at\n" "high speed." msgstr "" +"Ketahanan cairan maksimum. Mengatur perlambatan ketika memasuki\n" +"cairan dengan kelajuan tinggi." #: src/settings_translation_file.cpp msgid "" @@ -5047,18 +5316,18 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" -"Jumlah maksimum blok yang akan diantrekan yang akan dihasilkan.\n" -"Atur ke kosong untuk diatur secara otomatis." +"Jumlah maksimum blok yang akan diantrekan untuk dihasilkan.\n" +"Batasan ini diatur per pemain." #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" -"Jumlah maksimum blok yang akan diantrekan yang akan dimuat dari berkas.\n" -"Atur ke kosong untuk diatur secara otomatis." +"Jumlah maksimum blok yang akan diantrekan untuk dimuat dari berkas.\n" +"Batasan ini diatur per pemain." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5153,6 +5422,10 @@ msgstr "Metode yang digunakan untuk menyorot objek yang dipilih." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "Tingkat minimal log untuk ditulis ke obrolan." + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Peta mini" @@ -5166,11 +5439,11 @@ #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "" +msgstr "Batas minimal nilai acak untuk gua besar per mapchunk." #: src/settings_translation_file.cpp msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Batas minimal nilai acak untuk gua kecil per mapchunk." #: src/settings_translation_file.cpp msgid "Minimum texture size" @@ -5241,20 +5514,16 @@ msgstr "Bisukan suara" #: 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" "Current mapgens in a highly unstable state:\n" "- The optional floatlands of v7 (disabled by default)." msgstr "" -"Nama dari pembuat peta yang digunakan saat membuat dunia baru.\n" +"Nama pembuat peta yang digunakan saat membuat dunia baru.\n" "Pembuatan dunia lewat menu utama akan menimpa ini.\n" -"Pembuat peta yang stabil saat ini:\n" -"v5, v6, v7 (kecuali floatland), flat, singlenode.\n" -"\"stabil\" berarti bentuk medan pada dunia yang telah ada tidak akan " -"berubah\n" -"pada masa depan. Catat bahwa bioma diatur oleh permainan dan dapat berubah." +"Pembuat peta yang tidak stabil saat ini:\n" +"- \"floatlands\" pada pembuat peta v7 (dimatikan secara bawaan)." #: src/settings_translation_file.cpp msgid "" @@ -5263,18 +5532,16 @@ "When starting from the main menu, this is overridden." msgstr "" "Nama pemain.\n" -"Saat menjalankan peladen, klien yang tersambung dengan nama ini adalah " +"Saat menjalankan server, klien yang tersambung dengan nama ini adalah " "admin.\n" "Saat menjalankan dari menu utama, nilai ini ditimpa." #: src/settings_translation_file.cpp msgid "" "Name of the server, to be displayed when players join and in the serverlist." -msgstr "" -"Nama peladen, ditampilkan saat pemain bergabung dan pada daftar peladen." +msgstr "Nama server, ditampilkan saat pemain bergabung dan pada daftar server." #: src/settings_translation_file.cpp -#, fuzzy msgid "Near plane" msgstr "Bidang dekat" @@ -5327,12 +5594,8 @@ msgstr "Jumlah utas kemunculan" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5344,16 +5607,16 @@ "'on_generated'. For many users the optimum setting may be '1'." msgstr "" "Jumlah utas kemunculan yang dipakai.\n" -"Kosong atau nilai 0:\n" +"Nilai 0:\n" "- Pemilihan otomatis. Utas kemunculan akan berjumlah\n" "- 'jumlah prosesor - 2', dengan batas bawah 1.\n" "Nilai lain:\n" "- Menentukan jumlah utas kemunculan, dengan batas bawah 1.\n" -"Peringatan: Penambahan jumlah utas kemunculan mempercepat mesin\n" -"pembuat peta, tetapi dapat merusak kinerja permainan dengan mengganggu\n" -"proses lain, terutama dalam pemain tunggal dan/atau saat menjalankan kode\n" -"Lua dalam \"on_generated\".\n" -"Untuk kebanyakan pengguna, pengaturan yang cocok adalah \"1\"." +"PERINGATAN: Penambahan jumlah utas kemunculan mempercepat mesin pembuat\n" +"peta, tetapi dapat merusak kinerja permainan dengan mengganggu proses lain,\n" +"terutama dalam pemain tunggal dan/atau saat menjalankan kode Lua dalam\n" +"\"on_generated\". Untuk kebanyakan pengguna, pengaturan yang cocok adalah \"1" +"\"." #: src/settings_translation_file.cpp msgid "" @@ -5381,12 +5644,12 @@ #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." -msgstr "" +msgstr "Keburaman (alfa) bayangan di belakang fon bawaan, antara 0 dan 255." #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255." -msgstr "" +msgstr "Keburaman (alfa) bayangan di belakang fon cadangan, antara 0 dan 255." #: src/settings_translation_file.cpp msgid "" @@ -5426,10 +5689,6 @@ msgstr "Skala parallax occlusion" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Kekuatan parallax occlusion" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5437,10 +5696,18 @@ "This font will be used for certain languages or if the default font is " "unavailable." msgstr "" +"Jalur ke fon cadangan.\n" +"Jika pengaturan \"freetype\" dinyalakan, harus fon TrueType.\n" +"Jika pengaturan \"freetype\" dimatikan, harus fon bitmap atau vektor XML.\n" +"Fon ini akan dipakai dalam bahasa tertentu jika tidak didukung fon bawaan." #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Jalur untuk menyimpan tangkapan layar." +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 "" +"Jalur penyimpanan tangkapan layar. Dapat berupa jalur absolut atau relatif.\n" +"Folder akan dibuat jika belum ada." #: src/settings_translation_file.cpp msgid "" @@ -5460,6 +5727,10 @@ "If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" "The fallback font will be used if the font cannot be loaded." msgstr "" +"Jalur ke fon bawaan.\n" +"Jika pengaturan \"freetype\" dinyalakan, harus fon TrueType.\n" +"Jika pengaturan \"freetype\" dimatikan, harus fon bitmap atau vektor XML.\n" +"Fon cadangan akan dipakai jika fon tidak dapat dimuat." #: src/settings_translation_file.cpp msgid "" @@ -5468,12 +5739,24 @@ "If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" "This font is used for e.g. the console and profiler screen." msgstr "" +"Jalur ke fon monospace.\n" +"Jika pengaturan \"freetype\" dinyalakan, harus fon TrueType.\n" +"Jika pengaturan \"freetype\" dimatikan, harus fon bitmap atau vektor XML.\n" +"Fon ini dipakai dalam layar konsol dan profiler." #: src/settings_translation_file.cpp msgid "Pause on lost window focus" msgstr "Jeda saat jendela hilang fokus" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "Batasan antrean blok yang dimuat dari diska per pemain" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "Batasan antrean blok yang dibuat per pemain" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Fisika" @@ -5491,7 +5774,7 @@ "This requires the \"fly\" privilege on the server." msgstr "" "Pemain dapat terbang tanpa terpengaruh gravitasi.\n" -"Hal ini membutuhkan izin \"fly\" pada peladen." +"Hal ini membutuhkan hak \"fly\" pada server." #: src/settings_translation_file.cpp msgid "Player name" @@ -5537,7 +5820,7 @@ #: src/settings_translation_file.cpp msgid "Privileges that players with basic_privs can grant" -msgstr "Izin yang dapat diberikan oleh pemain dengan basic_privs" +msgstr "Hak yang dapat diberikan oleh pemain dengan basic_privs" #: src/settings_translation_file.cpp msgid "Profiler" @@ -5552,11 +5835,23 @@ msgstr "Profiling" #: src/settings_translation_file.cpp -msgid "Proportion of large caves that contain liquid." +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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "Perbandingan gua besar yang punya cairan." + +#: 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." @@ -5581,9 +5876,8 @@ msgstr "Pesan obrolan terkini" #: src/settings_translation_file.cpp -#, fuzzy msgid "Regular font path" -msgstr "Jalur pelaporan" +msgstr "Jalur fon biasa" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5591,7 +5885,7 @@ #: src/settings_translation_file.cpp msgid "Remote port" -msgstr "Porta peladen jarak jauh" +msgstr "Porta server jarak jauh" #: src/settings_translation_file.cpp msgid "" @@ -5623,8 +5917,9 @@ "csm_restriction_noderange)\n" "READ_PLAYERINFO: 32 (disable get_player_names call client-side)" msgstr "" -"Batasi akses beberapa fungsi sisi klien pada peladen\n" -"Gabungkan flag bita berikut untuk membatasi fitur pada sisi klien:\n" +"Batasi akses beberapa fungsi sisi klien pada server\n" +"Gabungkan flag bita berikut untuk membatasi fitur pada sisi klien atau\n" +"atur ke 0 untuk tanpa batasan:\n" "LOAD_CLIENT_MODS: 1 (matikan pemuatan mod klien)\n" "CHAT_MESSAGES: 2 (cegah pemanggilan send_chat_message sisi klien)\n" "READ_ITEMDEFS: 4 (cegah pemanggilan get_item_def sisi klien)\n" @@ -5658,14 +5953,12 @@ msgstr "Jarak klik kanan berulang" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel depth" -msgstr "Kedalaman sungai" +msgstr "Kedalaman kanal sungai" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel width" -msgstr "Kedalaman sungai" +msgstr "Lebar kanal sungai" #: src/settings_translation_file.cpp msgid "River depth" @@ -5680,9 +5973,8 @@ msgstr "Ukuran sungai" #: src/settings_translation_file.cpp -#, fuzzy msgid "River valley width" -msgstr "Kedalaman sungai" +msgstr "Lebar ngarai sungai" #: src/settings_translation_file.cpp msgid "Rollback recording" @@ -5718,7 +6010,7 @@ #: src/settings_translation_file.cpp msgid "Saving map received from server" -msgstr "Simpan peta yang diterima dari peladen" +msgstr "Simpan peta yang diterima dari server" #: src/settings_translation_file.cpp msgid "" @@ -5799,7 +6091,6 @@ msgstr "Lebar kotak pilihan" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Selects one of 18 fractal types.\n" "1 = 4D \"Roundy\" Mandelbrot set.\n" @@ -5843,39 +6134,39 @@ #: src/settings_translation_file.cpp msgid "Server / Singleplayer" -msgstr "Peladen/Pemain tunggal" +msgstr "Server/Pemain tunggal" #: src/settings_translation_file.cpp msgid "Server URL" -msgstr "URL Peladen" +msgstr "URL server" #: src/settings_translation_file.cpp msgid "Server address" -msgstr "Alamat peladen" +msgstr "Alamat server" #: src/settings_translation_file.cpp msgid "Server description" -msgstr "Deskripsi peladen" +msgstr "Keterangan server" #: src/settings_translation_file.cpp msgid "Server name" -msgstr "Nama peladen" +msgstr "Nama server" #: src/settings_translation_file.cpp msgid "Server port" -msgstr "Port server" +msgstr "Porta server" #: src/settings_translation_file.cpp msgid "Server side occlusion culling" -msgstr "Occlusion culling sisi peladen" +msgstr "Occlusion culling sisi server" #: src/settings_translation_file.cpp msgid "Serverlist URL" -msgstr "URL daftar peladen" +msgstr "URL daftar server" #: src/settings_translation_file.cpp msgid "Serverlist file" -msgstr "Berkas daftar peladen" +msgstr "Berkas daftar server" #: src/settings_translation_file.cpp msgid "" @@ -5890,7 +6181,6 @@ msgstr "Atur jumlah karakter maksimum per pesan obrolan yang dikirim klien." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving leaves.\n" "Requires shaders to be enabled." @@ -5899,7 +6189,6 @@ "Membutuhkan penggunaan shader." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving liquids (like water).\n" "Requires shaders to be enabled." @@ -5908,7 +6197,6 @@ "Membutuhkan penggunaan shader." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving plants.\n" "Requires shaders to be enabled." @@ -5933,18 +6221,20 @@ "Ini hanya bekerja dengan video OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the default font. If 0, then shadow will not be " "drawn." -msgstr "Pergeseran bayangan fon, jika 0, bayangan tidak akan digambar." +msgstr "" +"Pergeseran bayangan fon bawaan dalam piksel. Jika 0, bayangan tidak akan " +"digambar." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the fallback font. If 0, then shadow will not " "be drawn." -msgstr "Pergeseran bayangan fon, jika 0, bayangan tidak akan digambar." +msgstr "" +"Pergeseran bayangan fon cadangan dalam piksel. Jika 0, bayangan tidak akan " +"digambar." #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -5960,7 +6250,7 @@ #: src/settings_translation_file.cpp msgid "Shutdown message" -msgstr "Pesan saat peladen mati" +msgstr "Pesan saat server dimatikan" #: src/settings_translation_file.cpp msgid "" @@ -5998,11 +6288,11 @@ #: src/settings_translation_file.cpp msgid "Small cave maximum number" -msgstr "" +msgstr "Nilai maksimum gua kecil" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "" +msgstr "Nilai minimum gua kecil" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." @@ -6040,11 +6330,11 @@ #: src/settings_translation_file.cpp msgid "Sneaking speed" -msgstr "Kecepatan menyelinap" +msgstr "Kelajuan menyelinap" #: src/settings_translation_file.cpp msgid "Sneaking speed, in nodes per second." -msgstr "" +msgstr "Kelajuan menyelinap dalam nodus per detik." #: src/settings_translation_file.cpp msgid "Sound" @@ -6071,14 +6361,24 @@ "File yang tidak ada akan diambil cara yang biasa." #: src/settings_translation_file.cpp -#, fuzzy +msgid "" +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." +msgstr "" +"Mengatur ukuran tumpukan bawaan untuk nodus, barang, dan alat.\n" +"Catat bahwa mod dan permainan dapat mengatur tumpukan untuk sebagian (atau " +"semua) barang." + +#: 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 "" -"Persebaran penguatan tengah kurva cahaya.\n" -"Simpangan baku dari penguatan tengah Gauss." +"Persebaran rentang penguatan kurva cahaya.\n" +"Mengatur lebar rentang yang dikuatkan.\n" +"Simpangan baku dari penguatan kurva cahaya Gauss." #: src/settings_translation_file.cpp msgid "Static spawnpoint" @@ -6097,6 +6397,10 @@ msgstr "Noise persebaran teras gunung" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "Kekuatan mode paralaks 3D." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Kekuatan normalmap yang dibuat." @@ -6106,10 +6410,9 @@ "The 3 'boost' parameters define a range of the light\n" "curve that is boosted in brightness." msgstr "" - -#: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Kekuatan dari parallax." +"Besar penguatan kurva cahaya.\n" +"Tiga parameter \"boost\" menentukan rentang kurva\n" +"cahaya yang dikuatkan menurut kecerahannya." #: src/settings_translation_file.cpp msgid "Strict protocol checking" @@ -6120,6 +6423,20 @@ msgstr "Buang kode warna" #: 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 the 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 "SQLite sinkron" @@ -6187,7 +6504,7 @@ "Tekstur pada nodus dapat disejajarkan, baik dengan nodus maupun dunia.\n" "Mode pertama cocok untuk mesin, furnitur, dll., sedangkan mode kedua\n" "cocok agar tangga dan mikroblok cocok dengan sekitarnya.\n" -"Namun, karena masih baru, ini tidak dipakai pada peladen lawas, pilihan ini\n" +"Namun, karena masih baru, ini tidak dipakai pada server lawas, pilihan ini\n" "bisa memaksakan untuk jenis nodus tertentu. Catat bahwa ini masih dalam\n" "tahap PERCOBAAN dan dapat tidak berjalan dengan semestinya." @@ -6231,21 +6548,27 @@ "Default is 1.0 (1/2 node).\n" "Requires waving liquids to be enabled." msgstr "" +"Tinggi maksimum permukaan ombak.\n" +"4.0 = Tinggi ombak dua nodus.\n" +"0.0 = Ombak tidak bergerak sama sekali.\n" +"Bawaannya 1.0 (1/2 nodus).\n" +"Membutuhkan air berombak untuk dinyalakan." #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." -msgstr "Antarmuka jaringan yang peladen dengarkan." +msgstr "Antarmuka jaringan yang server dengarkan." #: 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 "" -"Izin yang didapatkan pengguna baru otomatis.\n" -"Lihat /privs dalam permainan untuk daftar lengkap pada peladen Anda dan " -"konfigurasi mod." +"Hak yang didapatkan pengguna baru otomatis.\n" +"Lihat /privs dalam permainan untuk daftar lengkap pada konfigurasi mod dan " +"server Anda." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The radius of the volume of blocks around every player that is subject to " "the\n" @@ -6253,7 +6576,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" "Jari-jari ruang di sekitar pemain yang menjadi blok aktif, dalam blok peta\n" "(16 nodus).\n" @@ -6359,7 +6682,7 @@ #: src/settings_translation_file.cpp msgid "Time speed" -msgstr "Kecepatan waktu" +msgstr "Kelajuan waktu" #: src/settings_translation_file.cpp msgid "Timeout for client to remove unused map data from memory." @@ -6400,7 +6723,6 @@ msgstr "Pemfilteran trilinear" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "True = 256\n" "False = 128\n" @@ -6408,7 +6730,7 @@ msgstr "" "True = 256\n" "False = 128\n" -"Berguna untuk membuat peta mini lebih halus pada mesin yang lebih lambat." +"Berguna untuk membuat peta mini lebih halus pada mesin yang lambat." #: src/settings_translation_file.cpp msgid "Trusted mods" @@ -6416,14 +6738,13 @@ #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." -msgstr "URL ke daftar peladen yang tampil pada Tab Multipemain." +msgstr "URL ke daftar server yang tampil pada Tab Multipemain." #: src/settings_translation_file.cpp msgid "Undersampling" msgstr "Undersampling" #: 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" @@ -6433,7 +6754,8 @@ msgstr "" "Undersampling seperti menggunakan resolusi layar yang lebih rendah, tetapi\n" "hanya berlaku untuk dunia permainan saja, antarmuka grafis tetap.\n" -"Seharusnya memberikan dorongan performa dengan gambar yang kurang rinci." +"Seharusnya memberikan dorongan kinerja dengan gambar yang kurang detail.\n" +"Nilai yang lebih tinggi menghasilkan gambar yang kurang detail." #: src/settings_translation_file.cpp msgid "Unlimited player transfer distance" @@ -6441,13 +6763,17 @@ #: src/settings_translation_file.cpp msgid "Unload unused server data" -msgstr "Membongkar data peladen yang tak terpakai" +msgstr "Membongkar data server yang tak terpakai" #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." msgstr "Batas atas Y dungeon." #: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "Batas atas Y floatland." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Gunakan tampilan awan 3D daripada datar." @@ -6541,7 +6867,7 @@ #: src/settings_translation_file.cpp msgid "Vertical climbing speed, in nodes per second." -msgstr "" +msgstr "Kelajuan vertikal memanjat dalam nodus per detik." #: src/settings_translation_file.cpp msgid "Vertical screen synchronization." @@ -6584,13 +6910,12 @@ msgstr "Volume" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Volume of all sounds.\n" "Requires the sound system to be enabled." msgstr "" -"Gunakan pemetaan parallax occlusion.\n" -"Membutuhkan penggunaan shader." +"Volume semua suara.\n" +"Membutuhkan sistem suara untuk dinyalakan." #: src/settings_translation_file.cpp msgid "" @@ -6608,15 +6933,17 @@ #: src/settings_translation_file.cpp msgid "Walking and flying speed, in nodes per second." -msgstr "" +msgstr "Kelajuan jalan dan terbang dalan nodus per detik." #: src/settings_translation_file.cpp msgid "Walking speed" -msgstr "Kecepatan berjalan" +msgstr "Kelajuan jalan" #: src/settings_translation_file.cpp msgid "Walking, flying and climbing speed in fast mode, in nodes per second." msgstr "" +"Kelajuan jalan, terbang, dan memanjat dalam mode gerak cepat dalam nodus per " +"detik." #: src/settings_translation_file.cpp msgid "Water level" @@ -6635,24 +6962,20 @@ msgstr "Daun melambai" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids" -msgstr "Laimbaian Cairan" +msgstr "Air berombak" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wave height" -msgstr "Ketinggian ombak" +msgstr "Ketinggian ombak air" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wave speed" -msgstr "Kecepatan ombak" +msgstr "Kelajuan gelombang ombak" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wavelength" -msgstr "Panjang ombak" +msgstr "Panjang ombak air" #: src/settings_translation_file.cpp msgid "Waving plants" @@ -6705,14 +7028,14 @@ "otomatis tekstur yang sejajar dengan dunia." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Whether FreeType fonts are used, requires FreeType support to be compiled " "in.\n" "If disabled, bitmap and XML vectors fonts are used instead." msgstr "" "Apakah fon FreeType digunakan, membutuhkan dukungan FreeType saat " -"dikompilasi." +"dikompilasi.\n" +"Jika dimatikan, fon bitmap dan vektor XML akan dipakai." #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." @@ -6736,7 +7059,7 @@ "Set this to true if your server is set up to restart automatically." msgstr "" "Apakah meminta klien untuk menyambung ulang setelah kerusakan (Lua)?\n" -"Atur ke true jika peladen Anda diatur untuk mulai ulang otomatis." +"Atur ke true jika server Anda diatur untuk mulai ulang otomatis." #: src/settings_translation_file.cpp msgid "Whether to fog out the end of the visible area." @@ -6749,6 +7072,10 @@ "In-game, you can toggle the mute state with the mute key or by using the\n" "pause menu." msgstr "" +"Apakah akan membisukan suara atau tidak. Anda dapat membunyikan\n" +"suara kapan pun, kecuali sistem suara dimatikan (enable_sound = false).\n" +"Dalam permainan, Anda dapat beralih mode bisu dengan tombol bisu\n" +"atau melalui menu jeda." #: src/settings_translation_file.cpp msgid "" @@ -6794,12 +7121,11 @@ "See also texture_min_size.\n" "Warning: This option is EXPERIMENTAL!" msgstr "" -"Tekstur yang sejajar dengan dunia dapat diperbesar hingga beberapa\n" -"nodus. Namun, peladen mungkin tidak mengirimkan Perbesaran yang\n" -"Anda inginkan, terlebih jika Anda menggunakan paket tekstur yang\n" -"didesain khusus; dengan pilihan ini, klien mencoba untuk menentukan\n" -"perbesaran otomatis sesuai ukuran tekstur.\n" -"Lihat juga texture_min_size.\n" +"Tekstur yang sejajar dengan dunia dapat diperbesar hingga beberapa nodus.\n" +"Namun, server mungkin tidak mengirimkan perbesaran yang Anda inginkan,\n" +"terlebih jika Anda menggunakan paket tekstur yang didesain khusus; dengan\n" +"pilihan ini, klien mencoba untuk menentukan perbesaran otomatis sesuai\n" +"ukuran tekstur. Lihat juga texture_min_size.\n" "Peringatan: Pilihan ini dalam tahap PERCOBAAN!" #: src/settings_translation_file.cpp @@ -6827,6 +7153,14 @@ msgstr "Jarak Y dari gua besar untuk meluas ke ukuran penuh." #: 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 "Ketinggian Y dari permukaan medan rata-rata." @@ -6858,128 +7192,134 @@ msgid "cURL timeout" msgstr "Waktu habis untuk cURL" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Sesuaikan pengodean gamma untuk tabel cahaya.\n" -#~ "Angka yang lebih tinggi lebih terang.\n" -#~ "Pengaturan ini untuk klien saja dan diabaikan oleh peladen." +#~ msgid "Toggle Cinematic" +#~ msgstr "Mode sinema" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Ubah cara gunung floatland meramping di atas dan di bawah titik tengah." +#~ msgid "Select Package File:" +#~ msgstr "Pilih berkas paket:" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Titik tengah penguatan tengah kurva cahaya." +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Batas atas Y untuk lava dalam gua besar." -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Atur kepadatan floatland berbentuk gunung.\n" -#~ "Merupakan pergeseran yang ditambahkan ke nilai noise \"mgv7_np_mountain\"." +#~ msgid "Waving Water" +#~ msgstr "Air Berombak" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Mengatur lebar terowongan, nilai lebih kecil terowongan semakin lebar." +#~ msgid "Whether dungeons occasionally project from the terrain." +#~ msgstr "Apakah dungeon terkadang muncul dari medan." -#~ msgid "Darkness sharpness" -#~ msgstr "Kecuraman kegelapan" +#~ msgid "Projecting dungeons" +#~ msgstr "Dungeon yang menonjol" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." -#~ msgstr "" -#~ "Mengatur daerah dari medan halus floatland.\n" -#~ "Floatland halus muncul saat noise > 0." +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Ketinggian Y tempat bayangan floatland diperpanjang." -#~ msgid "Enable VBO" -#~ msgstr "Gunakan VBO" +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "Ketinggian Y dari titik tengah floatland dan permukaan danau." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Gunakan pemetaan suasana (tone mapping) filmis" +#~ msgid "Waving water" +#~ msgstr "Air berombak" -#~ msgid "Floatland base height noise" -#~ msgstr "Noise ketinggian dasar floatland" +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgstr "" +#~ "Variasi dari ketinggian bukit dan kedalaman danau pada medan halus " +#~ "floatland." -#~ msgid "Floatland base noise" -#~ msgstr "Noise dasar floatland" +#~ msgid "" +#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgstr "" +#~ "Ketinggian maksimum secara umum, di atas dan di bawah titik tengah, dari " +#~ "gunung floatland." -#~ msgid "Floatland level" -#~ msgstr "Ketinggian floatland" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Fon ini akan digunakan pada bahasa tertentu." -#~ msgid "Floatland mountain density" -#~ msgstr "Kepadatan gunung floatland" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Kekuatan penguatan tengah kurva cahaya." -#~ msgid "Floatland mountain exponent" -#~ msgstr "Pangkat gunung floatland" +#~ msgid "Shadow limit" +#~ msgstr "Batas bayangan" -#~ msgid "Floatland mountain height" -#~ msgstr "Ketinggian gunung floatland" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Jalur ke TrueTypeFont atau bitmap." -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "Keburaman bayangan fon (keopakan, dari 0 sampai 255)." +#~ msgid "Lightness sharpness" +#~ msgstr "Kecuraman keterangan" -#~ msgid "Gamma" -#~ msgstr "Gamma" +#~ msgid "Lava depth" +#~ msgstr "Kedalaman lava" #~ msgid "IPv6 support." #~ msgstr "Dukungan IPv6." -#~ msgid "Lava depth" -#~ msgstr "Kedalaman lava" +#~ msgid "Gamma" +#~ msgstr "Gamma" -#~ msgid "Lightness sharpness" -#~ msgstr "Kecuraman keterangan" +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "Keburaman bayangan fon (keopakan, dari 0 sampai 255)." -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Jalur ke TrueTypeFont atau bitmap." +#~ msgid "Floatland mountain height" +#~ msgstr "Ketinggian gunung floatland" -#~ msgid "Shadow limit" -#~ msgstr "Batas bayangan" +#~ msgid "Floatland base height noise" +#~ msgstr "Noise ketinggian dasar floatland" -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Kekuatan penguatan tengah kurva cahaya." +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Gunakan pemetaan suasana (tone mapping) filmis" -#~ msgid "This font will be used for certain languages." -#~ msgstr "Fon ini akan digunakan pada bahasa tertentu." +#~ msgid "Enable VBO" +#~ msgstr "Gunakan VBO" #~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." #~ msgstr "" -#~ "Ketinggian maksimum secara umum, di atas dan di bawah titik tengah, dari " -#~ "gunung floatland." +#~ "Mengatur daerah dari medan halus floatland.\n" +#~ "Floatland halus muncul saat noise > 0." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgid "Darkness sharpness" +#~ msgstr "Kecuraman kegelapan" + +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "" -#~ "Variasi dari ketinggian bukit dan kedalaman danau pada medan halus " -#~ "floatland." +#~ "Mengatur lebar terowongan, nilai lebih kecil terowongan semakin lebar." -#~ msgid "Waving water" -#~ msgstr "Air berombak" +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "Atur kepadatan floatland berbentuk gunung.\n" +#~ "Merupakan pergeseran yang ditambahkan ke nilai noise \"mgv7_np_mountain\"." -#~ msgid "Y-level of floatland midpoint and lake surface." -#~ msgstr "Ketinggian Y dari titik tengah floatland dan permukaan danau." +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Titik tengah penguatan tengah kurva cahaya." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Ketinggian Y tempat bayangan floatland diperpanjang." +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." +#~ msgstr "" +#~ "Ubah cara gunung floatland meramping di atas dan di bawah titik tengah." -#~ msgid "Projecting dungeons" -#~ msgstr "Dungeon yang menonjol" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Sesuaikan pengodean gamma untuk tabel cahaya.\n" +#~ "Angka yang lebih tinggi lebih terang.\n" +#~ "Pengaturan ini untuk klien saja dan diabaikan oleh peladen." -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "Apakah dungeon terkadang muncul dari medan." +#~ msgid "Path to save screenshots at." +#~ msgstr "Jalur untuk menyimpan tangkapan layar." -#~ msgid "Waving Water" -#~ msgstr "Air Berombak" +#~ msgid "Parallax occlusion strength" +#~ msgstr "Kekuatan parallax occlusion" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Batas atas Y untuk lava dalam gua besar." +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Batas antrean kemunculan (emerge queue) pada diska" -#~ msgid "Select Package File:" -#~ msgstr "Pilih berkas paket:" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Mengunduh dan memasang $1, mohon tunggu..." -#~ msgid "Toggle Cinematic" -#~ msgstr "Mode sinema" +#~ msgid "Back" +#~ msgstr "Kembali" + +#~ msgid "Ok" +#~ msgstr "Oke" diff -Nru minetest-5.2.0/po/it/minetest.po minetest-5.3.0/po/it/minetest.po --- minetest-5.2.0/po/it/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/it/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Italian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2019-11-13 16:04+0000\n" -"Last-Translator: Jacques Lagrange \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-26 10:41+0000\n" +"Last-Translator: Hamlet \n" "Language-Team: Italian \n" "Language: it\n" @@ -12,16 +12,20 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" -msgstr "Ricompari" +msgstr "Rinasci" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "You died" msgstr "Sei morto" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "Ok" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Si è verificato un errore in uno script Lua:" @@ -35,10 +39,6 @@ msgstr "Menu principale" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "OK" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Riconnettiti" @@ -96,35 +96,39 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "Disabilita pacchetto mod" +msgstr "Disattiva la raccolta di mod" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" -msgstr "Abilita tutto" +msgstr "Attiva tutto" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "Abilita pacchetto mod" +msgstr "Attiva la raccolta di mod" #: 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 "" -"Impossibile abilitare il mod \"$1\" poiché contiene caratteri non ammessi. " +"Impossibile abilitare la mod \"$1\" poiché contiene caratteri non ammessi. " "Sono ammessi solo i caratteri [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Trova più mod" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" #: builtin/mainmenu/dlg_config_world.lua msgid "No (optional) dependencies" -msgstr "Dipendenze facoltative" +msgstr "Nessuna dipendenza (facoltativa)" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." -msgstr "Non è stata fornita nessuna descrizione del gioco." +msgstr "Non è stata fornita alcuna descrizione del gioco." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" @@ -132,7 +136,7 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "Non è stata fornita nessuna descrizione del pacchetto mod." +msgstr "Non è stata fornita nessuna descrizione per la raccolta di mod." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" @@ -160,20 +164,20 @@ msgstr "Tutti i pacchetti" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Indietro" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Torna al Menu Principale" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Scaricamento e installazione di $1, attendere prego..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB non è disponibile quando Minetest viene compilato senza cuRL" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "Scaricamento..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" -msgstr "Impossibile scaricere $1" +msgstr "Impossibile scaricare $1" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -204,7 +208,7 @@ #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" -msgstr "Pacchetti di immagini" +msgstr "Raccolte di immagini" #: builtin/mainmenu/dlg_contentstore.lua msgid "Uninstall" @@ -214,42 +218,199 @@ msgid "Update" msgstr "Aggiorna" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Vedi" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Un mondo chiamato \"$1\" esiste già" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "Terreno aggiuntivo" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "Raffreddamento da altitudine" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "Siccità da altitudine" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Miscelatura biomi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Biomi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Caverne" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Grotte" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Crea" #: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Decorazioni" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" -msgstr "Scarica un gioco, per esempio Minetest Game, da minetest.net" +msgstr "Scarica un gioco, come Minetest Game, da minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" msgstr "Scaricane uno da minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Sotterranei" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Terreno piatto" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Pietre miliari fluttuanti nel cielo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Terre fluttuanti (sperimentale)" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Gioco" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Generare terreno non-frattale: oceani e sottoterra" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Colline" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Fiumi umidi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Aumenta l'umidità attorno ai fiumi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Laghi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "Bassa umidità e calore elevato producono fiumi bassi o secchi" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" msgstr "Generatore mappa" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Valori del generatore mappa" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Valori specifici del generatore di mappe" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Montagne" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Colata di fango" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Rete di gallerie e grotte" + #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" msgstr "Nessun gioco selezionato" #: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "Diminuisce il calore con l'altitudine" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "Diminuisce l'umidità con l'altitudine" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Fiumi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Fiumi a livello del mare" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" -msgstr "Seme di generazione" +msgstr "Seme" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Smooth transition between biomes" +msgstr "Transizione uniforme tra biomi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" +"Strutture che compaiono sul terreno (nessun effetto su alberi ed erba della " +"giungla creati dal v6)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "Strutture che compaiono sul terreno, tipicamente alberi e piante" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Temperato, Deserto" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Temperato, Deserto, Giungla" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Temperato, Deserto, Giungla, Tundra, Taiga" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "Erosione della superficie del terreno" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." -msgstr "Avvertimento: il Minimal Development Test è rivolto agli sviluppatori." +msgid "Trees and jungle grass" +msgstr "Alberi ed erba della giungla" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Diversifica la profondità dei fiumi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Caverne davvero grandi in profondità sottoterra" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." +msgstr "" +"Avvertimento: il Minimal Development Test è inteso per gli sviluppatori." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -261,13 +422,13 @@ #: builtin/mainmenu/dlg_delete_content.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "Sei sicuro di volere eliminare \"$1\"?" +msgstr "Siete sicuri di volere cancellare \"$1\"?" #: builtin/mainmenu/dlg_delete_content.lua #: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua #: src/client/keycode.cpp msgid "Delete" -msgstr "Elimina" +msgstr "Cancella" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: failed to delete \"$1\"" @@ -279,7 +440,7 @@ #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" -msgstr "Vuoi eliminare il mondo \"$1\"?" +msgstr "Cancellare il mondo \"$1\"?" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -287,15 +448,15 @@ #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "Rinomina il pacchetto mod:" +msgstr "Rinomina la raccolta di mod:" #: 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 "" -"Questo pacchetto mod ha un nome esplicito datogli nel suo modpack.conf che " -"ignorerà qualsiasi rinominazione qui effettuata." +"Questa raccolta di mod esplicita un nome in modpack.conf che sovrascriverà " +"ogni modifica qui fatta." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" @@ -307,7 +468,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "< Back to Settings page" -msgstr "< Torna alle impostazioni" +msgstr "< Torna a Impostazioni" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Browse" @@ -323,7 +484,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Enabled" -msgstr "Abilitat*" +msgstr "Abilitato" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Lacunarity" @@ -335,7 +496,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" -msgstr "Spostamento" +msgstr "Scarto" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Persistance" @@ -351,7 +512,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Restore Default" -msgstr "Ripristina predefiniti" +msgstr "Ripristina" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Scale" @@ -375,7 +536,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must not be larger than $1." -msgstr "Il valore non deve essere maggiore di $1." +msgstr "Il valore deve essere più piccolo di $1." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X" @@ -443,8 +604,8 @@ #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -"Installa mod: Impossibile trovare un nome cartella corretto per il pacchetto " -"mod $1" +"Installa mod: Impossibile trovare un nome cartella corretto per la raccolta " +"di mod $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install: Unsupported file type \"$1\" or broken archive" @@ -456,11 +617,11 @@ #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" -msgstr "Impossibile trovare un mod o un pacchetto mod valido" +msgstr "Impossibile trovare un mod o una raccolta di mod validi" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" -msgstr "Impossibile installare un $1 come un pacchetto di immagini" +msgstr "Impossibile installare un $1 come una raccolta di immagini" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a game as a $1" @@ -472,7 +633,7 @@ #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a modpack as a $1" -msgstr "Impossibile installare un pacchetto mod come un $1" +msgstr "Impossibile installare una raccolta di mod come un $1" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" @@ -484,7 +645,7 @@ #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" -msgstr "Disabilita pacchetto di immagini" +msgstr "Disattiva raccolta immagini" #: builtin/mainmenu/tab_content.lua msgid "Information:" @@ -500,7 +661,7 @@ #: builtin/mainmenu/tab_content.lua msgid "No package description available" -msgstr "Nessuna descrizione disponibile per il pacchetto" +msgstr "Nessuna descrizione disponibile per la raccolta" #: builtin/mainmenu/tab_content.lua msgid "Rename" @@ -508,11 +669,11 @@ #: builtin/mainmenu/tab_content.lua msgid "Uninstall Package" -msgstr "Disinstalla pacchetto" +msgstr "Disinstalla la raccolta" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" -msgstr "Utilizza pacchetto di immagini" +msgstr "Usa la raccolta di immagini" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" @@ -563,6 +724,10 @@ msgstr "Ospita un server" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Installa giochi dal ContentDB" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Nome/Password" @@ -608,7 +773,7 @@ #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" -msgstr "Ferimento abilitato" +msgstr "Danno fisico abilitato" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Del. Favorite" @@ -1218,6 +1383,14 @@ msgstr "Suono disattivato" #: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "Il sistema audio è disabilitato" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "Il sistema audio non è supportato su questa build" + +#: src/client/game.cpp msgid "Sound unmuted" msgstr "Suono attivato" @@ -1249,7 +1422,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "Ingrandimento attualmente disabilitato dal gioco o da un mod" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "va bene" @@ -1759,9 +1932,8 @@ "(Android) Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" -"(Android) Fissa la posizione del joytick virtuale.\n" -"Se disabilitato, il joystick sarà centrato alla\n" -"posizione del primo tocco." +"(Android) Fissa la posizione del joystick virtuale.\n" +"Se disabilitato, il joystick sarà centrato alla posizione del primo tocco." #: src/settings_translation_file.cpp msgid "" @@ -1774,7 +1946,6 @@ "quando fuori dal cerchio principale." #: 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" @@ -1785,17 +1956,17 @@ "situations.\n" "Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" -"Spostamento (X,Y,Z) del frattale dal centro del mondo in\n" -"unità di \"scala\".\n" -"Può essere usato per spostare un punto desiderato a (0,0)\n" -"per creare un punto di comparsa adatto, o per consentire\n" -"l'ingrandimento su di un punto desiderato per mezzo\n" -"dell'aumento della \"scala\".\n" -"Il valore predefinito è regolato per un punto di comparsa\n" -"opportuno con le serie Mandelbrot che usino i parametri\n" -"predefiniti, potrebbe richiedere modifiche in altre situazioni.\n" -"Varia grossomodo da -2 a 2. Si moltiplichi per \"scala\" per\n" -"lo spostamento in nodi." +"Scarto (X,Y,Z) del frattale dal centro del mondo in unità di \"scala\".\n" +"Può essere usato per spostare un punto desiderato a (0,0) per creare un\n" +"punto di comparsa adatto, o per consentire l'ingrandimento su di un punto " +"desiderato\n" +"per mezzo dell'aumento della \"scala\".\n" +"Il valore predefinito è regolato per un punto di comparsa opportuno con le " +"serie Mandelbrot\n" +"che usino i parametri predefiniti, potrebbe richiedere modifiche in altre\n" +"situazioni.\n" +"Varia grossomodo da -2 a 2. Si moltiplichi per \"scala\" per lo scarto in " +"nodi." #: src/settings_translation_file.cpp msgid "" @@ -1808,15 +1979,14 @@ "an island, set all 3 numbers equal for the raw shape." msgstr "" "Scala (X,Y,Z) del frattale in nodi.\n" -"La dimensione effettiva del frattale sarà due o tre volte\n" -"più grande.\n" -"Questi numeri possono essere impostati su valori molto\n" -"alti, il frattale non deve necessariamente rientrare nel\n" -"mondo.\n" +"La dimensione effettiva del frattale sarà due o tre volte più grande.\n" +"Questi numeri possono essere impostati su valori molto alti, il frattale non " +"deve\n" +"necessariamente rientrare nel mondo.\n" "Li si aumenti per \"ingrandire\" nel dettaglio del frattale.\n" -"Il valore predefinito è per una forma schiacciata\n" -"verticalmente, adatta a un'isola, si impostino tutti e tre\n" -"i numeri sullo stesso valore per la forma grezza." +"Il valore predefinito è per una forma schiacciata verticalmente, adatta\n" +"a un'isola, si impostino tutti e tre i numeri sullo stesso valore per la " +"forma grezza." #: src/settings_translation_file.cpp msgid "" @@ -1865,6 +2035,10 @@ msgstr "Modalità 3D" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "Intensità della modalità 3D di parallasse" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "Rumore 3D che definisce le caverne giganti." @@ -1877,6 +2051,20 @@ "Definisce anche la struttura del terreno montano delle terre fluttuanti." #: 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 "" +"Rumore 3D che stabilisce la struttura delle terre fluttuanti.\n" +"Se cambiata dal valore predefinito, la 'scala' di rumore (0.7 in modo " +"predefinito) potrebbe necessitare\n" +"d'essere aggiustata, dato che l'affusolamento delle terre fluttuanti " +"funziona meglio quando questo rumore\n" +"ha un intervallo di valori approssimativamente tra -2.0 e 2.0." + +#: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." msgstr "Rumore 3D che definisce la struttura dei muri dei canyon dei fiumi." @@ -1941,8 +2129,8 @@ msgstr "Intervallo ABM" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" -msgstr "Limite assoluto di code emerge" +msgid "Absolute limit of queued blocks to emerge" +msgstr "Limite assoluto di blocchi in coda da fare apparire" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -1992,6 +2180,23 @@ "es. per schermi 4K." #: 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 "" +"Aggiusta la densità dello strato della terra fluttuante.\n" +"Si aumenti il valore per aumentare la densità. Può essere positivo o " +"negativo.\n" +"Valore = 0.0: 50% del volume è terra fluttuante.\n" +"Value = 2.0 (può essere maggiore dipendentemente da 'mgv7_np_floatland', " +"provate sempre\n" +"per essere sicuri) crea uno strato solido di terre fluttuanti." + +#: src/settings_translation_file.cpp msgid "Advanced" msgstr "Avanzate" @@ -2003,10 +2208,12 @@ "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 "Altitude chill" -msgstr "Raffreddamento altitudine" +"Altera la curva di luce applicandovi la 'correzione gamma'.\n" +"Valori più alti rendono più luminosi i livelli di luce medi e inferiori.\n" +"Il valore '1.0' lascia inalterata la curva di luce.\n" +"Questo ha un effetto significativo solo sulla luce diurna e sulla luce " +"artificiale,\n" +"ha pochissimo effetto sulla luce notturna naturale." #: src/settings_translation_file.cpp msgid "Always fly and fast" @@ -2057,9 +2264,8 @@ "Arm inertia, gives a more realistic movement of\n" "the arm when the camera moves." msgstr "" -"Inerzia del braccio, dà un movimento più\n" -"realistico al braccio quando si muove la\n" -"visuale." +"Inerzia del braccio, dà un movimento più realistico\n" +"al braccio quando si sposta la visuale." #: src/settings_translation_file.cpp msgid "Ask to reconnect after crash" @@ -2162,24 +2368,20 @@ msgstr "Distanza di ottimizzazione dell'invio dei blocchi" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic font path" -msgstr "Percorso del carattere a spaziatura fissa" +msgstr "Percorso dei caratteri in grassetto e corsivo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic monospace font path" -msgstr "Percorso del carattere a spaziatura fissa" +msgstr "Percorso dei font monospaziali in grassetto e corsivo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold font path" -msgstr "Percorso del carattere" +msgstr "Percorso dei caratteri in grassetto" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold monospace font path" -msgstr "Percorso del carattere a spaziatura fissa" +msgstr "Percorso caratteri monospaziale in grassetto" #: src/settings_translation_file.cpp msgid "Build inside player" @@ -2194,14 +2396,13 @@ msgstr "Bumpmapping" #: src/settings_translation_file.cpp -#, fuzzy 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" "Increasing can reduce artifacting on weaker GPUs.\n" "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" -"Distanza in nodi del \"piano di ritaglio vicino\" alla telecamera, tra 0 e " +"Distanza dei nodi del \"piano di ritaglio vicino\" alla telecamera, tra 0 e " "0.5.\n" "La maggior parte degli utenti non dovrà cambiarla.\n" "Aumentarla può ridurre l'artificialità sulle GPU più deboli.\n" @@ -2268,6 +2469,8 @@ "Center of light curve boost range.\n" "Where 0.0 is minimum light level, 1.0 is maximum light level." msgstr "" +"Centro della gamma di amplificazione della curva di luce.\n" +"Dove 0.0 è il livello di luce minimo, 1.0 è il livello di luce massimo." #: src/settings_translation_file.cpp msgid "" @@ -2286,10 +2489,18 @@ "Potrebbe servire per gli schermi più piccoli." #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "Dimensione del carattere dell'area di messaggistica" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Tasto della chat" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "Livello del registro dell'area di messaggistica" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "Numero limite dei messaggi di chat" @@ -2407,9 +2618,10 @@ "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 "" -"Elenco separato da virgole dei mod fidati ai quali è permesso l'accesso\n" -"a funzioni non sicure anche quando è attiva la sicurezza dei moduli\n" -"(tramite request_insecure_environment()." +"Elenco separato da virgole dei mod fidati ai quali è permesso l'accesso a " +"funzioni non sicure\n" +"anche quando è attiva la sicurezza dei moduli (tramite " +"request_insecure_environment()." #: src/settings_translation_file.cpp msgid "Command key" @@ -2457,8 +2669,8 @@ "Press the autoforward key again or the backwards movement to disable." msgstr "" "Avanzamento continuo, scelto dal tasto avanzamento automatico.\n" -"Premi nuovamente il tasto avanzamento automatico o il tasto di\n" -"arretramento per disabilitarlo." +"Premi nuovamente il tasto avanzamento automatico o il tasto di arretramento " +"per disabilitarlo." #: src/settings_translation_file.cpp msgid "Controls" @@ -2492,6 +2704,11 @@ "Value >= 10.0 completely disables generation of tunnels and avoids the\n" "intensive noise calculations." msgstr "" +"Controlla la larghezza delle gallerie, un valore più piccolo crea gallerie " +"più ampie.\n" +"Il valore >= 10.0 disabilita completamente la generazione di tunnel ed evita " +"l'opzione\n" +"calcoli intensivi del rumore." #: src/settings_translation_file.cpp msgid "Crash message" @@ -2542,9 +2759,8 @@ msgstr "Tasto dim. volume" #: src/settings_translation_file.cpp -#, fuzzy msgid "Decrease this to increase liquid resistance to movement." -msgstr "Va diminuito per aumentare la resistenza al movimento nel liquido." +msgstr "Decrementalo per aumentare la resistenza al movimento nel liquido." #: src/settings_translation_file.cpp msgid "Dedicated server step" @@ -2579,6 +2795,10 @@ msgstr "Formato di rapporto predefinito" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "Dimensione predefinita della pila" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2657,8 +2877,7 @@ "down the rate of mesh updates, thus reducing jitter on slower clients." msgstr "" "Ritardo in ms tra gli aggiornamenti delle mesh sul client. Aumentandolo si\n" -"ritarderà il ritmo di aggiornamento delle mesh, riducendo così lo " -"sfarfallio\n" +"ritarderà il ritmo di aggiornamento delle mesh, riducendo così lo sfarfallio " "sui client più lenti." #: src/settings_translation_file.cpp @@ -2754,6 +2973,8 @@ "Enable IPv6 support (for both client and server).\n" "Required for IPv6 connections to work at all." msgstr "" +"Abilitare il supporto IPv6 (sia per il client che per il server).\n" +"Necessario per il funzionamento delle connessioni IPv6." #: src/settings_translation_file.cpp msgid "" @@ -2823,9 +3044,9 @@ msgstr "" "Abilitare per impedire ai client obsoleti di connettersi.\n" "I client più vecchi sono compatibili nel senso che non andranno in crash " -"alla\n" -"connessione ai nuovi server, ma potrebbero non supportare tutte le nuove\n" -"caratteristiche che ti aspetti." +"alla connessione\n" +"ai nuovi server, ma potrebbero non supportare tutte le nuove caratteristiche " +"che ti aspetti." #: src/settings_translation_file.cpp msgid "" @@ -2845,6 +3066,8 @@ "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 "" @@ -2855,14 +3078,14 @@ "Per esempio: 0 per nessun ondeggiamento, 1.0 per normale, 2.0 per doppio." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enable/disable running an IPv6 server.\n" "Ignored if bind_address is set.\n" "Needs enable_ipv6 to be enabled." msgstr "" "Abilita/Disabilita l'esecuzione di un server IPv6.\n" -"Ignorata se si imposta bind_address." +"Ignorata se si imposta bind_address.\n" +"Necessita di enable_ipv6 per essere abilitata." #: src/settings_translation_file.cpp msgid "" @@ -2871,6 +3094,12 @@ "appearance of high dynamic range images. Mid-range contrast is slightly\n" "enhanced, highlights and shadows are gradually compressed." msgstr "" +"Abilita la mappatura dei toni filmici \"Uncharted 2\" di Hable.\n" +"Simula la curva di tono della pellicola fotografica e come questa approssimi " +"la\n" +"comparsa di immagini ad alta gamma dinamica. Il contrasto a medio raggio è " +"leggermente\n" +"potenziato, i punti salienti e le ombre vengono gradualmente compressi." #: src/settings_translation_file.cpp msgid "Enables animation of inventory items." @@ -2883,9 +3112,8 @@ "or need to be auto-generated.\n" "Requires shaders to be enabled." msgstr "" -"Attiva il bumpmapping per le immagini. È necessario fornire le normalmap con " -"il\n" -"pacchetto di immagini, o devono essere generate automaticamente.\n" +"Attiva il bumpmapping per le immagini. È necessario fornire le normalmap\n" +"con la raccolta di immagini, o devono essere generate automaticamente.\n" "Necessita l'attivazione degli shader." #: src/settings_translation_file.cpp @@ -2919,6 +3147,11 @@ "sound controls will be non-functional.\n" "Changing this setting requires a restart." msgstr "" +"Abilita il sistema audio.\n" +"Se disabilitato, disabilita completamente tutti i suoni ovunque e i " +"controlli audio\n" +"nel gioco non saranno funzionanti.\n" +"Cambiare questa impostazione richiede un riavvio." #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" @@ -2937,6 +3170,24 @@ "quando impostata su numeri maggiori di 0." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "" +"Esponente dell'affusolamento delle terre fluttuanti. Cambia il comportamento " +"di affusolamento.\n" +"Valore = 1.0 crea un affusolamento uniforme, lineare.\n" +"Valori > 1.0 creano un affusolamento uniforme adatto alle\n" +"terre fluttuanti separate predefinite.\n" +"Valori < 1.0 (per esempio 0.25) creano un livello di superficie più definito " +"con\n" +"pianure più piatte, adatti a uno strato solido di terre fluttuanti." + +#: src/settings_translation_file.cpp msgid "FPS in pause menu" msgstr "FPS nel menu di pausa" @@ -2953,9 +3204,8 @@ msgstr "Fattore di ondeggiamento in caduta" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "Carattere di ripiego" +msgstr "Percorso del carattere di ripiego" #: src/settings_translation_file.cpp msgid "Fallback font shadow" @@ -3030,13 +3280,12 @@ "light edge to transparent textures. Apply this filter to clean that up\n" "at texture load time." msgstr "" -"Le immagini a cui si applicano i filtri possono amalgamare i valori RGB\n" -"con quelle vicine completamente trasparenti; normalmente vengono\n" -"scartati dagli ottimizzatori PNG, risultando a volte in immagini " -"trasparenti\n" -"scure o dai bordi chiari. Applicare questo filtro aiuta a ripulire tutto ciò " -"al\n" -"momento del caricamento dell'immagine." +"Le immagini a cui si applicano i filtri possono amalgamare i valori RGB con " +"quelle vicine completamente trasparenti,\n" +"che normalmente vengono scartati dagli ottimizzatori PNG, risultando a volte " +"in immagini trasparenti scure o\n" +"dai bordi chiari. Applicare questo filtro aiuta a ripulire tutto ciò\n" +"al momento del caricamento dell'immagine." #: src/settings_translation_file.cpp msgid "Filtering" @@ -3061,6 +3310,34 @@ msgstr "Joystick virtuale fisso" #: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "Densità delle terre fluttuanti" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "Y massimo delle terre fluttuanti" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "Y minimo delle terre fluttuanti" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "Rumore delle terre fluttuanti" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "Esponente dell'affusolamento delle terre fluttuanti" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "Distanza di affusolamento delle terre fluttuanti" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "Livello dell'acqua delle terre fluttuanti" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Tasto volo" @@ -3082,11 +3359,11 @@ #: src/settings_translation_file.cpp msgid "Font bold by default" -msgstr "" +msgstr "Carattere grassetto per impostazione predefinita" #: src/settings_translation_file.cpp msgid "Font italic by default" -msgstr "" +msgstr "Carattere corsivo per impostazione predefinita" #: src/settings_translation_file.cpp msgid "Font shadow" @@ -3102,15 +3379,24 @@ #: src/settings_translation_file.cpp msgid "Font size of the default font in point (pt)." -msgstr "" +msgstr "Dimensione carattere del carattere predefinito, in punti (pt)." #: src/settings_translation_file.cpp msgid "Font size of the fallback font in point (pt)." -msgstr "" +msgstr "Dimensione carattere del carattere di ripiego, in punti (pt)." #: src/settings_translation_file.cpp msgid "Font size of the monospace font in point (pt)." +msgstr "Dimensione carattere del carattere a spaziatura fissa, in punti (pt)." + +#: 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 "" +"Dimensione carattere del testo e del prompt dell'area di messaggistica, in " +"punti (pt).\n" +"Valore 0 userà la dimensione carattere predefinita." #: src/settings_translation_file.cpp msgid "" @@ -3209,7 +3495,7 @@ "\n" "Impostarla maggiore di active_block_range provocherà il mantenimento\n" "degli oggetti attivi, fino a questa distanza, da parte del server, nella\n" -"direzione in cui guarda il giocatore. (Ciò può impedire l'improvvisa\n" +"direzione in cui guarda il giocatore. (Ciò può evitare l'improvvisa " "scomparsa dei mob)" #: src/settings_translation_file.cpp @@ -3251,23 +3537,26 @@ "and junglegrass, in all other mapgens this flag controls all decorations." msgstr "" "Attributi globali di generazione della mappa.\n" -"In Mapgen v6 il valore 'decorations' controlla tutte le decorazioni\n" -"eccetto alberi ed erba della giungla, in tutti gli altri questa opzione\n" -"controlla tutte le decorazioni." +"In Mapgen v6 il valore 'decorations' controlla tutte le decorazioni eccetto " +"alberi\n" +"ed erba della giungla, in tutti gli altri questa opzione controlla tutte le " +"decorazioni." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Gradient of light curve at maximum light level.\n" "Controls the contrast of the highest light levels." -msgstr "Gradiente della curva della luce al livello massimo di luce." +msgstr "" +"Gradiente della curva della luce al livello massimo di luce.\n" +"Controlla il contrasto dei massimi livelli di luce." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Gradient of light curve at minimum light level.\n" "Controls the contrast of the lowest light levels." -msgstr "Gradiente della curva della luce al livello minimo di luce." +msgstr "" +"Gradiente della curva della luce al livello minimo di luce.\n" +"Controlla il contrasto dei livelli di luce più bassi." #: src/settings_translation_file.cpp msgid "Graphics" @@ -3298,7 +3587,6 @@ msgstr "Tasto di scelta del visore" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- legacy: (try to) mimic old behaviour (default for release).\n" @@ -3306,10 +3594,10 @@ "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" "Gestione delle chiamate deprecate alle API Lua:\n" -"- legacy (ereditaria): (prova a) simulare il vecchio comportamento " -"(predefinito per i rilasci).\n" -"- log (registro): simula e registra la traccia della chiamata deprecata " -"(predefinito per il debug).\n" +"- legacy (ereditaria): (prova a) simulare il vecchio comportamento (" +"predefinito per i rilasci).\n" +"- log (registro): simula e registra la traccia della chiamata deprecata (" +"predefinito per il debug).\n" "- error (errore): interrompere all'uso della chiamata deprecata (suggerito " "per lo sviluppo di moduli)." @@ -3549,6 +3837,9 @@ "If negative, liquid waves will move backwards.\n" "Requires waving liquids to be enabled." msgstr "" +"Con quale velocità si muovono le onde dei liquidi. Più alto = più veloce.\n" +"Se negativo, le onde dei liquidi si sposteranno all'indietro.\n" +"Richiede l'abilitazione dei liquidi ondulanti." #: src/settings_translation_file.cpp msgid "" @@ -3607,11 +3898,13 @@ "invisible\n" "so that the utility of noclip mode is reduced." msgstr "" -"Se abilitata il sever effettuerà l'occlusion culling dei blocchi mappa\n" -"basandosi sulla posizione degli occhi del giocatore. Questo può\n" -"ridurre del 50-80% il numero dei blocchi inviati al client. Il client non\n" -"riceverà più i blocchi più invisibili cosicché l'utilità della modalità\n" -"incorporea è ridotta." +"Se abilitata il server effettuerà l'occlusion culling dei blocchi mappa " +"basandosi\n" +"sulla posizione degli occhi del giocatore. Questo può ridurre del 50-80% il " +"numero dei blocchi\n" +"inviati al client. Il client non riceverà più la maggior parte degli " +"invisibili\n" +"cosicché l'utilità della modalità incorporea è ridotta." #: src/settings_translation_file.cpp msgid "" @@ -3630,7 +3923,8 @@ "descending." msgstr "" "Se abilitata, si usa il tasto \"speciale\" invece di \"striscia\" per " -"arrampicarsi o scendere." +"arrampicarsi e\n" +"scendere." #: src/settings_translation_file.cpp msgid "" @@ -3649,8 +3943,8 @@ "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 "" -"Se abilitata, i dati non validi del mondo non provocheranno lo\n" -"spegnimento del server.\n" +"Se abilitata, i dati non validi del mondo non provocheranno lo spegnimento " +"del server.\n" "Attivala solo se sai cosa stai facendo." #: src/settings_translation_file.cpp @@ -3802,14 +4096,12 @@ msgstr "Inverte il movimento verticale del mouse." #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic font path" -msgstr "Percorso del carattere a spaziatura fissa" +msgstr "Percorso del carattere corsivo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic monospace font path" -msgstr "Percorso del carattere a spaziatura fissa" +msgstr "Percorso del carattere corsivo a spaziatura fissa" #: src/settings_translation_file.cpp msgid "Item entity TTL" @@ -3826,11 +4118,11 @@ "increases processing load.\n" "At iterations = 20 this mapgen has a similar load to mapgen V7." msgstr "" -"Iterazioni della funzione ricorrente.\n" -"Aumentarle aumenta l'ammontare del dettaglio fine, ma\n" -"aumenta anche il carico di elaborazione.\n" -"A iterazioni = 20 questo generatore di mappe ha un carico\n" -"simile al generatore di mappe v7." +"Iterazioni della funzione ricorsiva.\n" +"Aumentarle aumenta l'ammontare del dettaglio fine,\n" +"ma aumenta anche il carico di elaborazione.\n" +"A iterazioni = 20 questo generatore di mappe ha un carico simile al " +"generatore di mappe v7." #: src/settings_translation_file.cpp msgid "Joystick ID" @@ -4643,15 +4935,15 @@ #: src/settings_translation_file.cpp msgid "Large cave maximum number" -msgstr "" +msgstr "Numero massimo di grotte di grandi dimensioni" #: src/settings_translation_file.cpp msgid "Large cave minimum number" -msgstr "" +msgstr "Numero minimo di caverne di grandi dimensioni" #: src/settings_translation_file.cpp msgid "Large cave proportion flooded" -msgstr "" +msgstr "Proporzione inondata della grotta grande" #: src/settings_translation_file.cpp msgid "Large chat console key" @@ -4688,13 +4980,12 @@ "sono aggiornati in generale sulla rete." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of liquid waves.\n" "Requires waving liquids to be enabled." msgstr "" -"Impostata su vero abilita le foglie ondeggianti.\n" -"Necessita l'attivazione degli shader." +"Lunghezza delle onde dei liquidi.\n" +"Richiede l'attivazione dei liquidi ondeggianti." #: src/settings_translation_file.cpp msgid "Length of time between Active Block Modifier (ABM) execution cycles" @@ -4731,42 +5022,28 @@ "- verbose (verboso)" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost" -msgstr "Aumento mediano della curva di luce" +msgstr "Aumento della curva di luce" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost center" -msgstr "Centro dell'aumento mediano della curva di luce" +msgstr "Centro dell'aumento della curva di luce" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost spread" -msgstr "Diffusione dell'aumento mediano della curva di luce" +msgstr "Diffusione dell'aumento della curva di luce" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve gamma" -msgstr "Aumento mediano della curva di luce" +msgstr "Gamma della curva di luce" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve high gradient" -msgstr "Aumento mediano della curva di luce" +msgstr "Gradiente alto della curva di luce" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve low gradient" -msgstr "Centro dell'aumento mediano della curva di luce" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Limite di code emerge su disco" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Limite di code emerge da generare" +msgstr "Gradiente basso della curva di luce" #: src/settings_translation_file.cpp msgid "" @@ -4776,8 +5053,7 @@ msgstr "" "Limite della generazione della mappa, in nodi, in tutte e sei le direzioni " "da (0,0,0).\n" -"Sono generati solo i pezzi di mappa completamente all'interno del limite " -"del\n" +"Sono generati solo i pezzi di mappa completamente all'interno del limite del " "generatore di mappe.\n" "Il valore è immagazzinato per ciascun mondo." @@ -4848,6 +5124,10 @@ msgstr "Limite inferiore Y dei sotterranei." #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "Limite inferiore Y delle terre fluttuanti." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Script del menu principale" @@ -4881,26 +5161,24 @@ "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 "" -"Attributi di generazione della mappa specifici del generatore di mappe " -"Flat.\n" -"Al mondo piatto si possono aggiungere laghi e colline occasionali." +"Attributi di generazione della mappa specifici del generatore di mappe Flat." +"\n" +"Al mondo piatto possono essere aggiunti laghi e colline occasionali." #: 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 "" "Attributi di generazione della mappa specifici del generatore di mappe " -"piatto.\n" +"frattale.\n" "'terrain' abilita la generazione di terreno non-frattale:\n" -"oceano, isole e sotterranei." +"oceano, isole e sottoterra." #: src/settings_translation_file.cpp msgid "" @@ -4939,10 +5217,14 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." -msgstr "" -"Attributi di generazione della mappa specifici del generatore di mappe v7.\n" -"\"ridges\" abilita i fiumi." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." +msgstr "" +"Attributi di generazione mappa specifici per il generatore di mappe v7.\n" +"'ridges': fiumi.\n" +"'floatlands': masse di terra fluttuanti nell'atmosfera.\n" +"'caverns': caverne giganti profondamente sottoterra." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5029,10 +5311,6 @@ msgstr "Debug del generatore mappa" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Valori del generatore mappa" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Nome del generatore mappa" @@ -5075,18 +5353,18 @@ #: src/settings_translation_file.cpp msgid "Maximum limit of random number of large caves per mapchunk." msgstr "" +"Limite massimo di grotte casuali di grandi dimensioni per pezzo di mappa." #: src/settings_translation_file.cpp msgid "Maximum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Limite massimo di piccole grotte casuali per pezzo di mappa." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum liquid resistance. Controls deceleration when entering liquid at\n" "high speed." msgstr "" -"Resistenza massima dei liquidi. Gestisce la decelerazione \n" +"Resistenza massima dei liquidi. Controlla la decelerazione \n" "quando si entra ad alta velocità in un liquido." #: src/settings_translation_file.cpp @@ -5107,20 +5385,18 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Numero massimo di blocchi da accodarsi che devono essere generati.\n" -"Lascia vuoto per fare in modo che venga scelto automaticamente un\n" -"ammontare adeguato." +"Questo limite viene imposto per ciascun giocatore." #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Numero massimo di blocchi da accodarsi che devono essere caricati da file.\n" -"Lascia vuoto per fare in modo che venga scelto automaticamente un\n" -"ammontare adeguato." +"Questo limite viene imposto per ciascun giocatore." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5220,6 +5496,10 @@ msgstr "Metodo usato per evidenziare l'oggetto scelto." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "Livello di registro minimo da scriversi nell'area di messaggistica." + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Minimappa" @@ -5232,13 +5512,13 @@ msgstr "Altezza di scansione della minimappa" #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "Rumore 3D che stabilisce il numero di segrete per blocco di mondo." +msgstr "" +"Limite minimo di grotte casuali di grandi dimensioni per pezzo di mappa." #: src/settings_translation_file.cpp msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Limite minimo di piccole grotte casuali per pezzo di mappa." #: src/settings_translation_file.cpp msgid "Minimum texture size" @@ -5327,8 +5607,8 @@ "When starting from the main menu, this is overridden." msgstr "" "Nome del giocatore.\n" -"Quando si esegue un server, i client che si connettono con questo nome\n" -"sono amministratori.\n" +"Quando si esegue un server, i client che si connettono con questo nome sono " +"amministratori.\n" "Quando si avvia dal menu principale, questo viene scavalcato." #: src/settings_translation_file.cpp @@ -5339,9 +5619,8 @@ "dei server." #: src/settings_translation_file.cpp -#, fuzzy msgid "Near plane" -msgstr "Piano di ritaglio vicino" +msgstr "Piano vicino" #: src/settings_translation_file.cpp msgid "Network" @@ -5394,9 +5673,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5407,23 +5683,20 @@ "processes, especially in singleplayer and/or when running Lua code in\n" "'on_generated'. For many users the optimum setting may be '1'." msgstr "" -"Numero di emerge thread da usare.\n" -"Attenzione: Attualmente ci sono diversi bachi che possono provocare crash " -"quando\n" -"'num_emerge_threds' è maggiore di 1. Fintanto che questo avviso non viene " -"rimosso \n" -"si raccomanda vivamente di impostarlo al valore predefinito 1.\n" +"Numero di thread di comparsa da usare.\n" "Valore 0:\n" -"- Selezione automatica. Il numero di emerge thread sarà\n" -"- \"numero di processori - 2\", con un limite inferiore di 1.\n" -"Qualunque altro valore:\n" -"- Specifica il numero di emerge thread, con un limite inferiore di 1.\n" -"Avvertimento: aumentare il numero di emerge thread aumenta la\n" -"velocità del motore del generatore mappa, ma ciò potrebbe danneggiare\n" -"le prestazioni del gioco interferendo con altri processi, specialmente in\n" -"modalità giocatore singolo e/o quando si esegue codice Lua in \"on_generated" -"\".\n" -"Per molti utenti l'impostazione ottimale può essere \"1\"." +"- Selezione automatica. Il numero di thread di comparsa sarà\n" +"- 'numero di processori - 2', con un limite inferiore di 1.\n" +"Qualsiasi altro valore:\n" +"- Specifica il numero di thread di comparsa, con un limite inferiore di 1." +"\n" +"AVVISO: Aumentare il numero dei thread di comparsa aumenta la velocità del " +"motore\n" +"del generatore di mappe, ma questo potrebbe danneggiare le prestazioni del " +"gioco interferendo con\n" +"altri processi, specialmente in modalità locale e/o quando si esegue codice " +"Lua in 'on_generated'.\n" +"Per molti utenti l'impostazione ottimale può essere '1'." #: src/settings_translation_file.cpp msgid "" @@ -5451,12 +5724,12 @@ #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." -msgstr "" +msgstr "Opacità (alfa) dell'ombra dietro il carattere predefinito, tra 0 e 255." #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255." -msgstr "" +msgstr "Opacità (alfa) dell'ombra dietro il carattere di riserva, tra 0 e 255." #: src/settings_translation_file.cpp msgid "" @@ -5498,10 +5771,6 @@ msgstr "Scala dell'occlusione di parallasse" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Intensità dell'occlusione di parallasse" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5509,18 +5778,30 @@ "This font will be used for certain languages or if the default font is " "unavailable." msgstr "" +"Percorso del carattere di riserva.\n" +"Se l'impostazione \"freetype\" è abilitata: deve essere un carattere " +"TrueType.\n" +"Se l'impostazione \"freetype\" è disabilitata: deve essere un carattere " +"bitmap o XML vettoriale.\n" +"Questo carattere verrà utilizzato per alcune lingue o se il carattere " +"predefinito non è disponibile." #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Percorso dove salvare le schermate." +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 "" +"Percorso dove salvare le schermate. Può essere un percorso assoluto o " +"relativo.\n" +"La cartella sarà create se non esiste già." #: src/settings_translation_file.cpp msgid "" "Path to shader directory. If no path is defined, default location will be " "used." msgstr "" -"Percorso della cartella degli shader. Se non se ne stabilisce nessuno,\n" -"verrà usato quello predefinito." +"Percorso della cartella degli shader. Se non se ne stabilisce nessuno, verrà " +"usato quello predefinito." #: src/settings_translation_file.cpp msgid "Path to texture directory. All textures are first searched from here." @@ -5535,6 +5816,13 @@ "If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" "The fallback font will be used if the font cannot be loaded." msgstr "" +"Percorso del carattere predefinito.\n" +"Se l'impostazione \"freetype\" è abilitata: deve essere un carattere " +"TrueType.\n" +"Se l'impostazione \"freetype\" è disabilitata: deve essere un carattere " +"bitmap o XML vettoriale.\n" +"Il carattere di riserva verrà utilizzato se il carattere non può essere " +"caricato." #: src/settings_translation_file.cpp msgid "" @@ -5543,12 +5831,27 @@ "If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" "This font is used for e.g. the console and profiler screen." msgstr "" +"Percorso del carattere a spaziatura fissa.\n" +"Se l'impostazione \"freetype\" è abilitata: deve essere un carattere " +"TrueType.\n" +"Se l'impostazione \"freetype\" è disabilitata: deve essere un carattere " +"bitmap o XML vettoriale.\n" +"Questo carattere viene utilizzato ad es. per la console e lo schermo del " +"profilatore." #: src/settings_translation_file.cpp msgid "Pause on lost window focus" msgstr "Pausa alla perdita di fuoco della finestra" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "Limite per giocatore di blocchi accodati per il caricamento dal disco" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "Limite per giocatore di blocchi accodati da generare" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Fisica" @@ -5594,10 +5897,9 @@ "Prevent digging and placing from repeating when holding the mouse buttons.\n" "Enable this when you dig or place too often by accident." msgstr "" -"Impedisce la ripetizione di scavo e posizionamento quando si tengono " -"premuti\n" +"Impedisce la ripetizione di scavo e posizionamento quando si tengono premuti " "i pulsanti del mouse.\n" -"Abilitalo quando scavi o piazzi troppo spesso per caso." +"Abilitalo quando scavi o piazzi troppo spesso per sbaglio." #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." @@ -5631,8 +5933,24 @@ msgstr "Generazione di profili" #: src/settings_translation_file.cpp -msgid "Proportion of large caves that contain liquid." +msgid "Prometheus listener address" +msgstr "Indirizzo del listener Prometheus" + +#: 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 fetch on http://127.0.0.1:30000/metrics" msgstr "" +"Indirizzo del listener Prometheus.\n" +"Se Minetest viene compilato con l'opzione ENABLE_PROMETHEUS abilitata,\n" +"abilita il listener delle statistiche per Prometheus su quell'indirizzo.\n" +"Le statistiche possono essere recuperate su http://127.0.0.1:30000/metrics" + +#: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "Proporzione delle grotte di grandi dimensioni che contiene del liquido." #: src/settings_translation_file.cpp msgid "" @@ -5642,8 +5960,7 @@ msgstr "" "Raggio dell'area delle nuvole fissato in numero di 64 nodi quadrati nuvola.\n" "Valori maggiori di 26 cominceranno a produrre interruzioni appuntite agli " -"angoli\n" -"delle aree nuvola." +"angoli delle aree nuvola." #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." @@ -5662,9 +5979,8 @@ msgstr "Messaggi di chat recenti" #: src/settings_translation_file.cpp -#, fuzzy msgid "Regular font path" -msgstr "Percorso di rapporto" +msgstr "Percorso del carattere regolare" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5882,7 +6198,6 @@ msgstr "Larghezza del riquadro di selezione" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Selects one of 18 fractal types.\n" "1 = 4D \"Roundy\" Mandelbrot set.\n" @@ -5904,25 +6219,25 @@ "17 = 4D \"Mandelbulb\" Mandelbrot set.\n" "18 = 4D \"Mandelbulb\" Julia set." msgstr "" -"Seleziona uno dei 18 tipi di frattale.\n" -"1 = 4D serie Mandelbrot \"arrotondata\".\n" -"2 = 4D serie Julia \"arrotondata\".\n" -"3 = 4D serie Mandelbrot \"squadrata\".\n" -"4 = 4D serie Julia \"squadrata\".\n" -"5 = 4D serie Mandelbrot \"cugino Mandy\".\n" -"6 = 4D serie Julia \"cugino Mandy\".\n" -"7 = 4D serie Mandelbrot \"variazione\".\n" -"8 = 4D serie Julia \"variazione\".\n" -"9 = 3D serie Mandelbrot \"Mandelbrot/Mandelbar\".\n" -"10 = 3D serie Julia \"Mandelbrot/Mandelbar\".\n" -"11 = 3D serie Mandelbrot \"Albero di Natale\".\n" -"12 = 3D serie Julia \"Albero di Natale\".\n" -"13 = 3D serie Mandelbrot \"Mandelbulb\".\n" -"14 = 3D serie Julia \"Mandelbulb\".\n" -"15 = 3D serie Mandelbrot \"coseno Mandelbulb\".\n" -"16 = 3D serie Julia \"coseno Mandelbulb\".\n" -"17 = 4D serie Mandelbrot \"Mandelbulb\".\n" -"18 = 4D serie Julia \"Mandelbulb\"." +"Scegli uno dei 18 tipi di frattale.\n" +"1 = 4D Serie Mandelbrot \"arrotondata\".\n" +"2 = 4D Serie Julia \"arrotondata\".\n" +"3 = 4D Serie Mandelbrot \"squadrata\".\n" +"4 = 4D Serie Julia \"squadrata\".\n" +"5 = 4D Serie Mandelbrot \"cugino Mandy\".\n" +"6 = 4D Serie Julia \"cugino Mandy\".\n" +"7 = 4D Serie Mandelbrot \"variazione\".\n" +"8 = 4D Serie Julia \"variazione\".\n" +"9 = 3D Serie Mandelbrot \"Mandelbrot/Mandelbar\".\n" +"10 = 3D Serie Julia \"Mandelbrot/Mandelbar\".\n" +"11 = 3D Serie Mandelbrot \"Albero di Natale\".\n" +"12 = 3D Serie Julia \"Albero di Natale\".\n" +"13 = 3D Serie Mandelbrot \"Mandelbulb\".\n" +"14 = 3D Serie Julia \"Mandelbulb\".\n" +"15 = 3D Serie Mandelbrot \"Coseno Mandelbulb\".\n" +"16 = 3D Serie Julia \"Coseno Mandelbulb\".\n" +"17 = 4D Serie Mandelbrot \"Mandelbulb\".\n" +"18 = 4D Serie Julia \"Mandelbulb\"." #: src/settings_translation_file.cpp msgid "Server / Singleplayer" @@ -5975,7 +6290,6 @@ "dai client." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving leaves.\n" "Requires shaders to be enabled." @@ -5984,16 +6298,15 @@ "Necessita l'attivazione degli shader." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving liquids (like water).\n" "Requires shaders to be enabled." msgstr "" -"Impostata su vero abilita l'acqua ondeggiante.\n" +"Impostata su vero abilita i liquidi ondeggianti (come, ad esempio, l'acqua)." +"\n" "Necessita l'attivazione degli shader." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable waving plants.\n" "Requires shaders to be enabled." @@ -6018,20 +6331,20 @@ "Ciò funziona solo col supporto video OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the default font. If 0, then shadow will not be " "drawn." msgstr "" -"Spostamento ombreggiatura carattere, se 0 allora l'ombra non sarà disegnata." +"Scarto (in pixel) dell'ombreggiatura del carattere predefinito. Se è 0, " +"allora l'ombra non sarà disegnata." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the fallback font. If 0, then shadow will not " "be drawn." msgstr "" -"Spostamento ombreggiatura carattere, se 0 allora l'ombra non sarà disegnata." +"Scarto (in pixel) dell'ombreggiatura del carattere di riserva. Se è 0, " +"allora l'ombra non sarà disegnata." #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6058,9 +6371,9 @@ "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" -"Dimensione dei pezzi di mappa generati dal generatore mappe, fissata in\n" +"Dimensione dei pezzi di mappa generati dal generatore mappe, dichiarata in " "blocchi mappa (16 nodi).\n" -"AVVERTIMENTO!: non c'è nessun vantaggio, e ci sono diversi pericoli,\n" +"AVVISO: non c'è nessun beneficio, e ci sono diversi pericoli,\n" "nell'aumentare questo valore al di sopra di 5.\n" "Ridurre questo valore aumenta la densità di grotte e sotterranei.\n" "L'alterazione di questo valore è per uso speciale, si raccomanda di\n" @@ -6086,11 +6399,11 @@ #: src/settings_translation_file.cpp msgid "Small cave maximum number" -msgstr "" +msgstr "Numero massimo di grotte piccole" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "" +msgstr "Numero minimo di grotte piccole" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." @@ -6163,14 +6476,24 @@ "I file che non sono presenti saranno recuperati nel solito modo." #: src/settings_translation_file.cpp -#, fuzzy +msgid "" +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." +msgstr "" +"Fissa la dimensione predefinita della pila di nodi, oggetti e strumenti.\n" +"Si noti che mod o giochi possono impostare esplicitamente una pila per " +"alcuni (o tutti) gli oggetti." + +#: 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 "" "Diffusione dell'aumento mediano della curva di luce.\n" -"Scostamento tipo dell'aumento mediano gaussiano." +"Controlla l'ampiezza del raggio da aumentare.\n" +"Scostamento tipo dell'aumento della curva di luce gaussiano." #: src/settings_translation_file.cpp msgid "Static spawnpoint" @@ -6189,6 +6512,10 @@ msgstr "Rumore della diffusione del passo montano" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "Intensità della parallasse della modalità 3D." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Intensità delle normalmap generate." @@ -6198,10 +6525,9 @@ "The 3 'boost' parameters define a range of the light\n" "curve that is boosted in brightness." msgstr "" - -#: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Intensità della parallasse." +"Intensità dell'incremento della curva di luce.\n" +"I 3 parametri \"incremento\" definiscono un intervallo della luce\n" +"che ne potenzia la luminosità." #: src/settings_translation_file.cpp msgid "Strict protocol checking" @@ -6212,6 +6538,36 @@ msgstr "Elimina i codici di colore" #: 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 the 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 "" +"Livello di superficie dell'aqua facoltativa posizionata su uno strato solido " +"di terra fluttuante.\n" +"L'acqua è disabilitata in modo predefinito e sarà posizionata se questo " +"valore è impostato\n" +"al di sopra di 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (l'inizio dell'" +"affusolamento\n" +"superiore).\n" +"***AVVISO, PERICOLO POTENZIALE PER MONDI E PRESTAZIONI SERVER***:\n" +"Quando si abilita il posizionamento dell'acqua, le terre fluttuanti devono " +"essere configurate e verificate\n" +"per essere uno strato solido impostando 'mgv7_floatland_density' a 2.0 (o un " +"altro\n" +"valore richiesto dipendentemente da 'mgv7_np_floatland', per evitare\n" +"flussi d'acqua estremamente intensi per il server e per evitare vasti " +"allagamenti\n" +"della superficie del mondo sottostante." + +#: src/settings_translation_file.cpp msgid "Synchronous SQLite" msgstr "SQLite sincronizzato" @@ -6280,10 +6636,10 @@ "Il primo modo si addice meglio a cose come macchine, arredamento, ecc.,\n" "mentre il secondo fa sì che scale e microblocchi si adattino meglio ai " "dintorni.\n" -"Comunque, dato che questa possibilità è nuova, automaticamente potrebbe\n" -"non essere usata dai server più vecchi, questa opzione consente di imporla\n" -"per alcuni tipi di nodo. Si noti però che questa è considerata SPERIMENTALE\n" -"e potrebbe non funzionare bene." +"Comunque, dato che questa possibilità è nuova, automaticamente potrebbe non " +"essere usata dai server più vecchi,\n" +"questa opzione consente di imporla per alcuni tipi di nodo. Si noti però\n" +"che questa è considerata SPERIMENTALE e potrebbe non funzionare bene." #: src/settings_translation_file.cpp msgid "The URL for the content repository" @@ -6324,6 +6680,11 @@ "Default is 1.0 (1/2 node).\n" "Requires waving liquids to be enabled." msgstr "" +"L'altezza massima della superficie dei liquidi ondulanti.\n" +"4.0 = L'altezza dell'onda è di due nodi.\n" +"0.0 = L'onda non si muove affatto.\n" +"Il valore predefinito è 1.0 (1/2 nodo).\n" +"Richiede l'abilitazione dei liquidi ondulanti." #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -6346,14 +6707,15 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" "Il raggio del volume di blocchi attorno ciascun giocatore che è soggetto\n" -"alle cose del blocco attivo, fissata in blocchi mappa (16 nodi).\n" +"alle cose del blocco attivo, dichiarata in blocchi mappa (16 nodi).\n" "Nei blocchi attivi vengono caricati gli oggetti ed eseguiti gli ABM.\n" -"Questo è anche la distanza minima in cui sono mantenuti gli oggetti attivi " +"Questo è anche l'intervallo minimo in cui sono mantenuti gli oggetti attivi " "(mob).\n" -"Questo dovrebbe essere configurato assieme ad active_object_range." +"Questo dovrebbe essere configurato assieme ad " +"active_object_send_range_blocks." #: src/settings_translation_file.cpp msgid "" @@ -6364,11 +6726,10 @@ "On other platforms, OpenGL is recommended, and it’s the only driver with\n" "shader support currently." msgstr "" -"Il back-end di rendering per Irrlicht.\n" +"Il motore di resa per Irrlicht.\n" "Dopo averlo cambiato è necessario un riavvio.\n" "Nota: su Android, si resti con OGLES1 se incerti! Altrimenti l'app potrebbe " -"non\n" -"partire.\n" +"non partire.\n" "Su altre piattaforme, si raccomanda OpenGL, ed è attualmente l'unico driver\n" "con supporto degli shader." @@ -6480,10 +6841,9 @@ "node." msgstr "" "Per ridurre il ritardo, i trasferimenti di blocchi sono rallentati quando un " -"giocatore\n" -"sta costruendo qualcosa. Ciò determina per quanto a lungo sono rallentati " -"dopo\n" -"avere posizionato o rimosso un nodo." +"giocatore sta costruendo qualcosa.\n" +"Ciò determina per quanto a lungo sono rallentati dopo avere posizionato o " +"rimosso un nodo." #: src/settings_translation_file.cpp msgid "Toggle camera mode key" @@ -6506,7 +6866,6 @@ msgstr "Filtraggio trilineare" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "True = 256\n" "False = 128\n" @@ -6540,7 +6899,7 @@ "inferiore,\n" "ma è applicato solo al mondo di gioco, mantenendo intatta l'interfaccia " "utente.\n" -"Dovrebbe dare un aumento di prestazioni significativo al costo di immagini\n" +"Dovrebbe dare un aumento di prestazioni significativo al costo di immagini " "meno dettagliate.\n" "Più si aumenta il valore, meno dettagliata sarà l'immagine." @@ -6557,6 +6916,10 @@ msgstr "Livello Y superiore dei sotterranei." #: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "Livello Y superiore delle terre fluttuanti." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Usare l'aspetto 3D per le nuvole invece di quello piatto." @@ -6580,9 +6943,9 @@ "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" -"Usare il mip mapping per ridimensionare le immagini. Potrebbe aumentare\n" -"leggermente le prestazioni, specialmente quando si usa un pacchetto di\n" -"immagini ad alta risoluzione.\n" +"Usare il mip mapping per ridimensionare le immagini. Potrebbe aumentare " +"leggermente le prestazioni,\n" +"specialmente quando si usa una raccolta di immagini ad alta risoluzione.\n" "La correzione gamma del downscaling non è supportata." #: src/settings_translation_file.cpp @@ -6695,13 +7058,12 @@ msgstr "Volume" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Volume of all sounds.\n" "Requires the sound system to be enabled." msgstr "" -"Attiva la parallax occlusion mapping.\n" -"Necessita l'attivazione degli shader." +"Volume dei suoni.\n" +"Necessita l'attivazione dell'audio." #: src/settings_translation_file.cpp msgid "" @@ -6748,24 +7110,20 @@ msgstr "Foglie ondeggianti" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids" msgstr "Liquidi ondeggianti" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wave height" -msgstr "Altezza di ondeggiamento dei liquidi" +msgstr "Altezza dell'onda dei liquidi ondeggianti" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wave speed" -msgstr "Velocità di ondeggiamento dei liquidi" +msgstr "Velocità dell'onda dei liquidi ondeggianti" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wavelength" -msgstr "Durata di ondeggiamento dei liquidi" +msgstr "Lunghezza d'onda dei liquidi ondulanti" #: src/settings_translation_file.cpp msgid "Waving plants" @@ -6791,9 +7149,8 @@ msgstr "" "Quando gui_scaling_filter_txr2img è Vero, copia quelle immagini\n" "dall'hardware al software per il ridimensionamento. Quando è Falso,\n" -"ripiega sul vecchio metodo di ridimensionamento, per i driver video\n" -"che non supportano correttamente lo scaricamento delle immagini\n" -"dall'hardware." +"ripiega sul vecchio metodo di ridimensionamento, per i driver video che\n" +"non supportano correttamente lo scaricamento delle immagini dall'hardware." #: src/settings_translation_file.cpp msgid "" @@ -6807,28 +7164,31 @@ "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." msgstr "" -"Quando si usano i filtri bilineare/trilineare/anisotropico, le immagini a\n" -"bassa risoluzione possono essere sfocate, così si esegue l'upscaling\n" -"automatico con l'interpolazione nearest-neighbor per conservare\n" -"pixel precisi. Questo imposta la dimensione minima delle immagini\n" -"per le immagini upscaled; valori più alti hanno un aspetto più nitido,\n" -"ma richiedono più memoria. Sono raccomandate le potenze di 2.\n" -"Impostarla a un valore maggiore di 1 potrebbe non avere un effetto\n" -"visibile, a meno che il filtraggio bilineare/trilineare/anisotropico sia\n" -"abilitato.\n" +"Quando si usano i filtri bilineare/trilineare/anisotropico, le immagini a " +"bassa risoluzione\n" +"possono essere sfocate, così si esegue l'upscaling automatico con " +"l'interpolazione nearest-neighbor\n" +"per conservare pixel chiari. Questo imposta la dimensione minima delle " +"immagini\n" +"per le immagini upscaled; valori più alti hanno un aspetto più nitido, ma " +"richiedono più memoria.\n" +"Sono raccomandate le potenze di 2. Impostarla a un valore maggiore di 1 " +"potrebbe non avere\n" +"un effetto visibile, a meno che il filtraggio bilineare/trilineare/" +"anisotropico sia abilitato.\n" "Questo viene anche usato come dimensione di base per le immagini\n" "dei nodi per l'autoridimensionamento delle immagini con allineamento\n" "relativo al mondo." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Whether FreeType fonts are used, requires FreeType support to be compiled " "in.\n" "If disabled, bitmap and XML vectors fonts are used instead." msgstr "" "Se si usano caratteri FreeType, richiede la compilazione col supporto " -"FreeType." +"FreeType.\n" +"Se disabilitati, si utilizzano invece i caratteri bitmap e XML vettoriali." #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." @@ -6868,6 +7228,12 @@ "In-game, you can toggle the mute state with the mute key or by using the\n" "pause menu." msgstr "" +"Se silenziare i suoni. È possibile de-silenziare i suoni in qualsiasi " +"momento, a meno che\n" +"il sistema audio non sia disabilitato (enable_sound=false).\n" +"Nel gioco, puoi alternare lo stato silenziato col tasto di silenzio o " +"usando\n" +"il menu di pausa." #: src/settings_translation_file.cpp msgid "" @@ -6915,14 +7281,15 @@ "See also texture_min_size.\n" "Warning: This option is EXPERIMENTAL!" msgstr "" -"Le immagini allineate al mondo possono essere ridimensionate per\n" -"estendersi su diversi nodi. Comunque, il server potrebbe non inviare\n" -"la scala che vuoi, specialmente se usi un pacchetto di texture\n" -"progettato specialmente; con questa opzione, il client prova a\n" -"stabilire automaticamente la scala basandosi sulla dimensione\n" -"dell'immagine.\n" +"Le immagini allineate al mondo possono essere ridimensionate per estendersi " +"su diversi nodi.\n" +"Comunque, il server potrebbe non inviare la scala che vuoi, specialmente se " +"usi una raccolta di immagini\n" +"progettata specificamente; con questa opzione, il client prova a stabilire " +"automaticamente la scala\n" +"basandosi sulla dimensione dell'immagine.\n" "Si veda anche texture_min_size.\n" -"Avvertimento: questa opzione è SPERIMENTALE!" +"Avviso: questa opzione è SPERIMENTALE!" #: src/settings_translation_file.cpp msgid "World-aligned textures mode" @@ -6949,6 +7316,20 @@ msgstr "Distanza Y sopra cui le caverne si espandono a piena grandezza." #: 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 "" +"Distanza-Y sopra cui le terre fluttuanti si affusolano dalla piena densità a " +"niente.\n" +"L'affusolamento comincia a questa distanza dal limite Y.\n" +"Per uno strato solido di terra fluttuante, questo controlla l'altezza di " +"colline/montagne.\n" +"Dev'essere inferiore o uguale alla metà della distanza tra i limiti Y." + +#: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." msgstr "Livello Y della superficie media del terreno." @@ -6980,142 +7361,148 @@ msgid "cURL timeout" msgstr "Scadenza cURL" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Regola la codifica della gamma per le tabelle della luce. Numeri maggiori " -#~ "sono più chiari.\n" -#~ "Questa impostazione è solo per il client ed è ignorata dal server." +#~ msgid "Toggle Cinematic" +#~ msgstr "Scegli cinematica" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Modifica il restringimento superiore e inferiore rispetto al punto " -#~ "mediano delle terre fluttuanti di tipo montagnoso." +#~ msgid "Select Package File:" +#~ msgstr "Seleziona pacchetto file:" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Centro dell'aumento mediano della curva della luce." +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Y del limite superiore della lava nelle caverne grandi." -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Controlla la densità delle terre fluttuanti di tipo montuoso.\n" -#~ "È uno spostamento di rumore aggiunto al valore del rumore " -#~ "'mgv7_np_mountain'." +#~ msgid "Waving Water" +#~ msgstr "Acqua ondeggiante" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgid "Whether dungeons occasionally project from the terrain." +#~ msgstr "Se i sotterranei saltuariamente si protendono dal terreno." + +#~ msgid "Projecting dungeons" +#~ msgstr "Sotterranei protundenti" + +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Livello Y a cui si estendono le ombre delle terre fluttuanti." + +#~ msgid "Y-level of floatland midpoint and lake surface." #~ msgstr "" -#~ "Controlla la larghezza delle gallerie, un valore più piccolo crea " -#~ "gallerie più larghe." +#~ "Livello Y del punto medio delle terre fluttuanti e della superficie dei " +#~ "laghi." -#~ msgid "Darkness sharpness" -#~ msgstr "Nitidezza dell'oscurità" +#~ msgid "Waving water" +#~ msgstr "Acqua ondeggiante" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" -#~ "Definisce aree di terreno uniforme nelle terre fluttuanti.\n" -#~ "Le terre fluttuanti uniformi avvengono quando il rumore è > 0." +#~ "Variazione dell'altezza delle colline, e della profondità dei laghi sul\n" +#~ "terreno uniforme delle terre fluttuanti." #~ msgid "" -#~ "Deprecated, define and locate cave liquids using biome definitions " -#~ "instead.\n" -#~ "Y of upper limit of lava in large caves." +#~ "Typical maximum height, above and below midpoint, of floatland mountains." #~ msgstr "" -#~ "Sconsigliato, va usata la definizione del bioma per definire e " -#~ "posizionare le caverne di liquido.\n" -#~ "Limite verticale della lava nelle caverne grandi." +#~ "Altezza massima tipica, sopra e sotto il punto medio, delle montagne dei " +#~ "terreni fluttuanti." -#~ msgid "Enable VBO" -#~ msgstr "Abilitare i VBO" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Questo carattere sarà usato per certe Lingue." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Attiva il filmic tone mapping" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Intensità dell'aumento mediano della curva di luce." -#~ msgid "Floatland base height noise" -#~ msgstr "Rumore base dell'altezza delle terre fluttuanti" +#~ msgid "Shadow limit" +#~ msgstr "Limite dell'ombra" -#~ msgid "Floatland base noise" -#~ msgstr "Rumore base delle terre fluttuanti" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Percorso del carattere TrueType o bitmap." -#~ msgid "Floatland level" -#~ msgstr "Livello delle terre fluttuanti" +#~ msgid "Lightness sharpness" +#~ msgstr "Nitidezza della luminosità" -#~ msgid "Floatland mountain density" -#~ msgstr "Densità montuosa delle terre fluttuanti" +#~ msgid "Lava depth" +#~ msgstr "Profondità della lava" -#~ msgid "Floatland mountain exponent" -#~ msgstr "Densità montuosa delle terre fluttuanti" +#~ msgid "IPv6 support." +#~ msgstr "Supporto IPv6." -#~ msgid "Floatland mountain height" -#~ msgstr "Altezza delle montagne delle terre fluttuanti" +#~ msgid "Gamma" +#~ msgstr "Gamma" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "Trasparenza ombreggiatura carattere (opacità, tra 0 e 255)." -#~ msgid "Gamma" -#~ msgstr "Gamma" - -#~ msgid "IPv6 support." -#~ msgstr "Supporto IPv6." +#~ msgid "Floatland mountain height" +#~ msgstr "Altezza delle montagne delle terre fluttuanti" -#~ msgid "Lava depth" -#~ msgstr "Profondità della lava" +#~ msgid "Floatland base height noise" +#~ msgstr "Rumore base dell'altezza delle terre fluttuanti" -#~ msgid "Lightness sharpness" -#~ msgstr "Nitidezza della luminosità" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Attiva il filmic tone mapping" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Percorso del carattere TrueType o bitmap." +#~ msgid "Enable VBO" +#~ msgstr "Abilitare i VBO" -#~ msgid "Shadow limit" -#~ msgstr "Limite dell'ombra" +#~ msgid "" +#~ "Deprecated, define and locate cave liquids using biome definitions " +#~ "instead.\n" +#~ "Y of upper limit of lava in large caves." +#~ msgstr "" +#~ "Sconsigliato, va usata la definizione del bioma per definire e " +#~ "posizionare le caverne di liquido.\n" +#~ "Limite verticale della lava nelle caverne grandi." -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Intensità dell'aumento mediano della curva di luce." +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "Definisce aree di terreno uniforme nelle terre fluttuanti.\n" +#~ "Le terre fluttuanti uniformi avvengono quando il rumore è > 0." -#~ msgid "This font will be used for certain languages." -#~ msgstr "Questo carattere sarà usato per certe Lingue." +#~ msgid "Darkness sharpness" +#~ msgstr "Nitidezza dell'oscurità" -#~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "" -#~ "Altezza massima tipica, sopra e sotto il punto medio, delle montagne dei " -#~ "terreni fluttuanti." +#~ "Controlla la larghezza delle gallerie, un valore più piccolo crea " +#~ "gallerie più larghe." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." #~ msgstr "" -#~ "Variazione dell'altezza delle colline, e della profondità dei laghi sul\n" -#~ "terreno uniforme delle terre fluttuanti." +#~ "Controlla la densità delle terre fluttuanti di tipo montuoso.\n" +#~ "È uno spostamento di rumore aggiunto al valore del rumore " +#~ "'mgv7_np_mountain'." -#~ msgid "Waving water" -#~ msgstr "Acqua ondeggiante" +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Centro dell'aumento mediano della curva della luce." -#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." #~ msgstr "" -#~ "Livello Y del punto medio delle terre fluttuanti e della superficie dei " -#~ "laghi." +#~ "Modifica il restringimento superiore e inferiore rispetto al punto " +#~ "mediano delle terre fluttuanti di tipo montagnoso." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Livello Y a cui si estendono le ombre delle terre fluttuanti." +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Regola la codifica della gamma per le tabelle della luce. Numeri maggiori " +#~ "sono più chiari.\n" +#~ "Questa impostazione è solo per il client ed è ignorata dal server." -#~ msgid "Projecting dungeons" -#~ msgstr "Sotterranei protundenti" +#~ msgid "Path to save screenshots at." +#~ msgstr "Percorso dove salvare le schermate." -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "Se i sotterranei saltuariamente si protendono dal terreno." +#~ msgid "Parallax occlusion strength" +#~ msgstr "Intensità dell'occlusione di parallasse" -#~ msgid "Waving Water" -#~ msgstr "Acqua ondeggiante" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Limite di code emerge su disco" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Y del limite superiore della lava nelle caverne grandi." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Scaricamento e installazione di $1, attendere prego..." -#~ msgid "Select Package File:" -#~ msgstr "Seleziona pacchetto file:" +#~ msgid "Back" +#~ msgstr "Indietro" -#~ msgid "Toggle Cinematic" -#~ msgstr "Scegli cinematica" +#~ msgid "Ok" +#~ msgstr "OK" diff -Nru minetest-5.2.0/po/ja/minetest.po minetest-5.3.0/po/ja/minetest.po --- minetest-5.2.0/po/ja/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/ja/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,8 +2,8 @@ msgstr "" "Project-Id-Version: Japanese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-04-05 05:27+0000\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-15 22:41+0000\n" "Last-Translator: BreadW \n" "Language-Team: Japanese \n" @@ -12,7 +12,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0-dev\n" +"X-Generator: Weblate 4.1\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,6 +22,10 @@ msgid "You died" msgstr "死んでしまった" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Luaスクリプトでエラーが発生しました:" @@ -35,10 +39,6 @@ msgstr "メインメニュー" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "決定" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "再接続" @@ -113,6 +113,10 @@ "許可される文字は [a-z0-9_] のみです。" #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "他のModを探す" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" @@ -158,16 +162,16 @@ msgstr "すべて" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "戻る" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "メインメニューへ戻る" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "$1をインストールしています、お待ちください..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "MinetestがcURLなしでコンパイルされた場合、コンテンツDBは使用できません" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "ダウンロード中..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -212,15 +216,51 @@ msgid "Update" msgstr "更新" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +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 "Download a game, such as Minetest Game, from minetest.net" msgstr "Minetest Game などのゲームを minetest.net からダウンロードしてください" @@ -228,26 +268,144 @@ msgid "Download one from minetest.net" msgstr "minetest.netからダウンロードしてください" +#: 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 src/settings_translation_file.cpp msgid "Game" 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 "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 "マップジェネレ-タ" +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/dlg_settings_advanced.lua msgid "Seed" msgstr "Seed値" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." -msgstr "警告: minimal development testは開発者用です。" +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 "地形上に現れる構造物(v6によって生成された木やジャングルの草に影響なし)" + +#: 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 "Warning: The Development Test is meant for developers." +msgstr "警告: The Development Testは開発者用です。" #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -559,6 +717,10 @@ msgstr "ホストサーバ" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "コンテンツDBからゲームをインストール" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "名前 / パスワード" @@ -1032,7 +1194,7 @@ "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" -"デフォルトの操作:\n" +"既定の操作:\n" "タッチ操作:\n" "- シングルタップ: ブロックの破壊\n" "- ダブルタップ: 設置/使用\n" @@ -1214,6 +1376,14 @@ 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 "消音 取り消し" @@ -1245,7 +1415,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "ズームは現在ゲームまたはModにより無効" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "決定" @@ -1852,6 +2022,10 @@ msgstr "3Dモード" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "3Dモード視差強度" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "巨大な洞窟を定義する3Dノイズ。" @@ -1864,6 +2038,18 @@ "また、浮遊大陸の山地の構造を定義します。" #: 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 "" +"浮遊大陸の構造を定義する3Dノイズ。\n" +"既定から変更すると、ノイズの「スケール」(規定では 0.7)の調整が\n" +"必要になる場合があり、このノイズの値の範囲は約 -2.0 ~ 2.0 で\n" +"浮遊大陸の先細りが最も良く機能します。" + +#: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." msgstr "川の峡谷の壁の構造を定義する3Dノイズ。" @@ -1924,8 +2110,8 @@ msgstr "ABMの間隔" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" -msgstr "出現するキューの絶対的な制限値" +msgid "Absolute limit of queued blocks to emerge" +msgstr "キューに入れられたブロックが出現する絶対制限" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -1973,6 +2159,21 @@ "4kスクリーンなどのための、画面の解像度の設定です (非X11/Android環境のみ)。" #: 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 "" +"浮遊大陸層の密度を調整します。\n" +"密度を高めるために値を増やします。正または負の値を指定できます。\n" +"値 = 0.0: 50% が浮遊大陸です。\n" +"値 = 2.0('mgv7_np_floatland' によって高くなる場合があります、常に\n" +"念のためテスト)浮遊大陸層を密に作成します。" + +#: src/settings_translation_file.cpp msgid "Advanced" msgstr "詳細" @@ -1991,10 +2192,6 @@ "自然な夜の光にはほとんど影響を与えません。" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "高所の寒さ" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "飛行時に加速する" @@ -2266,10 +2463,18 @@ "テクスチャパックの選択はありません。小さな画面で必要かもしれません。" #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "チャットのフォントサイズ" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "チャットキー" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "チャットログのレベル" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "チャットメッセージ数の限度" @@ -2557,6 +2762,10 @@ msgstr "既定のレポート形式" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "既定のスタック数" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2913,6 +3122,22 @@ "目に見えるスペースが生じる可能性があります。" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "" +"浮遊大陸の先細り指数。先細りの動作を変更します。\n" +"値 = 1.0は、均一で線形な先細りを作成します。\n" +"値 > 1.0は、規定の分離された浮遊大陸に適した滑らかな先細りを\n" +"作成します。\n" +"値 < 1.0(例 0.25)は、より明確な表面レベルで平坦な低地を\n" +"作成し、密な浮遊大陸層に適しています。" + +#: src/settings_translation_file.cpp msgid "FPS in pause menu" msgstr "ポーズメニューでのFPS" @@ -3030,6 +3255,34 @@ msgstr "バーチャルパッドを固定" #: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "浮遊大陸の密度" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "浮遊大陸の最大 Y" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "浮遊大陸の最小 Y" + +#: 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 "Fly key" msgstr "飛行キー" @@ -3083,6 +3336,14 @@ #: 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 "" +"最近のチャットテキストとチャットプロンプトのフォントサイズ(ポイント)。\n" +"値 0 は規定のフォントサイズを使用します。" + +#: src/settings_translation_file.cpp +msgid "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4703,14 +4964,6 @@ msgstr "光度曲線の低勾配" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "ディスク上に出現するキューの制限" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4785,6 +5038,10 @@ msgstr "ダンジョンのY値の下限。" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "浮遊大陸の Y の下限。" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "メインメニュースクリプト" @@ -4866,10 +5123,14 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "マップジェネレータ v7 に固有のマップ生成属性。\n" -"'ridges' は川ができるようにします。" +"'ridges': 川。\n" +"'floatlands': 空に浮かぶ大陸。\n" +"'caverns': 地下深くの巨大な洞窟。" #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -4956,10 +5217,6 @@ msgstr "マップジェネレータのデバッグ" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "マップジェネレータフラグ" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "マップジェネレータ名" @@ -5030,18 +5287,18 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" -"生成されるキューに入れる最大ブロック数。\n" -"適切な量を自動的に選択するには、空白を設定します。" +"生成されてキューに入れられる最大ブロック数。\n" +"この制限はプレイヤーごとに適用されます。" #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" -"ファイルから読み込まれるキューに入れる最大ブロック数。\n" -"適切な量を自動的に選択するには、空白を設定します。" +"ファイルから読み込まれてキューに入れられる最大ブロック数。\n" +"この制限はプレイヤーごとに適用されます。" #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5134,6 +5391,10 @@ msgstr "選択したオブジェクトを強調表示するために使用される方法。" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "チャットに書き込まれる最小限のログレベル。" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "ミニマップ" @@ -5304,9 +5565,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5318,9 +5576,6 @@ "'on_generated'. For many users the optimum setting may be '1'." msgstr "" "使用する出現スレッド数。\n" -"警告: 'num_emerge_threads' が 1 より大きいときにクラッシュを引き起こす\n" -"可能性のあるバグが現在複数あります。この警告が削除されるまでは\n" -"この値を規定の '1' に設定することを強くお勧めします。\n" "値 0:\n" "- 自動選択。 出現スレッド数は\n" "- 'プロセッサー数 - 2'、下限は 1 です。\n" @@ -5402,10 +5657,6 @@ msgstr "視差遮蔽スケール" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "視差遮蔽強度" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5422,8 +5673,12 @@ "ときに使用されます。" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "スクリーンショットを保存するパス。" +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 "" @@ -5472,6 +5727,14 @@ 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 "物理" @@ -5548,6 +5811,22 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" +"プロメテウスリスナーのアドレス。\n" +"minetest が ENABLE_PROMETHEUS オプションを有効にしてコンパイルされている場合、\n" +"そのアドレスのプロメテウスのメトリックスリスナーを有効にします。\n" +"メトリックは http://127.0.0.1:30000/metrics で取得可能" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "大きな洞窟の液体を含む割合です。" @@ -6059,6 +6338,16 @@ #: 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 "" +"既定のノード、アイテム、ツールのスタック数を指定します。\n" +"Mod またはゲームは、特定の(またはすべての)アイテムのスタック数を\n" +"明示的に設定する場合があることに注意してください。" + +#: 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." @@ -6084,6 +6373,10 @@ msgstr "ステップマウンテンの広がりノイズ" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "3Dモード視差の強さです。" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "生成された法線マップの強さです。" @@ -6098,10 +6391,6 @@ "光度曲線の範囲を定義します。" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "視差の強さです。" - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "厳密なプロトコルチェック" @@ -6110,6 +6399,28 @@ 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 the 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 "" +"密な浮遊大陸層に配置されるオプションの水の表面レベル。\n" +"水は規定で無効になっており、この値が 'mgv7_floatland_ymax' - 'mgv7_floatland_taper'\n" +"(上部の先細り開始点)より上に設定されている場合にのみ配置されます。\n" +"***警告、サーバーのパフォーマンスへの潜在的な危険性***:\n" +"水の配置を有効にする場合、浮遊大陸を密な層にするために\n" +"'mgv7_floatland_density' を2.0(または 'mgv7_np_floatland' に応じて他の必要な値)に\n" +"設定して、サーバーに集中する極端な水の流れを避け、下の世界表面への大規模な\n" +"洪水を避けるようにテストする必要があります。" + +#: src/settings_translation_file.cpp msgid "Synchronous SQLite" msgstr "SQLite同期" @@ -6246,13 +6557,13 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" "アクティブブロックの対象となる各プレイヤーの周囲のブロックの量の半径、\n" "マップブロック(16ノード)で定めます。\n" "アクティブブロックのオブジェクトはロードされ、ABMが実行されます。\n" "これはアクティブオブジェクト(モブ)が維持される最小範囲でもあります。\n" -"これは active_object_range と一緒に設定する必要があります。" +"これは active_object_send_range_blocks と一緒に設定する必要があります。" #: src/settings_translation_file.cpp msgid "" @@ -6433,6 +6744,10 @@ msgstr "ダンジョンのY値の上限。" #: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "浮遊大陸の Y の上限。" + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "平らではなく立体な雲を使用します。" @@ -6817,6 +7132,18 @@ msgstr "大きな洞窟が最大サイズに拡大するYの距離。" #: 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 "" +"完全な密度からゼロまでの浮遊大陸先細りの Y距離。\n" +"先細りは、Y制限からこの距離で始まります。\n" +"密な浮遊大陸層の場合、これは丘/山の高さを制御します。\n" +"Y制限間の距離の半分以下でなければなりません。" + +#: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." msgstr "平均地形面のYレベル。" @@ -6848,130 +7175,136 @@ msgid "cURL timeout" msgstr "cURLタイムアウト" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "ライトテーブルのガンマ補正を調整します。数値が大きいほど明るくなります。\n" -#~ "この設定はクライアント専用であり、サーバでは無視されます。" +#~ msgid "Toggle Cinematic" +#~ msgstr "映画風モード切替" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "山型浮遊大陸が中間点の上下でどのように先細くなるかを変更します。" +#~ msgid "Select Package File:" +#~ msgstr "パッケージファイルを選択:" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "光度曲線ミッドブーストの中心。" +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "大きな洞窟内の溶岩のY高さ上限。" -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "山型浮遊大陸の密度を制御します。\n" -#~ "ノイズのオフセットは、'mgv7_np_mountain' ノイズ値に追加されます。" +#~ msgid "Waving Water" +#~ msgstr "揺れる水" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "トンネルの幅を制御、小さい方の値ほど広いトンネルを生成します。" +#~ msgid "Whether dungeons occasionally project from the terrain." +#~ msgstr "ダンジョンが時折地形から突出するかどうか。" -#~ msgid "Darkness sharpness" -#~ msgstr "暗さの鋭さ" +#~ msgid "Projecting dungeons" +#~ msgstr "突出するダンジョン" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." -#~ msgstr "" -#~ "浮遊大陸の滑らかな地形の地域を定義します。\n" -#~ "ノイズが 0 より大きいとき、滑らかな浮遊大陸になります。" +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "浮遊大陸の影が広がるYレベル。" + +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "浮遊大陸の中間点と湖面のYレベル。" + +#~ msgid "Waving water" +#~ msgstr "揺れる水" + +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgstr "浮遊大陸の滑らかな地形における丘の高さと湖の深さの変動。" #~ msgid "" -#~ "Deprecated, define and locate cave liquids using biome definitions " -#~ "instead.\n" -#~ "Y of upper limit of lava in large caves." -#~ msgstr "" -#~ "廃止予定、代わりにバイオーム定義を使用して洞窟の液体を定義および特定しま" -#~ "す。\n" -#~ "大きな洞窟内の溶岩のY高さ上限。" +#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgstr "浮遊大陸の山の中間点の上と下の典型的な最大高さ。" -#~ msgid "Enable VBO" -#~ msgstr "VBOを有効化" +#~ msgid "This font will be used for certain languages." +#~ msgstr "このフォントは特定の言語で使用されます。" -#~ msgid "Enables filmic tone mapping" -#~ msgstr "フィルム調トーンマッピング有効にする" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "光度曲線ミッドブーストの強さ。" -#~ msgid "Floatland base height noise" -#~ msgstr "浮遊大陸の基準高さノイズ" +#~ msgid "Shadow limit" +#~ msgstr "影の制限" -#~ msgid "Floatland base noise" -#~ msgstr "浮遊大陸の基準ノイズ" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "TrueTypeフォントまたはビットマップへのパス。" -#~ msgid "Floatland level" -#~ msgstr "浮遊大陸の水位" +#~ msgid "Lightness sharpness" +#~ msgstr "明るさの鋭さ" -#~ msgid "Floatland mountain density" -#~ msgstr "浮遊大陸の山の密度" +#~ msgid "Lava depth" +#~ msgstr "溶岩の深さ" -#~ msgid "Floatland mountain exponent" -#~ msgstr "浮遊大陸の山指数" +#~ msgid "IPv6 support." +#~ msgstr "IPv6 サポート。" -#~ msgid "Floatland mountain height" -#~ msgstr "浮遊大陸の山の高さ" +#~ msgid "Gamma" +#~ msgstr "ガンマ" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "フォントの影の透過 (不透明、0~255の間)。" -#~ msgid "Gamma" -#~ msgstr "ガンマ" +#~ msgid "Floatland mountain height" +#~ msgstr "浮遊大陸の山の高さ" -#~ msgid "IPv6 support." -#~ msgstr "IPv6 サポート。" +#~ msgid "Floatland base height noise" +#~ msgstr "浮遊大陸の基準高さノイズ" -#~ msgid "Lava depth" -#~ msgstr "溶岩の深さ" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "フィルム調トーンマッピング有効にする" -#~ msgid "Lightness sharpness" -#~ msgstr "明るさの鋭さ" +#~ msgid "Enable VBO" +#~ msgstr "VBOを有効化" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "TrueTypeフォントまたはビットマップへのパス。" +#~ msgid "" +#~ "Deprecated, define and locate cave liquids using biome definitions " +#~ "instead.\n" +#~ "Y of upper limit of lava in large caves." +#~ msgstr "" +#~ "廃止予定、代わりにバイオーム定義を使用して洞窟の液体を定義および特定しま" +#~ "す。\n" +#~ "大きな洞窟内の溶岩のY高さ上限。" -#~ msgid "Shadow limit" -#~ msgstr "影の制限" +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "浮遊大陸の滑らかな地形の地域を定義します。\n" +#~ "ノイズが 0 より大きいとき、滑らかな浮遊大陸になります。" -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "光度曲線ミッドブーストの強さ。" +#~ msgid "Darkness sharpness" +#~ msgstr "暗さの鋭さ" -#~ msgid "This font will be used for certain languages." -#~ msgstr "このフォントは特定の言語で使用されます。" +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "トンネルの幅を制御、小さい方の値ほど広いトンネルを生成します。" #~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." -#~ msgstr "浮遊大陸の山の中間点の上と下の典型的な最大高さ。" - -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." -#~ msgstr "浮遊大陸の滑らかな地形における丘の高さと湖の深さの変動。" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "山型浮遊大陸の密度を制御します。\n" +#~ "ノイズのオフセットは、'mgv7_np_mountain' ノイズ値に追加されます。" -#~ msgid "Waving water" -#~ msgstr "揺れる水" +#~ msgid "Center of light curve mid-boost." +#~ msgstr "光度曲線ミッドブーストの中心。" -#~ msgid "Y-level of floatland midpoint and lake surface." -#~ msgstr "浮遊大陸の中間点と湖面のYレベル。" +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." +#~ msgstr "山型浮遊大陸が中間点の上下でどのように先細くなるかを変更します。" -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "浮遊大陸の影が広がるYレベル。" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "ライトテーブルのガンマ補正を調整します。数値が大きいほど明るくなります。\n" +#~ "この設定はクライアント専用であり、サーバでは無視されます。" -#~ msgid "Projecting dungeons" -#~ msgstr "突出するダンジョン" +#~ msgid "Path to save screenshots at." +#~ msgstr "スクリーンショットを保存するパス。" -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "ダンジョンが時折地形から突出するかどうか。" +#~ msgid "Parallax occlusion strength" +#~ msgstr "視差遮蔽強度" -#~ msgid "Waving Water" -#~ msgstr "揺れる水" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "ディスク上に出現するキューの制限" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "大きな洞窟内の溶岩のY高さ上限。" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "$1をインストールしています、お待ちください..." -#~ msgid "Select Package File:" -#~ msgstr "パッケージファイルを選択:" +#~ msgid "Back" +#~ msgstr "戻る" -#~ msgid "Toggle Cinematic" -#~ msgstr "映画風モード切替" +#~ msgid "Ok" +#~ msgstr "決定" diff -Nru minetest-5.2.0/po/ja_KS/minetest.po minetest-5.3.0/po/ja_KS/minetest.po --- minetest-5.2.0/po/ja_KS/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/ja_KS/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Japanese (Kansai) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-01-11 18:26+0000\n" "Last-Translator: rubenwardy \n" "Language-Team: Japanese (Kansai) 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 "FPS in pause menu" msgstr "" @@ -2846,6 +3056,34 @@ 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 "Fly key" msgstr "" @@ -2899,6 +3137,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4194,14 +4438,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4265,6 +4501,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4331,7 +4571,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4419,10 +4661,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4490,13 +4728,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4581,6 +4819,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4739,9 +4981,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4818,10 +5057,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4831,7 +5066,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4865,6 +5102,14 @@ 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 "" @@ -4933,6 +5178,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5371,6 +5628,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5393,6 +5657,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5404,15 +5672,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5529,7 +5807,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5682,6 +5960,10 @@ 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 "" @@ -6001,6 +6283,14 @@ 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 "" diff -Nru minetest-5.2.0/po/jbo/minetest.po minetest-5.3.0/po/jbo/minetest.po --- minetest-5.2.0/po/jbo/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/jbo/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Lojban (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-03-15 18:36+0000\n" "Last-Translator: Robin Townsend \n" "Language-Team: Lojban 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 "FPS in pause menu" msgstr "" @@ -2954,6 +3166,34 @@ 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 "Fly key" msgstr "" @@ -3007,6 +3247,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4306,14 +4552,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4377,6 +4615,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp #, fuzzy msgid "Main menu script" msgstr "lo ralju" @@ -4445,7 +4687,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4533,10 +4777,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4604,13 +4844,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4695,6 +4935,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4855,9 +5099,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4934,10 +5175,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4947,7 +5184,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4981,6 +5220,14 @@ 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 "" @@ -5050,6 +5297,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5496,6 +5755,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5518,6 +5784,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5529,15 +5799,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5654,7 +5934,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5808,6 +6088,10 @@ 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 "" @@ -6135,6 +6419,14 @@ 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 "" @@ -6169,3 +6461,12 @@ #, fuzzy #~ msgid "Enable VBO" #~ msgstr "selpli" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr ".i ca'o kibycpa la'o zoi. $1 .zoi je cu samtcise'a ri .i ko denpa" + +#~ msgid "Back" +#~ msgstr "xruti" + +#~ msgid "Ok" +#~ msgstr "je'e" diff -Nru minetest-5.2.0/po/kk/minetest.po minetest-5.3.0/po/kk/minetest.po --- minetest-5.2.0/po/kk/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/kk/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Kazakh (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-01-11 18:26+0000\n" -"Last-Translator: rubenwardy \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-06 21:41+0000\n" +"Last-Translator: Fontan 030 \n" "Language-Team: Kazakh \n" "Language: kk\n" @@ -12,7 +12,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10.1\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,21 +22,21 @@ msgid "You died" msgstr "" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" -msgstr "" +msgstr "Lua скриптінде қате кездесті:" #: builtin/fstk/ui.lua msgid "An error occurred:" -msgstr "" +msgstr "Қате кездесті:" #: builtin/fstk/ui.lua msgid "Main menu" -msgstr "" - -#: builtin/fstk/ui.lua -msgid "Ok" -msgstr "" +msgstr "Басты мәзір" #: builtin/fstk/ui.lua msgid "Reconnect" @@ -48,7 +48,7 @@ #: builtin/mainmenu/common.lua src/client/game.cpp msgid "Loading..." -msgstr "" +msgstr "Жүктелуде..." #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " @@ -82,7 +82,7 @@ #: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp #: src/gui/guiPasswordChange.cpp msgid "Cancel" -msgstr "" +msgstr "Болдырмау" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" @@ -111,16 +111,20 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua -msgid "Mod:" +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 "" +msgstr "Ойын сипаттамасы жоқ." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" @@ -141,7 +145,7 @@ #: builtin/mainmenu/dlg_config_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp msgid "Save" -msgstr "" +msgstr "Сақтау" #: builtin/mainmenu/dlg_config_world.lua msgid "World:" @@ -149,22 +153,22 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "enabled" -msgstr "" +msgstr "қосылған" #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" +msgid "Back to Main Menu" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back to Main Menu" +msgid "ContentDB is not available when Minetest was compiled without cURL" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." +msgid "Downloading..." msgstr "" #: builtin/mainmenu/dlg_contentstore.lua @@ -174,7 +178,7 @@ #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Games" -msgstr "" +msgstr "Ойындар" #: builtin/mainmenu/dlg_contentstore.lua msgid "Install" @@ -183,7 +187,7 @@ #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" -msgstr "" +msgstr "Модтар" #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" @@ -196,7 +200,7 @@ #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua msgid "Search" -msgstr "" +msgstr "Іздеу" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -204,10 +208,14 @@ #: builtin/mainmenu/dlg_contentstore.lua msgid "Uninstall" -msgstr "" +msgstr "Жою" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update" +msgstr "Жаңарту" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" msgstr "" #: builtin/mainmenu/dlg_create_world.lua @@ -215,10 +223,42 @@ 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 "Download a game, such as Minetest Game, from minetest.net" msgstr "" @@ -226,25 +266,143 @@ msgid "Download one from minetest.net" 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 src/settings_translation_file.cpp msgid "Game" +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 "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/dlg_settings_advanced.lua msgid "Seed" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 "Warning: The Development Test is meant for developers." msgstr "" #: builtin/mainmenu/dlg_create_world.lua @@ -263,7 +421,7 @@ #: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua #: src/client/keycode.cpp msgid "Delete" -msgstr "" +msgstr "Жою" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: failed to delete \"$1\"" @@ -373,7 +531,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X" -msgstr "" +msgstr "X" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X spread" @@ -381,7 +539,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y" -msgstr "" +msgstr "Y" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y spread" @@ -389,7 +547,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z" -msgstr "" +msgstr "Z" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z spread" @@ -496,7 +654,7 @@ #: builtin/mainmenu/tab_content.lua msgid "Rename" -msgstr "" +msgstr "Атауын өзгерту" #: builtin/mainmenu/tab_content.lua msgid "Uninstall Package" @@ -555,12 +713,16 @@ msgstr "" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "" #: builtin/mainmenu/tab_local.lua msgid "New" -msgstr "" +msgstr "Жаңа" #: builtin/mainmenu/tab_local.lua msgid "No world created or selected!" @@ -633,7 +795,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" -msgstr "" +msgstr "3D бұлттар" #: builtin/mainmenu/tab_settings.lua msgid "4x" @@ -693,7 +855,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "No" -msgstr "" +msgstr "Жоқ" #: builtin/mainmenu/tab_settings.lua msgid "No Filter" @@ -741,7 +903,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Settings" -msgstr "" +msgstr "Баптаулар" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Shaders" @@ -793,7 +955,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Yes" -msgstr "" +msgstr "Иә" #: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" @@ -845,7 +1007,7 @@ #: src/client/clientlauncher.cpp msgid "Main Menu" -msgstr "" +msgstr "Басты мәзір" #: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." @@ -853,7 +1015,7 @@ #: src/client/clientlauncher.cpp msgid "Player name too long." -msgstr "" +msgstr "Ойыншының аты тым ұзын." #: src/client/clientlauncher.cpp msgid "Please choose a name!" @@ -956,7 +1118,7 @@ #: src/client/game.cpp msgid "Continue" -msgstr "" +msgstr "Жалғастыру" #: src/client/game.cpp #, c-format @@ -1023,11 +1185,11 @@ #: src/client/game.cpp msgid "Exit to Menu" -msgstr "" +msgstr "Мәзірге шығу" #: src/client/game.cpp msgid "Exit to OS" -msgstr "" +msgstr "Ойыннан шығу" #: src/client/game.cpp msgid "Fast mode disabled" @@ -1059,7 +1221,7 @@ #: src/client/game.cpp msgid "Fog enabled" -msgstr "" +msgstr "Тұман қосылды" #: src/client/game.cpp msgid "Game info:" @@ -1095,7 +1257,7 @@ #: src/client/game.cpp msgid "Minimap hidden" -msgstr "" +msgstr "Миникарта жасырылды" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x1" @@ -1171,7 +1333,7 @@ #: src/client/game.cpp msgid "Singleplayer" -msgstr "" +msgstr "Бір ойыншы" #: src/client/game.cpp msgid "Sound Volume" @@ -1182,6 +1344,14 @@ 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 "" @@ -1213,25 +1383,25 @@ msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "" #: src/client/gameui.cpp msgid "Chat hidden" -msgstr "" +msgstr "Чат жасырылды" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "" +msgstr "Чат көрсетілді" #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "" +msgstr "HUD жасырылды" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "" +msgstr "HUD көрсетілді" #: src/client/gameui.cpp msgid "Profiler hidden" @@ -1332,7 +1502,7 @@ #: src/client/keycode.cpp msgid "Left Windows" -msgstr "" +msgstr "Сол Win" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp @@ -1425,7 +1595,7 @@ #: src/client/keycode.cpp msgid "Play" -msgstr "" +msgstr "Ойнау" #. ~ "Print screen" key #: src/client/keycode.cpp @@ -1483,7 +1653,7 @@ #: src/client/keycode.cpp msgid "Space" -msgstr "" +msgstr "Бос орын" #: src/client/keycode.cpp msgid "Tab" @@ -1784,13 +1954,17 @@ #: src/settings_translation_file.cpp msgid "3D clouds" -msgstr "" +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 "" @@ -1801,6 +1975,14 @@ 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 "" @@ -1849,7 +2031,7 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp @@ -1894,6 +2076,16 @@ 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 "Advanced" msgstr "" @@ -1907,10 +2099,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "" @@ -1948,11 +2136,11 @@ #: src/settings_translation_file.cpp msgid "Apple trees noise" -msgstr "" +msgstr "Алма ағаштары шуы" #: src/settings_translation_file.cpp msgid "Arm inertia" -msgstr "" +msgstr "Қол инерциясы" #: src/settings_translation_file.cpp msgid "" @@ -2160,10 +2348,18 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" @@ -2429,6 +2625,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2737,6 +2937,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "" @@ -2846,6 +3056,34 @@ 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 "Fly key" msgstr "" @@ -2855,7 +3093,7 @@ #: src/settings_translation_file.cpp msgid "Fog" -msgstr "" +msgstr "Тұман" #: src/settings_translation_file.cpp msgid "Fog start" @@ -2899,6 +3137,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -2958,7 +3202,7 @@ #: src/settings_translation_file.cpp msgid "FreeType fonts" -msgstr "" +msgstr "FreeType қаріптері" #: src/settings_translation_file.cpp msgid "" @@ -3033,11 +3277,11 @@ #: src/settings_translation_file.cpp msgid "Graphics" -msgstr "" +msgstr "Графика" #: src/settings_translation_file.cpp msgid "Gravity" -msgstr "" +msgstr "Гравитация" #: src/settings_translation_file.cpp msgid "Ground level" @@ -4194,14 +4438,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4265,6 +4501,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4331,7 +4571,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4419,10 +4661,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4490,13 +4728,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4581,6 +4819,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4739,9 +4981,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4818,10 +5057,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4831,7 +5066,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4865,10 +5102,18 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Physics" +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 "Pitch move key" msgstr "" @@ -4933,6 +5178,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5371,6 +5628,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5393,6 +5657,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5404,15 +5672,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5529,7 +5807,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5682,6 +5960,10 @@ 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 "" @@ -6001,6 +6283,14 @@ 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 "" diff -Nru minetest-5.2.0/po/kn/minetest.po minetest-5.3.0/po/kn/minetest.po --- minetest-5.2.0/po/kn/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/kn/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Kannada (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2019-11-10 15:04+0000\n" "Last-Translator: Krock \n" "Language-Team: Kannada 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 "FPS in pause menu" msgstr "" @@ -2859,6 +3070,34 @@ 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 "Fly key" msgstr "" @@ -2912,6 +3151,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4207,14 +4452,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4278,6 +4515,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4344,7 +4585,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4432,10 +4675,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4503,13 +4742,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4594,6 +4833,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4752,9 +4995,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4831,10 +5071,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4844,7 +5080,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4878,6 +5116,14 @@ 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 "" @@ -4946,6 +5192,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5384,6 +5642,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5406,6 +5671,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5417,15 +5686,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5542,7 +5821,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5695,6 +5974,10 @@ 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 "" @@ -6014,6 +6297,14 @@ 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 "" @@ -6044,3 +6335,12 @@ #: src/settings_translation_file.cpp msgid "cURL timeout" msgstr "" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "$1 ಡೌನ್ಲೋಡ್ ಮತ್ತು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾಗುತ್ತಿದೆ, ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ..." + +#~ msgid "Back" +#~ msgstr "ಹಿಂದೆ" + +#~ msgid "Ok" +#~ msgstr "ಸರಿ" diff -Nru minetest-5.2.0/po/ko/minetest.po minetest-5.3.0/po/ko/minetest.po --- minetest-5.2.0/po/ko/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/ko/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Korean (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: Korean 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 "FPS in pause menu" msgstr "일시정지 메뉴에서 FPS" @@ -3060,6 +3288,41 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Floatland의 산 밀집도" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Floatland의 산 높이" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Floatland의 산 높이" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Floatland의 높이" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Floatland의 산 밀집도" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Floatland의 산 밀집도" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Floatland의 높이" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "비행 키" @@ -3113,6 +3376,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4690,14 +4959,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "" - -#: src/settings_translation_file.cpp #, fuzzy msgid "" "Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n" @@ -4763,6 +5024,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "주 메뉴 스크립트" @@ -4830,7 +5095,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4926,10 +5193,6 @@ msgstr "맵젠 디버그" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Mapgen 이름" @@ -4997,13 +5260,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -5095,6 +5358,10 @@ msgstr "선택한 개체를 강조 표시 하는 데 사용 하는 방법입니다." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "미니맵" @@ -5261,9 +5528,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5343,11 +5607,6 @@ msgstr "시차 교합 규모" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Parallax occlusion strength" -msgstr "시차 교합 강도" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5357,8 +5616,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "스크린샷 저장 경로입니다." +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 "" @@ -5392,6 +5653,14 @@ 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 "물리학" @@ -5472,6 +5741,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5979,6 +6260,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -6002,6 +6290,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "자동으로 생성되는 노멀맵의 강도." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "자동으로 생성되는 노멀맵의 강도." @@ -6013,10 +6306,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "" - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "엄격한 프로토콜 검사" @@ -6025,6 +6314,20 @@ 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 the 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 "" @@ -6147,7 +6450,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6316,6 +6619,10 @@ 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 "평평하게 보는 대신에 3D 구름 효과를 사용합니다." @@ -6674,6 +6981,14 @@ 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 "" @@ -6705,53 +7020,57 @@ msgid "cURL timeout" msgstr "" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "터널 너비를 조절, 작은 수치는 넓은 터널을 만듭니다." - -#~ msgid "Enable VBO" -#~ msgstr "VBO 적용" +#~ msgid "Toggle Cinematic" +#~ msgstr "시네마틱 스위치" -#~ msgid "Floatland level" -#~ msgstr "Floatland의 높이" +#, fuzzy +#~ msgid "Select Package File:" +#~ msgstr "선택한 모드 파일:" -#~ msgid "Floatland mountain density" -#~ msgstr "Floatland의 산 밀집도" +#~ msgid "Waving Water" +#~ msgstr "물결 효과" -#, fuzzy -#~ msgid "Floatland mountain exponent" -#~ msgstr "Floatland의 산 밀집도" +#~ msgid "Waving water" +#~ msgstr "물결 효과" -#~ msgid "Floatland mountain height" -#~ msgstr "Floatland의 산 높이" +#~ msgid "This font will be used for certain languages." +#~ msgstr "이 글꼴은 특정 언어에 사용 됩니다." -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "글꼴 그림자 투명도 (불투명 함, 0과 255 사이)." +#~ msgid "Shadow limit" +#~ msgstr "그림자 제한" -#~ msgid "Gamma" -#~ msgstr "감마" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "TrueTypeFont 또는 비트맵의 경로입니다." #, fuzzy #~ msgid "Lava depth" #~ msgstr "큰 동굴 깊이" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "TrueTypeFont 또는 비트맵의 경로입니다." +#~ msgid "Gamma" +#~ msgstr "감마" -#~ msgid "Shadow limit" -#~ msgstr "그림자 제한" +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "글꼴 그림자 투명도 (불투명 함, 0과 255 사이)." -#~ msgid "This font will be used for certain languages." -#~ msgstr "이 글꼴은 특정 언어에 사용 됩니다." +#~ msgid "Enable VBO" +#~ msgstr "VBO 적용" -#~ msgid "Waving water" -#~ msgstr "물결 효과" +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "터널 너비를 조절, 작은 수치는 넓은 터널을 만듭니다." -#~ msgid "Waving Water" -#~ msgstr "물결 효과" +#~ msgid "Path to save screenshots at." +#~ msgstr "스크린샷 저장 경로입니다." #, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "선택한 모드 파일:" +#~ msgid "Parallax occlusion strength" +#~ msgstr "시차 교합 강도" -#~ msgid "Toggle Cinematic" -#~ msgstr "시네마틱 스위치" +#, fuzzy +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "$1 를(을) 다운로드중입니다. 기다려주세요..." + +#~ msgid "Back" +#~ msgstr "뒤로" + +#~ msgid "Ok" +#~ msgstr "확인" diff -Nru minetest-5.2.0/po/ky/minetest.po minetest-5.3.0/po/ky/minetest.po --- minetest-5.2.0/po/ky/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/ky/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Kyrgyz (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2019-11-10 15:04+0000\n" "Last-Translator: Krock \n" "Language-Team: Kyrgyz 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 "FPS in pause menu" msgstr "" @@ -2999,6 +3212,34 @@ 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 "Fly key" msgstr "" @@ -3052,6 +3293,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4355,14 +4602,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4426,6 +4665,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp #, fuzzy msgid "Main menu script" msgstr "Башкы меню" @@ -4494,7 +4737,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4582,10 +4827,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4653,13 +4894,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4745,6 +4986,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4905,9 +5150,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4984,10 +5226,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4997,7 +5235,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -5031,6 +5271,14 @@ 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 "" @@ -5100,6 +5348,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5552,6 +5812,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5574,6 +5841,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5585,15 +5856,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5710,7 +5991,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5864,6 +6145,10 @@ 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 "" @@ -6190,6 +6475,14 @@ 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 "" @@ -6222,17 +6515,20 @@ msgstr "" #, fuzzy -#~ msgid "Enable VBO" -#~ msgstr "Баарын күйгүзүү" +#~ msgid "Toggle Cinematic" +#~ msgstr "Тез басууга которуу" + +#, fuzzy +#~ msgid "Select Package File:" +#~ msgstr "Дүйнөнү тандаңыз:" #, fuzzy #~ msgid "Enables filmic tone mapping" #~ msgstr "Убалды күйгүзүү" #, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "Дүйнөнү тандаңыз:" +#~ msgid "Enable VBO" +#~ msgstr "Баарын күйгүзүү" -#, fuzzy -#~ msgid "Toggle Cinematic" -#~ msgstr "Тез басууга которуу" +#~ msgid "Back" +#~ msgstr "Артка" diff -Nru minetest-5.2.0/po/lo/minetest.po minetest-5.3.0/po/lo/minetest.po --- minetest-5.2.0/po/lo/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/lo/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Lao (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-01-11 18:26+0000\n" "Last-Translator: rubenwardy \n" "Language-Team: Lao 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 "FPS in pause menu" msgstr "" @@ -2846,6 +3056,34 @@ 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 "Fly key" msgstr "" @@ -2899,6 +3137,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4194,14 +4438,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4265,6 +4501,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4331,7 +4571,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4419,10 +4661,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4490,13 +4728,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4581,6 +4819,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4739,9 +4981,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4818,10 +5057,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4831,7 +5066,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4865,6 +5102,14 @@ 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 "" @@ -4933,6 +5178,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5371,6 +5628,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5393,6 +5657,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5404,15 +5672,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5529,7 +5807,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5682,6 +5960,10 @@ 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 "" @@ -6001,6 +6283,14 @@ 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 "" diff -Nru minetest-5.2.0/po/lt/minetest.po minetest-5.3.0/po/lt/minetest.po --- minetest-5.2.0/po/lt/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/lt/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Lithuanian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-02-22 19:27+0000\n" -"Last-Translator: An0n3m0us \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-05-10 12:32+0000\n" +"Last-Translator: restcoser \n" "Language-Team: Lithuanian \n" "Language: lt\n" @@ -14,7 +14,7 @@ "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.0-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -25,6 +25,10 @@ msgid "You died" msgstr "Jūs numirėte." +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua #, fuzzy msgid "An error occurred in a Lua script:" @@ -40,10 +44,6 @@ msgstr "Pagrindinis meniu" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Gerai" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Prisijungti iš naujo" @@ -125,6 +125,10 @@ "rašmenys [a-z0-9_] yra leidžiami." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Papildinys:" @@ -173,18 +177,18 @@ msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Atgal" - -#: builtin/mainmenu/dlg_contentstore.lua #, fuzzy msgid "Back to Main Menu" msgstr "Pagrindinis meniu" #: builtin/mainmenu/dlg_contentstore.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua #, fuzzy -msgid "Downloading and installing $1, please wait..." -msgstr "Atsiunčiama $1, prašome palaukti..." +msgid "Downloading..." +msgstr "Įkeliama..." #: builtin/mainmenu/dlg_contentstore.lua #, fuzzy @@ -230,6 +234,10 @@ #: builtin/mainmenu/dlg_contentstore.lua msgid "Update" +msgstr "Atnaujinti" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" msgstr "" #: builtin/mainmenu/dlg_create_world.lua @@ -237,11 +245,44 @@ msgstr "Pasaulis, pavadintas „$1“ jau yra" #: 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 "Sukurti" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy +msgid "Decorations" +msgstr "Papildinio informacija:" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Atsisiųskite sub žaidimą, tokį kaip minetest_game, iš minetest.net" @@ -249,26 +290,147 @@ msgid "Download one from minetest.net" msgstr "Atsisiųsti vieną iš minetest.net" +#: 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 src/settings_translation_file.cpp msgid "Game" msgstr "Žaidimas" +#: 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 "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 "Žemėlapių generavimas" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Mapgen-specific flags" +msgstr "Žemėlapių generavimas" + +#: 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 #, fuzzy msgid "No game selected" msgstr "Intervalo pasirinkimas" #: 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 +#, fuzzy +msgid "Rivers" +msgstr "Dešinieji langai" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Sėkla" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "Dėmesio: Minimalus kūrimo bandymas yra skirtas vystytojams." #: builtin/mainmenu/dlg_create_world.lua @@ -613,6 +775,10 @@ msgstr "Serveris" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Vardas/slaptažodis" @@ -1306,6 +1472,14 @@ msgstr "Garso lygis" #: 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 #, fuzzy msgid "Sound unmuted" msgstr "Garso lygis" @@ -1338,7 +1512,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "gerai" @@ -1937,6 +2111,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "" @@ -1947,6 +2125,14 @@ 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 "" @@ -1995,7 +2181,7 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp @@ -2040,6 +2226,16 @@ 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 "Advanced" msgstr "" @@ -2053,10 +2249,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "" @@ -2310,11 +2502,20 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp #, fuzzy msgid "Chat key" msgstr "Nustatyti klavišus" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "Nustatyti klavišus" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" @@ -2598,6 +2799,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "keisti žaidimą" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2910,6 +3116,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "" @@ -2965,7 +3181,7 @@ #: src/settings_translation_file.cpp msgid "Field of view" -msgstr "" +msgstr "Matymo laukas" #: src/settings_translation_file.cpp msgid "Field of view in degrees." @@ -3019,6 +3235,34 @@ 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 "Fly key" msgstr "" @@ -3072,6 +3316,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4376,14 +4626,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4447,6 +4689,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp #, fuzzy msgid "Main menu script" msgstr "Pagrindinis meniu" @@ -4515,7 +4761,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4612,10 +4860,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4683,13 +4927,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4775,6 +5019,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4934,9 +5182,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5014,10 +5259,6 @@ msgstr "Paralaksinė okliuzija" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5027,7 +5268,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -5061,6 +5304,14 @@ 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 "" @@ -5130,6 +5381,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5583,6 +5846,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5605,6 +5875,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5616,15 +5890,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5741,7 +6025,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5894,6 +6178,10 @@ 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 "" @@ -6218,6 +6506,14 @@ 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 "" @@ -6249,17 +6545,27 @@ msgid "cURL timeout" msgstr "" +#~ msgid "Toggle Cinematic" +#~ msgstr "Įjungti kinematografinį" + #, fuzzy -#~ msgid "Enable VBO" -#~ msgstr "Įjungti papildinį" +#~ msgid "Select Package File:" +#~ msgstr "Pasirinkite papildinio failą:" #, fuzzy #~ msgid "Enables filmic tone mapping" #~ msgstr "Leisti sužeidimus" #, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "Pasirinkite papildinio failą:" +#~ msgid "Enable VBO" +#~ msgstr "Įjungti papildinį" -#~ msgid "Toggle Cinematic" -#~ msgstr "Įjungti kinematografinį" +#, fuzzy +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Atsiunčiama $1, prašome palaukti..." + +#~ msgid "Back" +#~ msgstr "Atgal" + +#~ msgid "Ok" +#~ msgstr "Gerai" diff -Nru minetest-5.2.0/po/lv/minetest.po minetest-5.3.0/po/lv/minetest.po --- minetest-5.2.0/po/lv/minetest.po 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/po/lv/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,6395 @@ +# 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: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-04 16:41+0000\n" +"Last-Translator: Uko Koknevics \n" +"Language-Team: Latvian \n" +"Language: lv\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 == 0 || n % 100 >= 11 && n % 100 <= " +"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" +"X-Generator: Weblate 4.1-dev\n" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "Respawn" +msgstr "Atdzīvoties" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "You died" +msgstr "Jūs nomirāt" + +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occurred in a Lua script:" +msgstr "Radās kļūme Lua skriptā:" + +#: builtin/fstk/ui.lua +msgid "An error occurred:" +msgstr "Radās kļūme:" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Galvenā izvēlne" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "Atjaunot savienojumu" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "Serveris ir pieprasījis savienojuma atjaunošanu:" + +#: builtin/mainmenu/common.lua src/client/game.cpp +msgid "Loading..." +msgstr "Ielāde..." + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "Protokola versiju neatbilstība. " + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "Serveris pieprasa protokola versiju $1. " + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "Serveris atbalsta protokola versijas starp $1 un $2. " + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Pamēģiniet atkārtoti ieslēgt publisko serveru sarakstu un pārbaudiet " +"interneta savienojumu." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "Mēs atbalstam tikai protokola versiju $1." + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "Mēs atbalstam protokola versijas starp $1 un $2." + +#: 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_rename_modpack.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp +#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiPasswordChange.cpp +msgid "Cancel" +msgstr "Atcelt" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Dependencies:" +msgstr "Atkarības:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable all" +msgstr "Atspējot visus" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable modpack" +msgstr "Atspējot modu komplektu" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "Iespējot visus" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable modpack" +msgstr "Iespējot modu komplektu" + +#: 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 "" +"Neizdevās iespējot modu \"$1\", jo tas satur neatļautus simbolus. Tikai " +"sekojošie simboli ir atļauti: [a-z0-9_]." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mods:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No (optional) dependencies" +msgstr "Nav (neobligāto) atkarību" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No game description provided." +msgstr "Nav atrasts spēles apraksts." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No hard dependencies" +msgstr "Nav obligāto atkarību" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No modpack description provided." +msgstr "Nav atrasts modu komplekta apraksts." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No optional dependencies" +msgstr "Nav neobligāto atkarību" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Optional dependencies:" +msgstr "Neobligātās atkarības:" + +#: builtin/mainmenu/dlg_config_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Saglabāt" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Pasaule:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "iespējots" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "All packages" +msgstr "Visi papildinājumi" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Back to Main Menu" +msgstr "Atpakaļ uz Galveno Izvēlni" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Downloading..." +msgstr "Ielāde..." + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Failed to download $1" +msgstr "Neizdevās lejuplādēt $1" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Games" +msgstr "Spēles" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install" +msgstr "Instalēt" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Mods" +msgstr "Modi" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No packages could be retrieved" +msgstr "Nevarēja iegūt papildinājumus" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No results" +msgstr "Nav resultātu" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "Meklēt" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Texture packs" +msgstr "Tekstūru komplekti" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Uninstall" +msgstr "Atinstalēt" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Update" +msgstr "Atjaunot" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "Pasaule ar nosaukumu “$1” jau eksistē" + +#: 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 +#, fuzzy +msgid "Caves" +msgstr "Oktāvas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Izveidot" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "Informācija:" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a game, such as Minetest Game, from minetest.net" +msgstr "Lejuplādējiet spēles, kā piemēram, “Minetest Game”, no minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Varat tās lejuplādēt no minetest.net" + +#: 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 src/settings_translation_file.cpp +msgid "Game" +msgstr "Spēle" + +#: 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 "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 "Kartes ģenerators" + +#: 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 "Nav izvēlētas spēles" + +#: 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/dlg_settings_advanced.lua +msgid "Seed" +msgstr "Sēkla" + +#: 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 +#, fuzzy +msgid "Warning: The 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 "World name" +msgstr "Pasaules nosaukums" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no games installed." +msgstr "Jums nav instalēta neviena spēle." + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "Are you sure you want to delete \"$1\"?" +msgstr "Vai Jūs esat pārliecināts, ka vēlaties izdzēst “$1”?" + +#: builtin/mainmenu/dlg_delete_content.lua +#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua +#: src/client/keycode.cpp +msgid "Delete" +msgstr "Izdzēst" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: failed to delete \"$1\"" +msgstr "pkgmgr: neizdevās izdzēst “$1”" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: invalid path \"$1\"" +msgstr "pkgmgr: nepieejama atrašanās vieta “$1”" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "Delete World \"$1\"?" +msgstr "Vai izdzēst pasauli “$1”?" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Accept" +msgstr "Piekrist" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Pārsaukt modu komplektu:" + +#: 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 "" +"Šim modu komplektam ir noteikts nosaukums, kas uzdots failā modpack.conf, un " +"tas anulēs jebkādu pārsaukšanu šeit." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "(No description of setting given)" +msgstr "(Nav iestatījuma apraksta)" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "2D Noise" +msgstr "2D Troksnis" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "< Back to Settings page" +msgstr "< Atpakaļ uz Iestatījumu lapu" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Browse" +msgstr "Pārlūkot" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Disabled" +msgstr "Atspējots" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Edit" +msgstr "Izmainīt" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Enabled" +msgstr "Iespējots" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Lacunarity" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Octaves" +msgstr "Oktāvas" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Offset" +msgstr "Nobīde" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Persistance" +msgstr "Noturība" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid integer." +msgstr "Lūdzu ievadiet derīgu veselu skaitli." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid number." +msgstr "Lūdzu ievadiet derīgu skaitli." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Restore Default" +msgstr "Atiestatīt uz noklusējumu" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Scale" +msgstr "Mērogs" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select directory" +msgstr "Izvēlēties mapi" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select file" +msgstr "Izvēlēties failu" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Show technical names" +msgstr "Rādīt tehniskos nosaukumus" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must be at least $1." +msgstr "Vērtībai jābūt vismaz $1." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must not be larger than $1." +msgstr "Vērtībai jābūt ne lielākai par $1." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X" +msgstr "X" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X spread" +msgstr "Izkaisījums pa X asi" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y" +msgstr "Y" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y spread" +msgstr "Izkaisījums pa Y asi" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z" +msgstr "Z" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z spread" +msgstr "Izkaisījums pa Z asi" + +#. ~ "absvalue" is a noise parameter flag. +#. It is short for "absolute value". +#. It can be enabled in noise settings in +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "absvalue" +msgstr "absolūtā vērtība" + +#. ~ "defaults" is a noise parameter flag. +#. It describes the default processing options +#. for noise settings in main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "defaults" +msgstr "noklusējuma" + +#. ~ "eased" is a noise parameter flag. +#. It is used to make the map smoother and +#. can be enabled in noise settings in +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "eased" +msgstr "atvieglots" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 (Enabled)" +msgstr "$1 (Iespējots)" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 mods" +msgstr "$1 modi" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Failed to install $1 to $2" +msgstr "Neizdevās instalēt $1 uz $2" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find real mod name for: $1" +msgstr "Moda instalācija: Neizdevās atrast īsto moda nosaukumu priekš “$1”" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find suitable folder name for modpack $1" +msgstr "" +"Moda instalācija: Neizdevās atrast derīgu mapes nosaukumu priekš modu " +"komplekta “$1”" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: Unsupported file type \"$1\" or broken archive" +msgstr "Instalācija: Neatbalstīts faila tips “$1” vai arī sabojāts arhīvs" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: file: \"$1\"" +msgstr "Instalācija: fails: “$1”" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to find a valid mod or modpack" +msgstr "Neizdevās atrast derīgu modu vai modu komplektu" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a $1 as a texture pack" +msgstr "Neizdevās ieinstalēt $1 kā tekstūru paku" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a game as a $1" +msgstr "Neizdevās instalēt spēli kā $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a mod as a $1" +msgstr "Neizdevās instalēt modu kā $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a modpack as a $1" +msgstr "Neizdevās instalēt modu komplektu kā $1" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +msgstr "Pārlūkot tiešsaistes saturu" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "Saturs" + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "Atspējot tekstūru komplektu" + +#: builtin/mainmenu/tab_content.lua +msgid "Information:" +msgstr "Informācija:" + +#: builtin/mainmenu/tab_content.lua +msgid "Installed Packages:" +msgstr "Instalētie papildinājumi:" + +#: builtin/mainmenu/tab_content.lua +msgid "No dependencies." +msgstr "Nav atkarību." + +#: builtin/mainmenu/tab_content.lua +msgid "No package description available" +msgstr "Nav atrasts papildinājuma apraksts" + +#: builtin/mainmenu/tab_content.lua +msgid "Rename" +msgstr "Pārsaukt" + +#: builtin/mainmenu/tab_content.lua +msgid "Uninstall Package" +msgstr "Atinstalēt papildinājumu" + +#: builtin/mainmenu/tab_content.lua +msgid "Use Texture Pack" +msgstr "Iespējot tekstūru komplektu" + +#: builtin/mainmenu/tab_credits.lua +msgid "Active Contributors" +msgstr "Aktīvie dalībnieki" + +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Pamata izstrādātāji" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Pateicības" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "Bijušie dalībnieki" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Bijušie pamata izstrādātāji" + +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" +msgstr "Paziņot par serveri" + +#: builtin/mainmenu/tab_local.lua +msgid "Bind Address" +msgstr "Piesaistes adrese" + +#: builtin/mainmenu/tab_local.lua +msgid "Configure" +msgstr "Iestatīt" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative Mode" +msgstr "Radošais režīms" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Enable Damage" +msgstr "Iespējot bojājumus" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Game" +msgstr "Spēlēt (kā serveris)" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Server" +msgstr "Palaist serveri" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Name/Password" +msgstr "Vārds/Parole" + +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "Jauns" + +#: builtin/mainmenu/tab_local.lua +msgid "No world created or selected!" +msgstr "Pasaule nav ne izveidota, ne izvēlēta!" + +#: builtin/mainmenu/tab_local.lua +msgid "Play Game" +msgstr "Spēlēt" + +#: builtin/mainmenu/tab_local.lua +msgid "Port" +msgstr "Ports" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "Izvēlieties pasauli:" + +#: builtin/mainmenu/tab_local.lua +msgid "Server Port" +msgstr "Servera ports" + +#: builtin/mainmenu/tab_local.lua +msgid "Start Game" +msgstr "Sākt spēli" + +#: builtin/mainmenu/tab_online.lua +msgid "Address / Port" +msgstr "Adrese / Ports" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Pieslēgties" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "Radošais režīms" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Bojājumi iespējoti" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Del. Favorite" +msgstr "Izdzēst no izlases" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Favorite" +msgstr "Pievienot izlasei" + +#: builtin/mainmenu/tab_online.lua +msgid "Join Game" +msgstr "Pievienoties spēlei" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name / Password" +msgstr "Vārds / Parole" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Ping" +msgstr "Pings" + +#. ~ PvP = Player versus Player +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP iespējots" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "2x" + +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "3D mākoņi" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "4x" + +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "8x" + +#: builtin/mainmenu/tab_settings.lua +msgid "All Settings" +msgstr "Visi iestatījumi" + +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "Gludināšana:" + +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "" +"Vai esat pārliecināts, ka vēlaties atiestatīt savu viena spēlētāja pasauli?" + +#: builtin/mainmenu/tab_settings.lua +msgid "Autosave Screen Size" +msgstr "Atcerēties ekrāna izmēru" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Bilineārais filtrs" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bump Mapping" +msgstr "“Bump Mapping”" + +#: builtin/mainmenu/tab_settings.lua src/client/game.cpp +msgid "Change Keys" +msgstr "Nomainīt kontroles" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "Savienots stikls" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "Skaistas lapas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Generate Normal Maps" +msgstr "Izveidot normāl-kartes" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "“Mipmap”" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "“Mipmap” + anizotr. filtrs" + +#: builtin/mainmenu/tab_settings.lua +msgid "No" +msgstr "Nē" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "Bez filtra" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "Bez “mipmap”" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "Bloku izcelšana" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Outlining" +msgstr "Bloku konturēšana" + +#: builtin/mainmenu/tab_settings.lua +msgid "None" +msgstr "Nekas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "Necaurredzamas lapas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Necaurredzams ūdens" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Tekstūru dziļums" + +#: builtin/mainmenu/tab_settings.lua +msgid "Particles" +msgstr "Daļiņas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "Atiestatīt viena spēlētāja pasauli" + +#: builtin/mainmenu/tab_settings.lua +msgid "Screen:" +msgstr "Ekrāns:" + +#: builtin/mainmenu/tab_settings.lua +msgid "Settings" +msgstr "Iestatījumi" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Šeideri" + +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders (unavailable)" +msgstr "Šeideri (nepieejami)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "Vienkāršas lapas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Gluds apgaismojums" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "Teksturēšana:" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "Lai iespējotu šeiderus, jāizmanto OpenGL draiveris." + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Tone Mapping" +msgstr "Toņu atbilstība" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold: (px)" +msgstr "Pieskārienslieksnis: (px)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "Trilineārais filtrs" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "Viļņojošas lapas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Liquids" +msgstr "Viļņojoši šķidrumi" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "Viļņojoši augi" + +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Jā" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "Iestatīt modus" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "Galvenā izvēlne" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Sākt viena spēlētāja spēli" + +#: src/client/client.cpp +msgid "Connection timed out." +msgstr "Savienojuma noildze." + +#: src/client/client.cpp +msgid "Done!" +msgstr "Gatavs!" + +#: src/client/client.cpp +msgid "Initializing nodes" +msgstr "Inicializē blokus" + +#: src/client/client.cpp +msgid "Initializing nodes..." +msgstr "Inicializē blokus..." + +#: src/client/client.cpp +msgid "Loading textures..." +msgstr "Ielādē tekstūras..." + +#: src/client/client.cpp +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 +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" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Nav izvēlēta ne pasaule, ne adrese. Nav, ko darīt." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Spēlētāja vārds ir pārāk garš." + +#: src/client/clientlauncher.cpp +msgid "Please choose a name!" +msgstr "Lūdzu, izvēlieties vārdu!" + +#: src/client/clientlauncher.cpp +msgid "Provided password file failed to open: " +msgstr "Neizdevās atvērt iestatīto paroļu failu: " + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Sniegtā pasaules atrašanās vieta neeksistē: " + +#. ~ DO NOT TRANSLATE THIS LITERALLY! +#. This is a special string. Put either "no" or "yes" +#. into the translation field (literally). +#. Choose "yes" if the language requires use of the fallback +#. font, "no" otherwise. +#. The fallback font is (normally) required for languages with +#. non-Latin script, like Chinese. +#. When in doubt, test your translation. +#: src/client/fontengine.cpp +msgid "needs_fallback_font" +msgstr "no" + +#: src/client/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Vairāk informācijas failā debug.txt." + +#: src/client/game.cpp +msgid "- Address: " +msgstr "- Adrese: " + +#: src/client/game.cpp +msgid "- Creative Mode: " +msgstr "- Radošais režīms: " + +#: src/client/game.cpp +msgid "- Damage: " +msgstr "- Bojājumi: " + +#: 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: " + +#. ~ PvP = Player versus Player +#: src/client/game.cpp +msgid "- PvP: " +msgstr "- PvP: " + +#: src/client/game.cpp +msgid "- Server Name: " +msgstr "- Severa nosaukums: " + +#: src/client/game.cpp +msgid "Automatic forward disabled" +msgstr "Automātiskā pārvietošanās izslēgta" + +#: src/client/game.cpp +msgid "Automatic forward enabled" +msgstr "Automātiskā pārvietošanās ieslēgta" + +#: src/client/game.cpp +msgid "Camera update disabled" +msgstr "Kameras atjaunošana atspējota" + +#: src/client/game.cpp +msgid "Camera update enabled" +msgstr "Kameras atjaunošana iespējota" + +#: src/client/game.cpp +msgid "Change Password" +msgstr "Nomainīt paroli" + +#: src/client/game.cpp +msgid "Cinematic mode disabled" +msgstr "Kino režīms izslēgts" + +#: src/client/game.cpp +msgid "Cinematic mode enabled" +msgstr "Kino režīms ieslēgts" + +#: src/client/game.cpp +msgid "Client side scripting is disabled" +msgstr "Klienta puses skriptēšana ir atspējota" + +#: src/client/game.cpp +msgid "Connecting to server..." +msgstr "Savienojas ar serveri..." + +#: src/client/game.cpp +msgid "Continue" +msgstr "Turpināt" + +#: 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\n" +"- %s: sneak/go down\n" +"- %s: drop item\n" +"- %s: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\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 +msgid "Creating client..." +msgstr "Izveido klientu..." + +#: src/client/game.cpp +msgid "Creating server..." +msgstr "Izveido serveri..." + +#: src/client/game.cpp +msgid "Debug info and profiler graph hidden" +msgstr "Atkļūdošanas informācija un profilēšanas grafiks paslēpti" + +#: src/client/game.cpp +msgid "Debug info shown" +msgstr "Atkļūdošanas informācija parādīta" + +#: src/client/game.cpp +msgid "Debug info, profiler graph, and wireframe hidden" +msgstr "" +"Atkļūdošanas informācija, profilēšanas grafiks un karkasattēlojums atspējoti" + +#: src/client/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\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 "" +"Noklusējuma kontroles:\n" +"Ne izvēlnē:\n" +"- pieskāriens: aktivizē pogu\n" +"- dubultpieskāriens: nolikt/izmantot\n" +"- vilkt ar pirksto: skatīties apkārt\n" +"Izvēlnē/inventārā:\n" +"- dubultpieskāriens (ārpus izvēlnes)\n" +" --> aizvērt izvēlni\n" +"- pieskāriens priekšmetiem, pieskāriens kastītei:\n" +" --> pārvietot priekšmetus\n" +"- pieskāriens&vilkšana, ar otru pirkstu pieskāriens:\n" +" --> novietot vienu priekšmetu kastītē\n" + +#: src/client/game.cpp +msgid "Disabled unlimited viewing range" +msgstr "Atspējots neierobežots redzamības diapazons" + +#: src/client/game.cpp +msgid "Enabled unlimited viewing range" +msgstr "Iespējots neierobežots redzamības diapazons" + +#: src/client/game.cpp +msgid "Exit to Menu" +msgstr "Iziet uz izvēlni" + +#: src/client/game.cpp +msgid "Exit to OS" +msgstr "Iziet uz OS" + +#: src/client/game.cpp +msgid "Fast mode disabled" +msgstr "Ātrais režīms izslēgts" + +#: src/client/game.cpp +msgid "Fast mode enabled" +msgstr "Ātrais režīms ieslēgts" + +#: src/client/game.cpp +msgid "Fast mode enabled (note: no 'fast' privilege)" +msgstr "Ātrais režīms ieslēgts (bet: nav “fast” privilēģijas)" + +#: src/client/game.cpp +msgid "Fly mode disabled" +msgstr "Lidošanas režīms izslēgts" + +#: src/client/game.cpp +msgid "Fly mode enabled" +msgstr "Lidošanas režīms ieslēgts" + +#: src/client/game.cpp +msgid "Fly mode enabled (note: no 'fly' privilege)" +msgstr "Lidošanas režīms ieslēgts (bet: nav “fly” privilēģijas)" + +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "Migla atspējota" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "Migla iespējota" + +#: src/client/game.cpp +msgid "Game info:" +msgstr "Spēles informācija:" + +#: src/client/game.cpp +msgid "Game paused" +msgstr "Spēle nopauzēta" + +#: src/client/game.cpp +msgid "Hosting server" +msgstr "Lokāls serveris" + +#: src/client/game.cpp +msgid "Item definitions..." +msgstr "Priekšmetu apraksti..." + +#: src/client/game.cpp +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" + +#: src/client/game.cpp +msgid "Minimap currently disabled by game or mod" +msgstr "Minikarte šobrīd atspējota vai nu spēlei, vai modam" + +#: src/client/game.cpp +msgid "Minimap hidden" +msgstr "Minikarte paslēpta" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x1" +msgstr "Minikarte radara režīmā, palielinājums x1" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x2" +msgstr "Minikarte radara režīmā, palielinājums x2" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x4" +msgstr "Minikarte radara režīmā, palielinājums x4" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x1" +msgstr "Minikarte virsmas režīmā, palielinājums x1" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x2" +msgstr "Minikarte virsmas režīmā, palielinājums x2" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x4" +msgstr "Minikarte virsmas režīmā, palielinājums x4" + +#: src/client/game.cpp +msgid "Noclip mode disabled" +msgstr "“Noclip” režīms izslēgts" + +#: src/client/game.cpp +msgid "Noclip mode enabled" +msgstr "“Noclip” režīms ieslēgts" + +#: src/client/game.cpp +msgid "Noclip mode enabled (note: no 'noclip' privilege)" +msgstr "“Noclip” režīms ieslēgts (bet: nav “noclip” privilēģijas)" + +#: src/client/game.cpp +msgid "Node definitions..." +msgstr "Bloku apraksti..." + +#: src/client/game.cpp +msgid "Off" +msgstr "Izslēgts" + +#: src/client/game.cpp +msgid "On" +msgstr "Ieslēgts" + +#: src/client/game.cpp +msgid "Pitch move mode disabled" +msgstr "Kustība uz augšu/leju pēc skatīšanās virziena izslēgta" + +#: src/client/game.cpp +msgid "Pitch move mode enabled" +msgstr "Kustība uz augšu/leju pēc skatīšanās virziena ieslēgta" + +#: src/client/game.cpp +msgid "Profiler graph shown" +msgstr "Profilēšanas grafiks parādīts" + +#: src/client/game.cpp +msgid "Remote server" +msgstr "Attālināts serveris" + +#: src/client/game.cpp +msgid "Resolving address..." +msgstr "Atrisina adresi..." + +#: src/client/game.cpp +msgid "Shutting down..." +msgstr "Beidz darbu..." + +#: src/client/game.cpp +msgid "Singleplayer" +msgstr "Viena spēlētāja režīms" + +#: src/client/game.cpp +msgid "Sound Volume" +msgstr "Skaņas skaļums" + +#: src/client/game.cpp +msgid "Sound muted" +msgstr "Skaņa izslēgta" + +#: 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 "Skaņa ieslēgta" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d" +msgstr "Redzamības diapazons nomainīts uz %d" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at maximum: %d" +msgstr "Redzamības diapazons ir maksimāls: %d" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at minimum: %d" +msgstr "Redzamības diapazons ir minimāls: %d" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "Skaļums nomainīts uz %d%%" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "Karkasattēlojums iespējots" + +#: src/client/game.cpp +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 +msgid "Chat hidden" +msgstr "Čats paslēpts" + +#: src/client/gameui.cpp +msgid "Chat shown" +msgstr "Čats parādīts" + +#: src/client/gameui.cpp +msgid "HUD hidden" +msgstr "Spēles saskarne paslēpta" + +#: src/client/gameui.cpp +msgid "HUD shown" +msgstr "Spēles saskarne parādīta" + +#: src/client/gameui.cpp +msgid "Profiler hidden" +msgstr "Profilētājs paslēpts" + +#: src/client/gameui.cpp +#, c-format +msgid "Profiler shown (page %d of %d)" +msgstr "Profilētājs parādīts (lapa %d no %d)" + +#: src/client/keycode.cpp +msgid "Apps" +msgstr "Menu" + +#: src/client/keycode.cpp +msgid "Backspace" +msgstr "Backspace" + +#: src/client/keycode.cpp +msgid "Caps Lock" +msgstr "Caps Lock" + +#: src/client/keycode.cpp +msgid "Clear" +msgstr "Notīrīt" + +#: src/client/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/client/keycode.cpp +msgid "Down" +msgstr "Uz leju" + +#: src/client/keycode.cpp +msgid "End" +msgstr "End" + +#: src/client/keycode.cpp +msgid "Erase EOF" +msgstr "Erase EOF" + +#: src/client/keycode.cpp +msgid "Execute" +msgstr "Execute" + +#: src/client/keycode.cpp +msgid "Help" +msgstr "Help" + +#: src/client/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/client/keycode.cpp +msgid "IME Accept" +msgstr "IME Accept" + +#: src/client/keycode.cpp +msgid "IME Convert" +msgstr "IME Convert" + +#: src/client/keycode.cpp +msgid "IME Escape" +msgstr "IME Escape" + +#: src/client/keycode.cpp +msgid "IME Mode Change" +msgstr "IME Mode Change" + +#: src/client/keycode.cpp +msgid "IME Nonconvert" +msgstr "IME Nonconvert" + +#: src/client/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Left" +msgstr "Pa kreisi" + +#: src/client/keycode.cpp +msgid "Left Button" +msgstr "Kreisā poga" + +#: src/client/keycode.cpp +msgid "Left Control" +msgstr "Kreisais Ctrl" + +#: src/client/keycode.cpp +msgid "Left Menu" +msgstr "Kreisais Alt" + +#: src/client/keycode.cpp +msgid "Left Shift" +msgstr "Kreisais Shift" + +#: src/client/keycode.cpp +msgid "Left Windows" +msgstr "Kreisā Windows poga" + +#. ~ Key name, common on Windows keyboards +#: src/client/keycode.cpp +msgid "Menu" +msgstr "Alt" + +#: src/client/keycode.cpp +msgid "Middle Button" +msgstr "Vidējā poga" + +#: src/client/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/client/keycode.cpp +msgid "Numpad *" +msgstr "Ciparbloka *" + +#: src/client/keycode.cpp +msgid "Numpad +" +msgstr "Ciparbloka +" + +#: src/client/keycode.cpp +msgid "Numpad -" +msgstr "Ciparbloka -" + +#: src/client/keycode.cpp +msgid "Numpad ." +msgstr "Ciparbloka ." + +#: src/client/keycode.cpp +msgid "Numpad /" +msgstr "Ciparbloka /" + +#: src/client/keycode.cpp +msgid "Numpad 0" +msgstr "Ciparbloka 0" + +#: src/client/keycode.cpp +msgid "Numpad 1" +msgstr "Ciparbloka 1" + +#: src/client/keycode.cpp +msgid "Numpad 2" +msgstr "Ciparbloka 2" + +#: src/client/keycode.cpp +msgid "Numpad 3" +msgstr "Ciparbloka 3" + +#: src/client/keycode.cpp +msgid "Numpad 4" +msgstr "Ciparbloka 4" + +#: src/client/keycode.cpp +msgid "Numpad 5" +msgstr "Ciparbloka 5" + +#: src/client/keycode.cpp +msgid "Numpad 6" +msgstr "Ciparbloka 6" + +#: src/client/keycode.cpp +msgid "Numpad 7" +msgstr "Ciparbloka 7" + +#: src/client/keycode.cpp +msgid "Numpad 8" +msgstr "Ciparbloka 8" + +#: src/client/keycode.cpp +msgid "Numpad 9" +msgstr "Ciparbloka 9" + +#: src/client/keycode.cpp +msgid "OEM Clear" +msgstr "OEM Clear" + +#: src/client/keycode.cpp +msgid "Page down" +msgstr "Page down" + +#: src/client/keycode.cpp +msgid "Page up" +msgstr "Page up" + +#: src/client/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/client/keycode.cpp +msgid "Play" +msgstr "Play" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" +msgstr "Print Screen" + +#: src/client/keycode.cpp +msgid "Return" +msgstr "Return" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Right" +msgstr "Pa labi" + +#: src/client/keycode.cpp +msgid "Right Button" +msgstr "Labā poga" + +#: src/client/keycode.cpp +msgid "Right Control" +msgstr "Labais Ctrl" + +#: src/client/keycode.cpp +msgid "Right Menu" +msgstr "Labais Alt" + +#: src/client/keycode.cpp +msgid "Right Shift" +msgstr "Labais Shift" + +#: src/client/keycode.cpp +msgid "Right Windows" +msgstr "Labā Windows poga" + +#: src/client/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#. ~ Key name +#: src/client/keycode.cpp +msgid "Select" +msgstr "Select" + +#: src/client/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/client/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/client/keycode.cpp +msgid "Snapshot" +msgstr "Snapshot" + +#: src/client/keycode.cpp +msgid "Space" +msgstr "Atstarpe" + +#: src/client/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/client/keycode.cpp +msgid "Up" +msgstr "Uz augšu" + +#: src/client/keycode.cpp +msgid "X Button 1" +msgstr "X Poga 1" + +#: src/client/keycode.cpp +msgid "X Button 2" +msgstr "X Poga 2" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Zoom" +msgstr "Zoom" + +#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "Paroles nesakrīt!" + +#: src/gui/guiConfirmRegistration.cpp +msgid "Register and Join" +msgstr "Reģistrēties un pievienoties" + +#: src/gui/guiConfirmRegistration.cpp +#, c-format +msgid "" +"You are about to join this server with the name \"%s\" for the first time.\n" +"If you proceed, a new account using your credentials will be created on this " +"server.\n" +"Please retype your password and click 'Register and Join' to confirm account " +"creation, or click 'Cancel' to abort." +msgstr "" +"Jūs tūlīt pievienosieties šim serverim ar vārdu \"%s\" pirmo reizi.\n" +"Ja Jūs turpināsiet, šajā serverī tiks izveidots jauns lietotājs ar jūsu " +"pierakstīšanās informāciju.\n" +"Lūdzu ievadiet savu paroli vēlreiz un nospiediet “Reģistrēties un " +"pievienoties”, lai apstiprinātu lietotāja izveidi, vai arī nospiediet " +"“Atcelt”, lai pārtrauktu šo darbību." + +#: src/gui/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Turpināt" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "\"Special\" = climb down" +msgstr "“Speciālais” = kāpt lejā" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Autoforward" +msgstr "Auto-iešana" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Automatic jumping" +msgstr "Automātiskā lekšana" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Atmuguriski" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Change camera" +msgstr "Mainīt kameru" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Čats" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Komanda" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konsole" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. range" +msgstr "Sam. diapazonu" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. volume" +msgstr "Sam. skaļumu" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Nospied “lekt” divreiz, lai lidotu" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Mest" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Uz priekšu" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. range" +msgstr "Pal. diapazonu" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. volume" +msgstr "Pal. skaļumu" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventārs" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Lekt" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Šis taustiņš jau tiek izmantots" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"Taustiņu iestatījumi. (Ja šī izvēlne salūzt, izdzēsiet iestatījumus no " +"minetest.conf)" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Local command" +msgstr "Lokālā komanda" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Mute" +msgstr "Skaņa" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Next item" +msgstr "Nāk. priekšmets" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Prev. item" +msgstr "Iepr. priekšmets" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Redzamības diapazons" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "Ekrānšāviņš" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Lavīties" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Special" +msgstr "Speciālais" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle HUD" +msgstr "Spēles saskarne" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle chat log" +msgstr "Čata logs" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Ātrā pārvietošanās" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Lidot" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fog" +msgstr "Migla" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle minimap" +msgstr "Minikarte" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "“Noclip”" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle pitchmove" +msgstr "Pārvietoties pēc skatīšanās leņķa" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "nospiediet pogu" + +#: src/gui/guiPasswordChange.cpp +msgid "Change" +msgstr "Nomainīt" + +#: src/gui/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Apstiprināt paroli" + +#: src/gui/guiPasswordChange.cpp +msgid "New Password" +msgstr "Jaunā parole" + +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Vecā parole" + +#: src/gui/guiVolumeChange.cpp +msgid "Exit" +msgstr "Iziet" + +#: src/gui/guiVolumeChange.cpp +msgid "Muted" +msgstr "Apklusināts" + +#: src/gui/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Skaņas skaļums: " + +#. ~ Imperative, as in "Enter/type in text". +#. Don't forget the space. +#: src/gui/modalMenu.cpp +msgid "Enter " +msgstr "Ievadiet " + +#. ~ 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 +msgid "LANG_CODE" +msgstr "lv" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) 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 "" +"(Android) Use virtual joystick to trigger \"aux\" button.\n" +"If enabled, virtual joystick will also tap \"aux\" button when out of main " +"circle." +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 "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +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 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 polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side.\n" +"- crossview: Cross-eyed 3d\n" +"- pageflip: quadbuffer based 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 "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 "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +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 "" + +#: 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 "Advanced" +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 and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amount of messages a player may send per 10 seconds." +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 "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 "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 will not be rendered under water and in " +"caves,\n" +"as well as sometimes on land).\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 "Automatic forward key" +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 "Autosave screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +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 "Basic" +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 temperature and humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block send optimize distance" +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 "Būvēt iekšā spēlētājā" + +#: src/settings_translation_file.cpp +msgid "Builtin" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +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" +"Increasing can reduce artifacting on weaker GPUs.\n" +"0.1 = Default, 0.25 = Good value for weaker tablets." +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 "Camera update toggle key" +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 "" +"Changes the main menu UI:\n" +"- Full: Multiple singleplayer worlds, game choice, texture pack chooser, " +"etc.\n" +"- Simple: One singleplayer world, no game or texture pack choosers. May " +"be\n" +"necessary for smaller screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat key" +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 toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chatcommands" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client" +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 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 "" +"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 "Command key" +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 "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Continuous forward movement, toggled by autoforward key.\n" +"Press the autoforward key again or the backwards movement to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "Vadība" + +#: 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." +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 "Creative" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +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 "Dec. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Decrease this to increase liquid resistance to movement." +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 game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +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 "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +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 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 sampling step of texture.\n" +"A higher value results in smoother normal maps." +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 maximal player transfer distance in blocks (0 = unlimited)." +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 "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 "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 "Drop item key" +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 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 console window" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable creative mode for new created maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable joysticks" +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 players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable register confirmation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable register confirmation when connecting to server.\n" +"If disabled, new account will be registered automatically." +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 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 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 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" +"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 bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables the sound system.\n" +"If disabled, this completely disables all sounds everywhere and the in-game\n" +"sound controls will be non-functional.\n" +"Changing this setting requires a restart." +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 "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +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 "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +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 "Fast movement" +msgstr "Ātrā pārvietošanās" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via the \"special\" key).\n" +"This requires the \"fast\" privilege on the server." +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 "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +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 "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 "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "Lidošana" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog start" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +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 of the default font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the fallback font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the monospace font in point (pt)." +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 "" +"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 Default Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Opacity" +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 default background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background opacity (between 0 and 255)." +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 "Forward key" +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 "FreeType fonts" +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 "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +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 "Generate normalmaps" +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 junglegrass, 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 "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 scale factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated Lua API calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\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 "High-precision FPU" +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 next key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar previous key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 1 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 10 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 11 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 12 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 13 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 14 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 15 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 16 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 17 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 18 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 19 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 2 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 20 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 21 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 22 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 23 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 24 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 25 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 26 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 27 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 28 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 29 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 3 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 30 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 31 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 32 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 4 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 5 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 6 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 7 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 8 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 9 key" +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.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +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, \"special\" key is used to fly fast if both fly and fast mode " +"are\n" +"enabled." +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 50-80%. The client will not longer receive most " +"invisible\n" +"so that the utility of noclip mode is reduced." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the \"noclip\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, \"special\" key instead of \"sneak\" key is used for climbing " +"down and\n" +"descending." +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, makes move directions relative to the player's pitch when flying " +"or swimming." +msgstr "" +"Ja iespējota, liek visām kustībām peldot un lidojot būt relatīvām pret " +"spēlētāja skatīšanās virziena." + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" +"Ja iespējots, varat novietot blokus, kur Jūs stāvat.\n" +"Šis ir noderīgi, kad jābūvē šaurās vietās." + +#: 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 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" +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 "Inc. volume key" +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 chatcommands 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 "Instrumentation" +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." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "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 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 "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"Will also disable autoforward, when active.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for muting the game.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type local commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 11th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 12th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 13th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 14th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 15th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 16th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 17th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 18th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 19th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 20th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 21st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 22nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 23rd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 24th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 25th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 26th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 27th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 28th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 29th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 30th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 31st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 32nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the eighth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fifth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the first hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fourth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the next item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the ninth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the previous item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the second hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the seventh hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the sixth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the tenth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the third hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling autoforward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling pitch move mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camera update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the large chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key to use view zoom when possible.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +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 "Large chat console key" +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 "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over\n" +"network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of liquid waves.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between Active Block Modifier (ABM) execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between NodeTimer execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between active block management cycles" +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" +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 "" +"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 "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 "Main menu style" +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 "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes all liquids opaque" +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." +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 "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +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 "" + +#: 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 game is paused." +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 forceloaded mapblocks." +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 out chat queue" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum size of the out chat queue.\n" +"0 to disable queueing and -1 to make the queue size unlimited." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +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" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +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 "Minimum texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the hudbar 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 "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 "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 key" +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 "Near plane" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +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 "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +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 "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +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 parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Online Content Repository" +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 "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the fallback 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 "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path of the fallback font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors 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 texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the default font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors 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.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors 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 "Pitch move key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pitch move mode" +msgstr "Kustība uz augšu/leju pēc skatīšanās virziena" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the \"fly\" privilege on the server." +msgstr "" +"Spēlētājs var lidot ignorējot gravitāciju.\n" +"Šim ir vajadzīga “fly” privilēģija servera pusē." + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prevent digging and placing from repeating when holding the mouse buttons.\n" +"Enable this when you dig or place too often by accident." +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 "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling" +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 fetch 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 "" +"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 "Range select key" +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 "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +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 "Right key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +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 "Round minimap" +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." +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 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 "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 "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" +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 / Singleplayer" +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 "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +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 "" + +#: src/settings_translation_file.cpp +msgid "Set the maximum character length of a chat message sent by clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving liquids (like water).\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shader path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visual effects and may increase performance on some " +"video\n" +"cards.\n" +"This only works with the OpenGL video backend." +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 offset (in pixels) of the fallback font. If 0, then shadow will not " +"be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +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 "Shutdown message" +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 "" +"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 "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 camera when looking around. Also called look or mouse smoothing.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +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 "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Special key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Special key for climbing/descending" +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 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 spawnpoint" +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 generated normalmaps." +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 the 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 path" +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 default format in which profiles are being saved,\n" +"when calling `/profiler save [format]` without format." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The depth of dirt or other biome filler node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The file path relative to your worldpath in which profiles will be saved to." +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 touch screen interaction to start." +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).\n" +"Requires waving liquids to be enabled." +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 for Irrlicht.\n" +"A restart is required after changing this.\n" +"Note: On Android, stick with OGLES1 if unsure! App may fail to start " +"otherwise.\n" +"On other platforms, OpenGL is recommended, and it’s the only driver with\n" +"shader support currently." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"ingame 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 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 right clicks when holding the " +"right\n" +"mouse 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 "" +"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." +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 "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touch screen threshold" +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 "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 "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 viewing 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 mip mapping to scale 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 trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VBO" +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." +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 "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View zoom key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers aux button" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Volume of all sounds.\n" +"Requires the sound system to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"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 "" +"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. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"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 FreeType fonts are used, requires FreeType support to be compiled " +"in.\n" +"If disabled, bitmap and XML vectors fonts are used instead." +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 to allow players to damage and kill each other." +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 "" +"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 file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Back" +#~ msgstr "Atpakaļ" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Lejuplādējas un instalējas $1, lūdzu uzgaidiet..." + +#~ msgid "Ok" +#~ msgstr "Ok" diff -Nru minetest-5.2.0/po/minetest.pot minetest-5.3.0/po/minetest.pot --- minetest-5.2.0/po/minetest.pot 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/minetest.pot 2020-07-09 21:13:21.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -25,6 +25,10 @@ msgid "Respawn" msgstr "" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" msgstr "" @@ -45,10 +49,6 @@ msgid "An error occurred:" msgstr "" -#: builtin/fstk/ui.lua -msgid "Ok" -msgstr "" - #: builtin/mainmenu/common.lua src/client/game.cpp msgid "Loading..." msgstr "" @@ -129,6 +129,10 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" msgstr "" @@ -155,6 +159,10 @@ msgstr "" #: builtin/mainmenu/dlg_contentstore.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "" @@ -177,61 +185,144 @@ msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" +msgid "Back to Main Menu" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Install" +msgid "No results" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Update" +msgid "No packages could be retrieved" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Uninstall" +msgid "Downloading..." msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua -msgid "Search" +msgid "Install" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back to Main Menu" +msgid "Update" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "No results" +msgid "Uninstall" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "No packages could be retrieved" +msgid "View" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "World name" +msgid "Caverns" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Seed" +msgid "Very large caverns deep in the underground" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp -msgid "Mapgen" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" msgstr "" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp -msgid "Game" +msgid "Altitude chill" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Create" +msgid "Reduces heat with altitude" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +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 "Vary river depth" +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 +msgid "Hills" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" msgstr "" #: builtin/mainmenu/dlg_create_world.lua @@ -243,7 +334,53 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +msgid "Caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +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 "Network of tunnels and caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Smooth transition between biomes" +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 "Warning: The Development Test is meant for developers." msgstr "" #: builtin/mainmenu/dlg_create_world.lua @@ -251,6 +388,27 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Seed" +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 "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "" @@ -530,6 +688,10 @@ msgstr "" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Configure" msgstr "" @@ -935,11 +1097,19 @@ msgstr "" #: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "" + +#: src/client/game.cpp #, c-format msgid "Volume changed to %d%%" msgstr "" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "" + +#: src/client/game.cpp msgid "ok" msgstr "" @@ -2983,14 +3153,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "" - -#: src/settings_translation_file.cpp msgid "Parallax occlusion iterations" msgstr "" @@ -3338,6 +3500,14 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Console height" msgstr "" @@ -3799,11 +3969,23 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Font size of the recent chat text and chat prompt in point (pt).\n" +"Value 0 will use the default font size." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Screenshot folder" msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -3910,6 +4092,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Saving map received from server" msgstr "" @@ -4197,6 +4391,17 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Damage" msgstr "" @@ -4378,7 +4583,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -4938,6 +5143,14 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "IPv6" msgstr "" @@ -5060,10 +5273,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" @@ -5408,7 +5617,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -5422,6 +5633,80 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y-distance over which floatlands taper from full density to nothing.\n" +"Tapering starts at this distance from the Y limit.\n" +"For a solid floatland layer, this controls the height of hills/mountains.\n" +"Must be less than or equal to half the distance between the Y limits." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\n" +"Value = 1.0 creates a uniform, linear tapering.\n" +"Values > 1.0 create a smooth tapering suitable for the default separated\n" +"floatlands.\n" +"Values < 1.0 (for example 0.25) create a more defined surface level with\n" +"flatter lowlands, suitable for a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "" + +#: src/settings_translation_file.cpp +#, c-format +msgid "" +"Adjusts the density of the floatland layer.\n" +"Increase value to increase density. Can be positive or negative.\n" +"Value = 0.0: 50% of volume is floatland.\n" +"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" +"to be sure) creates a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Surface level of optional water placed on a solid floatland layer.\n" +"Water is disabled by default and will only be placed if this value is set\n" +"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n" +"upper tapering).\n" +"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n" +"When enabling water placement the floatlands must be configured and tested\n" +"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n" +"required value depending on 'mgv7_np_floatland'), to avoid\n" +"server-intensive extreme water flow and to avoid vast flooding of the\n" +"world surface below." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Terrain alternative noise" msgstr "" @@ -5474,6 +5759,18 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining structure of floatlands.\n" +"If altered from the default, the noise 'scale' (0.7 by default) may need\n" +"to be adjusted, as floatland tapering functions best when this noise has\n" +"a value range of approximately -2.0 to 2.0." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Mapgen Carpathian" msgstr "" @@ -5847,10 +6144,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Altitude chill" -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" @@ -5960,7 +6253,7 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp @@ -5968,23 +6261,23 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" +msgid "Per-player limit of queued blocks load from disk" msgstr "" #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" +msgid "Per-player limit of queued blocks to generate" msgstr "" #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -5994,9 +6287,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" diff -Nru minetest-5.2.0/po/ms/minetest.po minetest-5.3.0/po/ms/minetest.po --- minetest-5.2.0/po/ms/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/ms/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,10 @@ msgstr "" "Project-Id-Version: Malay (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-02-18 06:32+0000\n" -"Last-Translator: Muhammad Nur Hidayat Yasuyoshi \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-08 20:47+0000\n" +"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " +"Yasuyoshi \n" "Language-Team: Malay \n" "Language: ms\n" @@ -12,7 +13,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.11\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,6 +23,10 @@ msgid "You died" msgstr "Anda telah meninggal" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Berlakunya ralat dalam skrip Lua:" @@ -35,10 +40,6 @@ msgstr "Menu utama" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Ok" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Sambung semula" @@ -115,6 +116,10 @@ "dibenarkan. Hanya aksara [a-z0-9_] sahaja yang dibenarkan." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Cari Mods Lain" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mods:" @@ -160,16 +165,16 @@ msgstr "Semua pakej" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Backspace" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Kembali ke Menu Utama" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Sedang muat turun dan memasang $1, sila tunggu..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB tidak tersedia apabila Minetest dikompil tanpa cURL" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "Memuat turun..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -214,15 +219,51 @@ msgid "Update" msgstr "Kemas kini" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Lihat" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Dunia bernama \"$1\" telah wujud" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "Rupa bumi tambahan" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "Kedinginan altitud" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "Kekeringan altitud" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Penyebatian biom" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Biom" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Gua besar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Gua" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Cipta" #: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Hiasan" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Muat turun permainan, contohnya Minetest Game, dari minetest.net" @@ -230,27 +271,146 @@ msgid "Download one from minetest.net" msgstr "Muat turun satu dari minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Kurungan bawah tanah" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Rupa bumi rata" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Jisim bumi terapung atas langit" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Tanah terapung (dalam ujikaji)" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Permainan" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Jana rupa bumi bukan-fraktal: Lautan dan bawah tanah" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Bukit" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Sungai lembap" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Tingkatkan kelembapan sekitar sungai" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Tasik" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "Kelembapan rendah dan haba tinggi menyebabkan sungai cetek atau kering" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" msgstr "Janaan peta" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Bendera janapeta" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Bendera khusus Janapeta" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Gunung" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Aliran lumpur" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Jaringan terowong dan gua" + #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" msgstr "Tiada permainan dipilih" #: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "Kurangkan haba mengikut altitud" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "Kurangkan kelembapan mengikut altitud" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Sungai" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Sungai aras laut" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Benih" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +msgid "Smooth transition between biomes" +msgstr "Peralihan lembut di antara biom" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" msgstr "" -"Amaran: Percubaan pembangunan minimum hanyalah untuk kegunaan pembangun." +"Struktur yang muncul atas rupa bumi (tiada kesan pada pokok dan rumput hutan " +"dicipta oleh v6)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "Struktur yang muncul atas rupa bumi, biasanya pokok dan tumbuhan" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Iklim Sederhana, Gurun" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Iklim Sederhana, Gurun, Hutan" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Iklim Sederhana, Gurun, Hutan, Tundra, Taiga" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "Hakisan permukaan rupa bumi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Pokok dan rumput hutan" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Kedalaman sungai berbagai" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Gua gergasi yang sangat mendalam bawah tanah" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." +msgstr "Amaran: The Development Test hanyalah untuk kegunaan pembangun." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -288,7 +448,7 @@ #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "Menamakan semula pek mods:" +msgstr "Namakan semula pek mods:" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "" @@ -447,7 +607,7 @@ #: builtin/mainmenu/pkgmgr.lua msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Pasang Mods: Jenis fail \"$1\" tidak disokong atau arkib rosak" +msgstr "Pasang: Jenis fail \"$1\" tidak disokong atau arkib rosak" #: builtin/mainmenu/pkgmgr.lua msgid "Install: file: \"$1\"" @@ -562,6 +722,10 @@ msgstr "Hos Pelayan" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Pasangkan permainan daripada ContentDB" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Nama/Kata laluan" @@ -865,7 +1029,7 @@ #: src/client/clientlauncher.cpp msgid "Please choose a name!" -msgstr "Sila masukkan nama!" +msgstr "Sila pilih suatu nama!" #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " @@ -1220,6 +1384,14 @@ msgstr "Bunyi dibisukan" #: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "Sistem bunyi dilumpuhkan" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "Sistem bunyi tidak disokong di binaan ini" + +#: src/client/game.cpp msgid "Sound unmuted" msgstr "Bunyi dinyahbisukan" @@ -1231,12 +1403,12 @@ #: src/client/game.cpp #, c-format msgid "Viewing range is at maximum: %d" -msgstr "Jarak pandang berada di tahap maksimum %d" +msgstr "Jarak pandang berada di tahap maksimum: %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at minimum: %d" -msgstr "Jarak pandang pada tahap minimum: %d" +msgstr "Jarak pandang berada di tahap minimum: %d" #: src/client/game.cpp #, c-format @@ -1251,7 +1423,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "Zum sedang dilumpuhkan oleh permainan atau mods" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "ok" @@ -1265,11 +1437,11 @@ #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "Papar pandu disembunyikan" +msgstr "Papar pandu (HUD) disembunyikan" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "Papar pandu ditunjukkan" +msgstr "Papar pandu (HUD) ditunjukkan" #: src/client/gameui.cpp msgid "Profiler hidden" @@ -1383,67 +1555,67 @@ #: src/client/keycode.cpp msgid "Num Lock" -msgstr "Num Lock" +msgstr "Kunci Angka" #: src/client/keycode.cpp msgid "Numpad *" -msgstr "Numpad *" +msgstr "Pad Angka *" #: src/client/keycode.cpp msgid "Numpad +" -msgstr "Numpad +" +msgstr "Pad Angka +" #: src/client/keycode.cpp msgid "Numpad -" -msgstr "Numpad -" +msgstr "Pad Angka -" #: src/client/keycode.cpp msgid "Numpad ." -msgstr "Numpad ." +msgstr "Pad Angka ." #: src/client/keycode.cpp msgid "Numpad /" -msgstr "Numpad /" +msgstr "Pad Angka /" #: src/client/keycode.cpp msgid "Numpad 0" -msgstr "Numpad 0" +msgstr "Pad Angka 0" #: src/client/keycode.cpp msgid "Numpad 1" -msgstr "Numpad 1" +msgstr "Pad Angka 1" #: src/client/keycode.cpp msgid "Numpad 2" -msgstr "Numpad 2" +msgstr "Pad Angka 2" #: src/client/keycode.cpp msgid "Numpad 3" -msgstr "Numpad 3" +msgstr "Pad Angka 3" #: src/client/keycode.cpp msgid "Numpad 4" -msgstr "Numpad 4" +msgstr "Pad Angka 4" #: src/client/keycode.cpp msgid "Numpad 5" -msgstr "Numpad 5" +msgstr "Pad Angka 5" #: src/client/keycode.cpp msgid "Numpad 6" -msgstr "Numpad 6" +msgstr "Pad Angka 6" #: src/client/keycode.cpp msgid "Numpad 7" -msgstr "Numpad 7" +msgstr "Pad Angka 7" #: src/client/keycode.cpp msgid "Numpad 8" -msgstr "Numpad 8" +msgstr "Pad Angka 8" #: src/client/keycode.cpp msgid "Numpad 9" -msgstr "Numpad 9" +msgstr "Pad Angka 9" #: src/client/keycode.cpp msgid "OEM Clear" @@ -1468,7 +1640,7 @@ #. ~ "Print screen" key #: src/client/keycode.cpp msgid "Print" -msgstr "Cetak" +msgstr "Print Screen" #: src/client/keycode.cpp msgid "Return" @@ -1505,7 +1677,7 @@ #. ~ Key name #: src/client/keycode.cpp msgid "Select" -msgstr "Pilih kekunci" +msgstr "Select" #: src/client/keycode.cpp msgid "Shift" @@ -1682,7 +1854,7 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle HUD" -msgstr "Togol Papar Pandu" +msgstr "Togol papar pandu (HUD)" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle chat log" @@ -1748,7 +1920,7 @@ #. Don't forget the space. #: src/gui/modalMenu.cpp msgid "Enter " -msgstr "Masuk " +msgstr "Masukkan " #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's @@ -1859,6 +2031,10 @@ msgstr "Mod 3D" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "Kekuatan paralaks mod 3D" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "Hingar 3D mentakrifkan gua gergasi." @@ -1871,6 +2047,18 @@ "Ia juga mentakrifkan struktur rupa bumi gunung tanah terapung." #: 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 "" +"Hingar 3D mentakrifkan struktur tanah terapung.\n" +"Jika diubah dari nilai asal, hingar skala 'scale' (asalnya 0.7) mungkin\n" +"perlu dilaraskan, kerana tirusan tanah terapung berfungsi dengan\n" +"terbaik apabila jarak nilai berada dalam lingkungan -2.0 ke 2.0." + +#: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." msgstr "Hingar 3D mentakrifkan struktur dinding ngarai sungai." @@ -1932,8 +2120,8 @@ msgstr "Selang masa ABM" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" -msgstr "Had mutlak baris gilir keluar" +msgid "Absolute limit of queued blocks to emerge" +msgstr "Had mutlak untuk blok dibarisgilirkan untuk timbul" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -1982,6 +2170,22 @@ "skrin 4K." #: 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 "" +"Melaraskan ketumpatan lapisan tanah terapung.\n" +"Tambah nilai untuk tambah ketumpatan. Boleh jadi positif atau negatif.\n" +"Nilai = 0.0: 50% daripada jilid merupakan tanah terapung.\n" +"Nilai = 2.0 mencipta lapisan tanah terapung yang pejal (boleh jadi lebih " +"tinggi\n" +"bergantung kepada tetapan 'mgv7_np_floatland', sentiasa cuba untuk pastikan)." + +#: src/settings_translation_file.cpp msgid "Advanced" msgstr "Tetapan mendalam" @@ -2000,10 +2204,6 @@ "dan cahaya buatan, kesannya pada cahaya malam amat rendah." #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "Kedinginan altitud" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "Sentiasa terbang dan bergerak pantas" @@ -2075,10 +2275,10 @@ msgstr "" "Pada jarak ini, pelayan akan mengoptimumkan secara agresif blok yang mana\n" "akan dihantar kepada klien.\n" -"Nilai lebih kecil berkemungkinan besar boleh meningkatkan prestasi dengan\n" -"banyak, dengan mengorbankan glic penerjemahan tampak (sesetengah\n" -"blok tidak akan diterjemah di bawah air dan dalam gua, kadang-kadang\n" -"turut berlaku atas daratan).\n" +"Nilai lebih kecil berkemungkinan boleh meningkatkan prestasi dengan banyak,\n" +"dengan mengorbankan glic penerjemahan tampak (sesetengah blok tidak akan\n" +"diterjemah di bawah air dan dalam gua, kekadang turut berlaku atas daratan)." +"\n" "Menetapkan nilai ini lebih bear daripada nilai max_block_send_distance akan\n" "melumpuhkan pengoptimunan ini.\n" "Nyatakan dalam unit blokpeta (16 nod)." @@ -2173,7 +2373,7 @@ #: src/settings_translation_file.cpp msgid "Build inside player" -msgstr "Bina dalam sistem pemain" +msgstr "Bina dalam pemain" #: src/settings_translation_file.cpp msgid "Builtin" @@ -2184,7 +2384,6 @@ msgstr "Pemetaan timbul" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -2192,7 +2391,8 @@ "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" "Jarak kamera 'berhampiran satah ketipan' dalam nilai nod, antara 0 dan 0.5.\n" -"Kebanyakan pengguna tidak perlu mengubah nilai ini.\n" +"Hanya berkesan di platform GLES. Kebanyakan pengguna tidak perlu mengubah " +"nilai ini.\n" "Menaikkan nilai boleh kurangkan artifak pada GPU yang lebih lemah.\n" "0.1 = Asal, 0.25 = Nilai bagus untuk tablet yang lebih lemah." @@ -2277,10 +2477,18 @@ "Mungkin diperlukan untuk skrin yang lebih kecil." #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "Saiz fon sembang" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Kekunci sembang" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "Tahap log sembang" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "Had kiraan mesej sembang" @@ -2397,9 +2605,10 @@ "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 "" -"Senarai mods boleh dipercayai yang dibenarkan mengakses fungsi tidak\n" -"selamat walaupun ketika keselamatan mods diaktifkan\n" -"(melalui request_insecure_environment())." +"Senarai dipisahkan dengan koma untuk mods boleh dipercayai yang dibenarkan " +"mengakses\n" +"fungsi tidak selamat walaupun ketika keselamatan mods diaktifkan (melalui " +"request_insecure_environment())." #: src/settings_translation_file.cpp msgid "Command key" @@ -2573,6 +2782,10 @@ msgstr "Format laporan lalai" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "Saiz tindanan lalai" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2648,9 +2861,10 @@ "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 "" -"Lengah masa di antara kemaskini jejaring dekat klien dalam unit ms.\n" -"Menaikkan nilai ini akan mengurangkan kadar kemaskini jejaring, lalu\n" -"mengurangkan ketaran dekat klien yang lebih perlahan." +"Lengah masa di antara kemaskini jejaring dekat klien dalam unit ms. " +"Menaikkan nilai ini akan\n" +"mengurangkan kadar kemaskini jejaring, lalu mengurangkan ketaran dekat klien " +"yang lebih perlahan." #: src/settings_translation_file.cpp msgid "Delay in sending blocks after building" @@ -2817,9 +3031,9 @@ msgstr "" "Bolehkan tetapan untuk melarang klien lama daripada menyambung.\n" "Klien lama masih sesuai digunakan jika mereka tidak runtuh (crash) apabila " -"cuba\n" -"untuk menyambung ke pelayan baharu, tetapi mereka mungkin tidak mampu\n" -"menyokong semua sifat baharu yang anda sangkakan." +"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 "" @@ -2941,6 +3155,22 @@ "antara blok apabila ditetapkan dengan nombor lebih besar daripada 0." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "" +"Eksponen penirusan tanah terapung. Mengubah tingkah laku tirusan.\n" +"Nilai = 1.0 mencipta tirusan sekata, lelurus.\n" +"Nilai > 1.0 mencipta tirusan lembut sesuai untuk tanah terapung asal\n" +"yang terpisah antara satu sama lain.\n" +"Nilai < 1.0 (contohnya 0.25) mencipta aras permukaan lebih jelas dengan\n" +"bahagian tanah yang lebih rata, sesuai untuk lapisan tanah terapung pejal." + +#: src/settings_translation_file.cpp msgid "FPS in pause menu" msgstr "FPS di menu jeda" @@ -2994,7 +3224,8 @@ "This requires the \"fast\" privilege on the server." msgstr "" "Bergerak pantas (dengan kekunci \"istimewa\").\n" -"Ini memerlukan keistimewaan \"pergerakan pantas\" dalam pelayan." +"Ini memerlukan keistimewaan \"pergerakan pantas\" dalam pelayan permainan " +"tersebut." #: src/settings_translation_file.cpp msgid "Field of view" @@ -3033,11 +3264,13 @@ "light edge to transparent textures. Apply this filter to clean that up\n" "at texture load time." msgstr "" -"Tekstur yang ditapis boleh sebatikan nilai RGB dengan jiran yang\n" -"lut sinar sepenuhnya, yang mana pengoptimum PNG sering abaikan,\n" -"kadangkala menyebabkan sisi gelap atau terang pada tekstur lut sinar.\n" -"Guna penapisan ini untuk membersihkan tekstur tersebut ketika ia\n" -"sedang dimuatkan." +"Tekstur yang ditapis boleh sebatikan nilai RGB dengan jiran yang lut sinar " +"sepenuhnya,\n" +"yang mana pengoptimum PNG sering abaikan, kadangkala menyebabkan sisi gelap " +"atau\n" +"terang pada tekstur lut sinar. Guna penapisan ini untuk membersihkan tekstur " +"tersebut\n" +"ketika ia sedang dimuatkan." #: src/settings_translation_file.cpp msgid "Filtering" @@ -3061,6 +3294,34 @@ msgstr "Kayu bedik maya tetap" #: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "Ketumpatan tanah terapung" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "Y maksimum tanah terapung" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "Y minimum tanah terapung" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "Hingar tanah terapung" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "Eksponen tirusan tanah terapung" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "Jarak tirusan tanah terapung" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "Aras air tanah terapung" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Kekunci terbang" @@ -3114,6 +3375,14 @@ #: 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 "" +"Saiz fon tulisan sembang baru-baru ini dan prom dalam unit titik (pt).\n" +"Nilai 0 akan menggunakan saiz fon lalai." + +#: src/settings_translation_file.cpp +msgid "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -3295,11 +3564,11 @@ #: src/settings_translation_file.cpp msgid "HUD scale factor" -msgstr "Faktor skala HUD" +msgstr "Faktor skala papar pandu (HUD)" #: src/settings_translation_file.cpp msgid "HUD toggle key" -msgstr "Kekunci menogol HUD" +msgstr "Kekunci menogol papar pandu (HUD)" #: src/settings_translation_file.cpp msgid "" @@ -3418,131 +3687,131 @@ #: src/settings_translation_file.cpp msgid "Hotbar slot 1 key" -msgstr "Kekunci slot 1 hotbar" +msgstr "Kekunci slot hotbar 1" #: src/settings_translation_file.cpp msgid "Hotbar slot 10 key" -msgstr "Kekunci slot 10 hotbar" +msgstr "Kekunci slot hotbar 10" #: src/settings_translation_file.cpp msgid "Hotbar slot 11 key" -msgstr "Kekunci slot 11 hotbar" +msgstr "Kekunci slot hotbar 11" #: src/settings_translation_file.cpp msgid "Hotbar slot 12 key" -msgstr "Kekunci slot 12 hotbar" +msgstr "Kekunci slot hotbar 12" #: src/settings_translation_file.cpp msgid "Hotbar slot 13 key" -msgstr "Kekunci slot 13 hotbar" +msgstr "Kekunci slot hotbar 13" #: src/settings_translation_file.cpp msgid "Hotbar slot 14 key" -msgstr "Kekunci slot 14 hotbar" +msgstr "Kekunci slot hotbar 14" #: src/settings_translation_file.cpp msgid "Hotbar slot 15 key" -msgstr "Kekunci slot 15 hotbar" +msgstr "Kekunci slot hotbar 15" #: src/settings_translation_file.cpp msgid "Hotbar slot 16 key" -msgstr "Kekunci slot 16 hotbar" +msgstr "Kekunci slot hotbar 16" #: src/settings_translation_file.cpp msgid "Hotbar slot 17 key" -msgstr "Kekunci slot 17 hotbar" +msgstr "Kekunci slot hotbar 17" #: src/settings_translation_file.cpp msgid "Hotbar slot 18 key" -msgstr "Kekunci slot 18 hotbar" +msgstr "Kekunci slot hotbar 18" #: src/settings_translation_file.cpp msgid "Hotbar slot 19 key" -msgstr "Kekunci slot 19 hotbar" +msgstr "Kekunci slot hotbar 19" #: src/settings_translation_file.cpp msgid "Hotbar slot 2 key" -msgstr "Kekunci slot 2 hotbar" +msgstr "Kekunci slot hotbar 2" #: src/settings_translation_file.cpp msgid "Hotbar slot 20 key" -msgstr "Kekunci slot 20 hotbar" +msgstr "Kekunci slot hotbar 20" #: src/settings_translation_file.cpp msgid "Hotbar slot 21 key" -msgstr "Kekunci slot 21 hotbar" +msgstr "Kekunci slot hotbar 21" #: src/settings_translation_file.cpp msgid "Hotbar slot 22 key" -msgstr "Kekunci slot 22 hotbar" +msgstr "Kekunci slot hotbar 22" #: src/settings_translation_file.cpp msgid "Hotbar slot 23 key" -msgstr "Kekunci slot 23 hotbar" +msgstr "Kekunci slot hotbar 23" #: src/settings_translation_file.cpp msgid "Hotbar slot 24 key" -msgstr "Kekunci slot 24 hotbar" +msgstr "Kekunci slot hotbar 24" #: src/settings_translation_file.cpp msgid "Hotbar slot 25 key" -msgstr "Kekunci slot 25 hotbar" +msgstr "Kekunci slot hotbar 25" #: src/settings_translation_file.cpp msgid "Hotbar slot 26 key" -msgstr "Kekunci slot 26 hotbar" +msgstr "Kekunci slot hotbar 26" #: src/settings_translation_file.cpp msgid "Hotbar slot 27 key" -msgstr "Kekunci slot 27 hotbar" +msgstr "Kekunci slot hotbar 27" #: src/settings_translation_file.cpp msgid "Hotbar slot 28 key" -msgstr "Kekunci slot 28 hotbar" +msgstr "Kekunci slot hotbar 28" #: src/settings_translation_file.cpp msgid "Hotbar slot 29 key" -msgstr "Kekunci slot 29 hotbar" +msgstr "Kekunci slot hotbar 29" #: src/settings_translation_file.cpp msgid "Hotbar slot 3 key" -msgstr "Kekunci slot 3 hotbar" +msgstr "Kekunci slot hotbar 3" #: src/settings_translation_file.cpp msgid "Hotbar slot 30 key" -msgstr "Kekunci slot 30 hotbar" +msgstr "Kekunci slot hotbar 30" #: src/settings_translation_file.cpp msgid "Hotbar slot 31 key" -msgstr "Kekunci slot 31 hotbar" +msgstr "Kekunci slot hotbar 31" #: src/settings_translation_file.cpp msgid "Hotbar slot 32 key" -msgstr "Kekunci slot 32 hotbar" +msgstr "Kekunci slot hotbar 32" #: src/settings_translation_file.cpp msgid "Hotbar slot 4 key" -msgstr "Kekunci slot 4 hotbar" +msgstr "Kekunci slot hotbar 4" #: src/settings_translation_file.cpp msgid "Hotbar slot 5 key" -msgstr "Kekunci slot 5 hotbar" +msgstr "Kekunci slot hotbar 5" #: src/settings_translation_file.cpp msgid "Hotbar slot 6 key" -msgstr "Kekunci slot 6 hotbar" +msgstr "Kekunci slot hotbar 6" #: src/settings_translation_file.cpp msgid "Hotbar slot 7 key" -msgstr "Kekunci slot 7 hotbar" +msgstr "Kekunci slot hotbar 7" #: src/settings_translation_file.cpp msgid "Hotbar slot 8 key" -msgstr "Kekunci slot 8 hotbar" +msgstr "Kekunci slot hotbar 8" #: src/settings_translation_file.cpp msgid "Hotbar slot 9 key" -msgstr "Kekunci slot 9 hotbar" +msgstr "Kekunci slot hotbar 9" #: src/settings_translation_file.cpp msgid "How deep to make rivers." @@ -3596,9 +3865,9 @@ "If FPS would go higher than this, limit it by sleeping\n" "to not waste CPU power for no benefit." msgstr "" -"Jika bingkai per saat (FPS) ingin naik lebih tinggi\n" -"daripada nilai ini, hadkan ia dengan tidurkannya supaya\n" -"tidak bazirkan kuasa CPU dengan sia-sia." +"Jika bingkai per saat (FPS) akan naik lebih tinggi daripada nilai ini, " +"hadkan ia dengan\n" +"tidurkannya supaya tidak bazirkan kuasa CPU dengan sia-sia." #: src/settings_translation_file.cpp msgid "" @@ -3684,7 +3953,7 @@ "you stand.\n" "This is helpful when working with nodeboxes in small areas." msgstr "" -"Jika dibolehkan, anda boleh meletak blok di kedudukan berdiri (aras kaki + " +"Jika dibolehkan, anda boleh meletak blok di kedudukan berdiri (kaki + aras " "mata).\n" "Ini sangat berguna apabila bekerja dengan kotak nod di kawasan yang kecil." @@ -4440,6 +4709,8 @@ "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" "Kekunci untuk menyelinap.\n" +"Juga digunakan untuk turun bawah ketika memanjat dan dalam air jika tetapan " +"aux1_descends dilumpuhkan.\n" "Lihat http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4756,14 +5027,6 @@ msgstr "Kecerunan rendah lengkung cahaya" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Had baris hilir keluar pada cakera" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Had baris gilir keluar untuk dijana" - -#: 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" @@ -4839,6 +5102,10 @@ msgstr "Had Y bawah kurungan bawah tanah." #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "Had Y bawah tanah terapung." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Skrip menu utama" @@ -4923,10 +5190,14 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "Atribut penjanaan peta khusus untuk Janapeta v7.\n" -"'ridges' membolehkan sungai." +"'ridges': Sungai.\n" +"'floatlands': Jisim bumi tanah terapung di atmosfera.\n" +"'caverns': Gua gergasi yang mendalam bawah tanah." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5013,10 +5284,6 @@ msgstr "Nyahpepijat janapeta" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Bendera janapeta" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Nama janapeta" @@ -5089,18 +5356,18 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" -"Jumlah maksimum blok baris gilir untuk dijana.\n" -"Tetapkan kepada kosong untuk memilih jumlah sesuai secara automatik." +"Jumlah maksimum blok untuk dibarisgilirkan untuk dijana.\n" +"Had ini dikuatkuasakan per pemain." #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" -"Jumlah maksimum blok baris gilir untuk dimuatkan daripada fail.\n" -"Tetapkan kepada kosong untuk memilih jumlah sesuai secara automatik." +"Jumlah maksimum blok untuk dibarisgilirkan untuk dimuatkan daripada fail.\n" +"Had ini dikuatkuasakan per pemain." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5196,6 +5463,10 @@ msgstr "Kaedah yang digunakan untuk menonjolkan objek dipilih." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "Tahap pengelogan minimum untuk ditulis ke sembang." + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Peta mini" @@ -5229,7 +5500,7 @@ #: src/settings_translation_file.cpp msgid "Modifies the size of the hudbar elements." -msgstr "Mengubah saiz elemen hudbar." +msgstr "Mengubah saiz elemen palang papar pandu (hudbar)." #: src/settings_translation_file.cpp msgid "Monospace font path" @@ -5315,9 +5586,8 @@ "senarai pelayan." #: src/settings_translation_file.cpp -#, fuzzy msgid "Near plane" -msgstr "Satah dekat ketipan" +msgstr "Dekat satah" #: src/settings_translation_file.cpp msgid "Network" @@ -5370,9 +5640,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5384,19 +5651,19 @@ "'on_generated'. For many users the optimum setting may be '1'." msgstr "" "Jumlah jalur timbul untuk digunakan.\n" -"AMARAN: Ketika ini terdapat beberapa pepijat yang mungkin mengakibatkan\n" -"ranap apabila nilai 'num_emerge_threads' lebih tinggi daripada 1. Sehingga\n" -"amaran ini dibuang, adalah digalakkan untuk kekalkan nilai asalnya '1'.\n" "Nilai 0:\n" "- Pemilihan automatik. Jumlah jalur timbul akan dikira berdasarkan\n" "- 'jumlah pemproses - 2', dengan had minimum 1.\n" "Sebarang nilai lain:\n" "- Menetapkan jumlah jalur timbul, dengan had minimum 1.\n" -"AMARAN: Menaikkan jumlah jalur timbul meningkatkan kelajuan penjanaan\n" -"peta enjin, tetapi ia boleh memberi kesan buruk kepada prestasi permainan\n" -"dengan mengganggu proses-proses lain, terutamanya dalam mod pemain\n" -"perseorangan dan/atau apabila menjalankan kod Lua dalam fungsi\n" -"'on_generated'. Untuk kebanyakan pengguna, tetapan optimum ialah '1'." +"AMARAN: Menaikkan jumlah jalur timbul meningkatkan kelajuan penjanaan peta " +"enjin, tetapi\n" +"ia boleh memberi kesan buruk kepada prestasi permainan dengan mengganggu " +"proses-proses\n" +"lain, terutamanya dalam mod pemain perseorangan dan/atau apabila menjalankan " +"kod Lua\n" +"dalam fungsi 'on_generated'. Untuk kebanyakan pengguna, tetapan optimum " +"ialah '1'." #: src/settings_translation_file.cpp msgid "" @@ -5437,8 +5704,8 @@ "formspec is\n" "open." msgstr "" -"Buka menu jeda apabila fokus tetingkap hilang. Tidak jeda jika formspec " -"dibuka." +"Buka menu jeda apabila fokus tetingkap hilang.\n" +"Tidak jeda jika formspec dibuka." #: src/settings_translation_file.cpp msgid "Overall bias of parallax occlusion effect, usually scale/2." @@ -5470,10 +5737,6 @@ msgstr "Skala oklusi paralaks" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Kekuatan oklusi paralaks" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5489,8 +5752,12 @@ "tersedia." #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Laluan untuk simpan tangkap layar." +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 "" +"Laluan untuk simpan tangkapan layar. Boleh jadi laluan mutlak atau relatif.\n" +"Folder akan dicipta sekiranya ia belum wujud." #: src/settings_translation_file.cpp msgid "" @@ -5535,6 +5802,14 @@ msgstr "Jeda ketika hilang fokus tetingkap" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "Had baris gilir pemuatan blok daripada cakera per pemain" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "Had baris gilir penjanaan blok per pemain" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Ikut fizik" @@ -5617,6 +5892,22 @@ msgstr "Pemprofilan" #: src/settings_translation_file.cpp +msgid "Prometheus listener address" +msgstr "Alamat pendengar Prometheus" + +#: 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" +"Alamat pendengar Prometheus.\n" +"Jika minetest dikompil dengan tetapan ENABLE_PROMETHEUS dibolehkan,\n" +"membolehkan pendengar metrik untuk Prometheus pada alamat berkenaan.\n" +"Metrik boleh diambil di http://127.0.0.1:30000/metrics" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "Perkadaran gua besar yang mempunyai cecair." @@ -5794,10 +6085,9 @@ msgstr "" "Menyesuaikan GUI dengan nilai ditentukan oleh pengguna.\n" "Gunakan penapis antialias jiran terdekat untuk menyesuaikan GUI.\n" -"Ini membolehkan sisi tajam dilembutkan, dan sebatikan piksel\n" -"apabila menyesuaiturunkan, namun ia akan mengkaburkan\n" -"sesetengah piksel di sisi apabila imej disesuaikan dengan saiz\n" -"bukan integer." +"Ini membolehkan sisi tajam dilembutkan, dan sebatikan piksel apabila\n" +"menyesuaiturunkan, namun ia akan mengaburkan sesetengah piksel\n" +"di sisi apabila imej disesuaikan dengan saiz bukan integer." #: src/settings_translation_file.cpp msgid "Screen height" @@ -6033,14 +6323,12 @@ "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" -"Saiz potongan peta dijana oleh janapeta, dinyatakan dalam blokpeta (16 " -"nod).\n" -"AMARAN!: Tiada manfaat, dan terdapatnya bahaya, jika menaikkan nilai ini di " -"atas 5.\n" -"Mengurangkan nilai ini meningkatkan ketumpatan gua dan kurungan bawah " -"tanah.\n" -"Mengubah nilai ini untuk kegunaan istimewa, lebih baik biarkan ia tidak " -"berubah." +"Saiz potongan peta dijana oleh janapeta, dinyatakan dalam unit\n" +"blokpeta (16 nod). AMARAN!: Tiada manfaat, dan terdapatnya\n" +"bahaya, jika menaikkan nilai ini di atas 5. Mengurangkan nilai ini\n" +"meningkatkan ketumpatan gua dan kurungan bawah tanah.\n" +"Mengubah nilai ini adalah untuk kegunaan istimewa, lebih baik\n" +"biarkan ia tidak berubah." #: src/settings_translation_file.cpp msgid "" @@ -6132,13 +6420,22 @@ "Files that are not present will be fetched the usual way." msgstr "" "Menetapkan URL dari mana klien mengambil media, menggantikan UDP.\n" -"$filename mestilah boleh diakses daripada $remote_media$filename\n" -"melalui cURL (sudah tentu, remote_media mesti berakhir dengan tanda\n" -"condong).\n" +"$filename mestilah boleh diakses daripada $remote_media$filename melalui\n" +"cURL (sudah tentu, remote_media mesti berakhir dengan tanda condong).\n" "Fail yang tidak wujud akan diambil dengan cara biasa." #: 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 "" +"Menetapkan saiz tindanan lalai bagi nod, item dan alatan.\n" +"Ambil perhatian bahawa mods atau permainan boleh tetapkan secara khusus " +"tindanan untuk sesetengah (atau semua) item." + +#: 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." @@ -6164,6 +6461,10 @@ msgstr "Hingar sebar gunung curam" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "Kekuatan paralaks mod 3D." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Kekuatan peta normal yang dijana." @@ -6178,10 +6479,6 @@ "cahaya yang ditolak dalam pencahayaan." #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Kekuatan paralaks." - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "Pemeriksaan protokal ketat" @@ -6190,6 +6487,37 @@ msgstr "Buang kod warna" #: 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 the 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 "" +"Aras permukaan untuk air pilihan yang boleh terletak atas lapisan tanah " +"terapung pejal.\n" +"Air dilumpuhkan secara lalai dan hanya akan diletakkan sekiranya nilai ini " +"ditetapkan\n" +"melebihi \"nilai Y maksimum tanah terapung 'mgv7_floatland_ymax' tolak nilai " +"tirusan\n" +"tanah terapung 'mgv7_floatland_taper' (iaitu permulaan tirusan atasan)\".\n" +"***AMARAN, WUJUD POTENSI BAHAYA KEPADA PRESTASI DUNIA DAN PELAYAN***:\n" +"Apabila membolehkan peletakan air, tanah terapung mestilah ditatarajahkan " +"dan dicuba dahulu\n" +"agar ia sentiasa menjadi lapisan pejal dengan menetapkan ketumpatan " +"'mgv7_floatland_density'\n" +"kepada 2.0 (atau nilai lain yang diperlukan bergantung kepada nilai " +"'mgv7_np_floatland'), untuk\n" +"mengelakkan aliran air keterlaluan yang intensif pelayan dan untuk " +"mengelakkan kebanjiran\n" +"besar-besaran air ke permukaan dunia di bawah tanah terapung tersebut." + +#: src/settings_translation_file.cpp msgid "Synchronous SQLite" msgstr "SQLite segerak" @@ -6329,14 +6657,14 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" -"Radius jilid blok di sekitar setiap pemain yang tertakluk kepada benda blok " -"aktif,\n" -"dinyatakan dalam blokpeta (16 nod).\n" +"Radius jilid blok di sekitar setiap pemain yang tertakluk kepada benda blok\n" +"aktif, dinyatakan dalam blokpeta (16 nod).\n" "Dalam blok aktif, objek dimuatkan dan ABM dijalankan.\n" "Ini juga jarak minimum di mana objek aktif (mob) dikekalkan.\n" -"Ini perlu ditetapkan bersama-sama jarak objek aktif (active_object_range)." +"Ini perlu ditetapkan bersama nilai blok jarak penghantaran objek aktif " +"(active_object_send_range_blocks)." #: src/settings_translation_file.cpp msgid "" @@ -6458,10 +6786,9 @@ "node." msgstr "" "Untuk mengurangkan lembapnya tindak balas, pemindahan blok diperlahankan " -"apabila\n" -"pemain membina sesuatu. Tetapan ini menetapkan berapa lama ianya " -"diperlahankan\n" -"setelah meletakkan atau menggali sesebuah nod." +"apabila pemain membina sesuatu.\n" +"Tetapan ini menetapkan berapa lama ianya diperlahankan setelah meletakkan " +"atau mengalihkan sesebuah nod." #: src/settings_translation_file.cpp msgid "Toggle camera mode key" @@ -6532,6 +6859,10 @@ msgstr "Had Y atas kurungan bawah tanah." #: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "Had Y atas tanah terapung." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Guna paparan awan 3D menggantikan awan rata." @@ -6745,10 +7076,11 @@ "filtered in software, but some images are generated directly\n" "to hardware (e.g. render-to-texture for nodes in inventory)." msgstr "" -"Apabila penapis skala GUI (gui_scaling_filter) ditetapkan kepada\n" -"\"true\", semua imej GUI perlu ditapis dalam perisian, tetapi sesetengah\n" -"imeg dijana secara terus ke perkakasan (contohnya, render-to-texture\n" -"untuk nod dalam inventori)." +"Apabila penapis skala GUI (gui_scaling_filter) ditetapkan kepada \"true\", " +"semua\n" +"imej GUI perlu ditapis dalam perisian, tetapi sesetengah imej dijana secara " +"terus\n" +"ke perkakasan (contohnya, render-to-texture untuk nod dalam inventori)." #: src/settings_translation_file.cpp msgid "" @@ -6757,13 +7089,14 @@ "to the old scaling method, for video drivers that don't\n" "properly support downloading textures back from hardware." msgstr "" -"Apabila gui_scaling_filter_txr2img ditetapkan kepada \"true\",\n" -"salin semula kesemua imej tersebut dari perkakasan\n" -"kepada perisian untuk disesuaikan. Sekiranya ia ditetapkan\n" -"kepada \"false\", berbalik kepada kaedah penyesuaian yang\n" -"lama, untuk pemacu video yang tidak mampu menyokong\n" -"dengan sempurna fungsi muat turun semula tekstur\n" -"daripada perkakasan." +"Apabila gui_scaling_filter_txr2img ditetapkan kepada \"true\", salin semula " +"kesemua imej\n" +"tersebut dari perkakasan ke perisian untuk disesuaikan. Sekiranya ditetapkan " +"kepada\n" +"\"false\", berbalik kepada kaedah penyesuaian yang lama, untuk pemacu video " +"yang tidak\n" +"mampu menyokong dengan sempurna fungsi muat turun semula tekstur daripada " +"perkakasan." #: src/settings_translation_file.cpp msgid "" @@ -6912,8 +7245,8 @@ "Y of mountain density gradient zero level. Used to shift mountains " "vertically." msgstr "" -"Nilai Y untuk permulaan kecerunan ketumpatan gunung.\n" -"Digunakan untuk menganjak gunung secara menegak." +"Nilai Y untuk permulaan kecerunan ketumpatan gunung. Digunakan untuk " +"menganjak gunung secara menegak." #: src/settings_translation_file.cpp msgid "Y of upper limit of large caves." @@ -6924,6 +7257,20 @@ msgstr "Jarak Y di mana gua berkembang kepada saiz penuh." #: 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 "" +"Jarak-Y di mana tanah terapung menirus daripada ketumpatan penuh kepada " +"tiada apa-apa.\n" +"Ketirusan bermula pada jarak ini daripada had Y.\n" +"Untuk lapisan tanah terapung pejal, nilai ini mengawal ketinggian bukit/" +"gunung.\n" +"Mesti kurang atau sama dengan separuh jarak di antara had-had Y." + +#: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." msgstr "Aras Y untuk permukaan rupa bumi purata." @@ -6955,139 +7302,145 @@ msgid "cURL timeout" msgstr "Had masa cURL" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Laraskan pengekodan gama untuk jadual cahaya. Nombor lebih tinggi lebih " -#~ "cerah.\n" -#~ "Tetapan ini hanya untuk klien dan diabaikan oleh pelayan permainan." +#~ msgid "Toggle Cinematic" +#~ msgstr "Togol Sinematik" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Ubah cara tanah terapung jenis gunung menirus di atas dan bawah titik " -#~ "tengah." +#~ msgid "Select Package File:" +#~ msgstr "Pilih Fail Pakej:" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Titik tengah tolakan-tengah lengkung cahaya." +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Had Y pengatas lava dalam gua besar." -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Mengawal ketumpatan rupa bumi tanah terapung bergunung.\n" -#~ "Nilainya ialah ofset yang menambah kepada nilai hingar 'mgv7_np_mountain'." +#~ msgid "Waving Water" +#~ msgstr "Air Bergelora" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgid "Whether dungeons occasionally project from the terrain." #~ msgstr "" -#~ "Mengawal lebar terowong, nilai lebih kecil mencipta terowong lebih lebar." +#~ "Sama ada kurungan bawah tanah kadang-kala terlunjur daripada rupa bumi." -#~ msgid "Darkness sharpness" -#~ msgstr "Ketajaman kegelapan" +#~ msgid "Projecting dungeons" +#~ msgstr "Kurungan bawah tanah melunjur" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Aras Y di mana bayang tanah terapung diperluaskan." + +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "Aras Y untuk titik tengah tanah terapung dan permukaan tasik." + +#~ msgid "Waving water" +#~ msgstr "Air bergelora" + +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" -#~ "Mentakrifkan kawasan rupa bumi lembut tanah terapung.\n" -#~ "Tanag terapung lembut berlaku apabila hingar > 0." +#~ "Variasi ketinggian bukit dan kedalaman tasik rupa bumi lembut tanah " +#~ "terapung." #~ msgid "" -#~ "Deprecated, define and locate cave liquids using biome definitions " -#~ "instead.\n" -#~ "Y of upper limit of lava in large caves." +#~ "Typical maximum height, above and below midpoint, of floatland mountains." #~ msgstr "" -#~ "Tetapan terkecam, mentakrifkan dan menetapkan cecair gua menggunakan " -#~ "pentakrifan biom menggantikan cara asal.\n" -#~ "Had Y atasan lava di gua-gua besar." +#~ "Ketinggian maksimum biasa, di atas dan bawah titik tengah, untuk gunung " +#~ "tanah terapung." -#~ msgid "Enable VBO" -#~ msgstr "Membolehkan VBO" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Fon ini akan digunakan untuk sesetengah bahasa." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Membolehkan pemetaan tona sinematik" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Kekuatan tolakan tengah lengkung cahaya." -#~ msgid "Floatland base height noise" -#~ msgstr "Hingar ketinggian asas tanah terapung" +#~ msgid "Shadow limit" +#~ msgstr "Had bayang" -#~ msgid "Floatland base noise" -#~ msgstr "Hingar asas tanah terapung" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Laluan ke fon TrueType atau peta bit." -#~ msgid "Floatland level" -#~ msgstr "Aras tanah terapung" +#~ msgid "Lightness sharpness" +#~ msgstr "Ketajaman pencahayaan" -#~ msgid "Floatland mountain density" -#~ msgstr "Ketumpatan gunung tanah terapung" +#~ msgid "Lava depth" +#~ msgstr "Kedalaman lava" -#~ msgid "Floatland mountain exponent" -#~ msgstr "Eksponen gunung tanah terapung" +#~ msgid "IPv6 support." +#~ msgstr "Sokongan IPv6." -#~ msgid "Floatland mountain height" -#~ msgstr "Ketinggian gunung tanah terapung" +#~ msgid "Gamma" +#~ msgstr "Gama" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "Nilai alfa bayang fon (kelegapan, antara 0 dan 255)." -#~ msgid "Gamma" -#~ msgstr "Gama" - -#~ msgid "IPv6 support." -#~ msgstr "Sokongan IPv6." +#~ msgid "Floatland mountain height" +#~ msgstr "Ketinggian gunung tanah terapung" -#~ msgid "Lava depth" -#~ msgstr "Kedalaman lava" +#~ msgid "Floatland base height noise" +#~ msgstr "Hingar ketinggian asas tanah terapung" -#~ msgid "Lightness sharpness" -#~ msgstr "Ketajaman pencahayaan" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Membolehkan pemetaan tona sinematik" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Laluan ke fon TrueType atau peta bit." +#~ msgid "Enable VBO" +#~ msgstr "Membolehkan VBO" -#~ msgid "Shadow limit" -#~ msgstr "Had bayang" +#~ msgid "" +#~ "Deprecated, define and locate cave liquids using biome definitions " +#~ "instead.\n" +#~ "Y of upper limit of lava in large caves." +#~ msgstr "" +#~ "Tetapan terkecam, mentakrifkan dan menetapkan cecair gua menggunakan " +#~ "pentakrifan biom menggantikan cara asal.\n" +#~ "Had Y atasan lava di gua-gua besar." -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Kekuatan tolakan tengah lengkung cahaya." +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "Mentakrifkan kawasan rupa bumi lembut tanah terapung.\n" +#~ "Tanag terapung lembut berlaku apabila hingar > 0." -#~ msgid "This font will be used for certain languages." -#~ msgstr "Fon ini akan digunakan untuk sesetengah bahasa." +#~ msgid "Darkness sharpness" +#~ msgstr "Ketajaman kegelapan" -#~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "" -#~ "Ketinggian maksimum biasa, di atas dan bawah titik tengah, untuk gunung " -#~ "tanah terapung." +#~ "Mengawal lebar terowong, nilai lebih kecil mencipta terowong lebih lebar." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." #~ msgstr "" -#~ "Variasi ketinggian bukit dan kedalaman tasik rupa bumi lembut tanah " -#~ "terapung." +#~ "Mengawal ketumpatan rupa bumi tanah terapung bergunung.\n" +#~ "Nilainya ialah ofset yang menambah kepada nilai hingar 'mgv7_np_mountain'." -#~ msgid "Waving water" -#~ msgstr "Air bergelora" +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Titik tengah tolakan-tengah lengkung cahaya." -#~ msgid "Y-level of floatland midpoint and lake surface." -#~ msgstr "Aras Y untuk titik tengah tanah terapung dan permukaan tasik." +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." +#~ msgstr "" +#~ "Ubah cara tanah terapung jenis gunung menirus di atas dan bawah titik " +#~ "tengah." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Aras Y di mana bayang tanah terapung diperluaskan." +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Laraskan pengekodan gama untuk jadual cahaya. Nombor lebih tinggi lebih " +#~ "cerah.\n" +#~ "Tetapan ini hanya untuk klien dan diabaikan oleh pelayan permainan." -#~ msgid "Projecting dungeons" -#~ msgstr "Kurungan bawah tanah melunjur" +#~ msgid "Path to save screenshots at." +#~ msgstr "Laluan untuk simpan tangkap layar." -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "" -#~ "Sama ada kurungan bawah tanah kadang-kala terlunjur daripada rupa bumi." +#~ msgid "Parallax occlusion strength" +#~ msgstr "Kekuatan oklusi paralaks" -#~ msgid "Waving Water" -#~ msgstr "Air Bergelora" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Had baris hilir keluar pada cakera" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Had Y pengatas lava dalam gua besar." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Sedang muat turun dan memasang $1, sila tunggu..." -#~ msgid "Select Package File:" -#~ msgstr "Pilih Fail Pakej:" +#~ msgid "Back" +#~ msgstr "Backspace" -#~ msgid "Toggle Cinematic" -#~ msgstr "Togol Sinematik" +#~ msgid "Ok" +#~ msgstr "Ok" diff -Nru minetest-5.2.0/po/ms_Arab/minetest.po minetest-5.3.0/po/ms_Arab/minetest.po --- minetest-5.2.0/po/ms_Arab/minetest.po 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/po/ms_Arab/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,6585 @@ +# 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: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-08 20:47+0000\n" +"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " +"Yasuyoshi \n" +"Language-Team: Malay (Jawi) \n" +"Language: ms_Arab\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 4.2-dev\n" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "You died" +msgstr "اندا تله منيڠݢل" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "Respawn" +msgstr "لاهير سمولا" + +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "OK" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "ڤلاين ڤرماءينن ممينت اندا اونتوق مڽمبوڠ سمولا:" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "سمبوڠ سمولا" + +#: builtin/fstk/ui.lua +msgid "Main menu" +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/mainmenu/common.lua src/client/game.cpp +msgid "Loading..." +msgstr "سدڠ ممواتکن..." + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "چوب اکتيفکن سمولا سناراي ڤلاين عوام فان ڤريقسا سمبوڠن اينترنيت اندا." + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "ڤلاين ڤرماءينن مڽوکوڠ ڤروتوکول ۏرسي $1 هيڠݢ $2. " + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "ڤلاين ڤرماءينن مڠواتکواساکن ڤروتوکول ۏرسي $1. " + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "کامي مڽوکوڠ ڤروتوکول ۏرسي $1 هيڠݢ $2." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "کامي هاڽ مڽوکوڠ ڤروتوکول ۏرسي $1." + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "ۏرسي ڤروتوکول تيدق سراسي. " + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "دنيا:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No modpack description provided." +msgstr "تيادا ڤريهل ڤيک مودس ترسديا." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No game description provided." +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 hard 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/tab_content.lua +msgid "Dependencies:" +msgstr "کبرݢنتوڠن:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No optional dependencies" +msgstr "تيادا کبرݢنتوڠن ڤيليهن" + +#: builtin/mainmenu/dlg_config_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "سيمڤن" + +#: 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_rename_modpack.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp +#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiPasswordChange.cpp +msgid "Cancel" +msgstr "باتل" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "چاري مودس لاءين" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable modpack" +msgstr "لومڤوهکن ڤيک مودس" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable modpack" +msgstr "بوليهکن ڤيک مودس" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "دبوليهکن" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable all" +msgstr "لومڤوهکن سموا" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +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_contentstore.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "سيستم ContentDB تيدق ترسديا اڤابيلا Minetest دکومڤيل تنڤ cURL" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "All packages" +msgstr "سموا ڤاکيج" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Games" +msgstr "ڤرماءينن" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Mods" +msgstr "مودس" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Texture packs" +msgstr "ڤيک تيکستور" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Failed to download $1" +msgstr "ݢاݢل مموات تورون $1" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "چاري" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Back to Main Menu" +msgstr "کمبالي کمينو اوتام" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No results" +msgstr "تيادا حاصيل" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No packages could be retrieved" +msgstr "تيادا ڤاکيج يڠ بوليه دامبيل" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "مموات تورون..." + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install" +msgstr "ڤاسڠ" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Update" +msgstr "کمس کيني" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Uninstall" +msgstr "ڽهڤاسڠ" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "ليهت" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "ݢوا بسر" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "ݢوا ݢرݢاسي يڠ ساڠت مندالم باواه تانه" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "سوڠاي ارس لاءوت" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "سوڠاي" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "ݢونوڠ" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "تانه تراڤوڠ (دالم اوجيکاجي)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "جيسيم بومي تراڤوڠ اتس لاڠيت" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "کديڠينن التيتود" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "کورڠکن هاب مڠيکوت التيتود" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "ککريڠن التيتود" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +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 "Vary river depth" +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 +msgid "Hills" +msgstr "بوکيت" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "تاسيق" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "روڤ بومي تمبهن" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "جان روڤ بومي بوکن-فراکتل: لاءوتن دان باواه تانه" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "ڤوکوق دان رومڤوت هوتن" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "روڤ بومي رات" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "اليرن لومڤور" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "هاکيسن ڤرموکاءن روڤ بومي" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "اقليم سدرهان⹁ ݢورون⹁ هوتن⹁ توندرا⹁ تايݢ" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "اقليم سدرهان⹁ ݢورون⹁ هوتن" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "اقليم سدرهان⹁ ݢورون" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no games installed." +msgstr "اندا تيدق مماسڠ سبارڠ ڤرماءينن." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "موات تورون ساتو دري minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "ݢوا" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "کوروڠن باواه تانه" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "هياسن" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" +"ستروکتور يڠ مونچول اتس روڤ بومي (تيادا کسن ڤد ڤوکوق دان رومڤوت هوتن دچيڤت " +"اوليه v6)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "ستروکتور يڠ مونچول اتس روڤ بومي⹁ بياساڽ ڤوکوق دان تومبوهن" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "جاريڠن تروووڠ دان ݢوا" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "بيوم" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "ڤڽباتين بيوم" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Smooth transition between biomes" +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 "Warning: The Development Test is meant for developers." +msgstr "امرن: The Development Test هاڽله اونتوق کݢوناءن ڤمباڠون." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a game, such as Minetest Game, from minetest.net" +msgstr "موات تورون ڤرماءينن⹁ چونتوهڽ Minetest Game⹁ دري minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "نام دنيا" + +#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Seed" +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 "Game" +msgstr "ڤرماءينن" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "چيڤت" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "دنيا برنام \"$1\" تله وجود" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No game selected" +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 +#: src/client/keycode.cpp +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_rename_modpack.lua +msgid "Accept" +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 "" +"ڤيک مودس اين ممڤوڽاءي نام خصوص دبريکن دالم فايل modpack.conf ميليقڽ يڠ اکن " +"مڠاتسي سبارڠ ڤناماءن سمولا دسين." + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "نامکن سمولا ڤيک مودس:" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Disabled" +msgstr "دلومڤوهکن" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Enabled" +msgstr "دبوليهکن" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Browse" +msgstr "لاير" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Offset" +msgstr "اوفسيت" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Scale" +msgstr "سکال" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X spread" +msgstr "سيبرن X" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y spread" +msgstr "سيبرن Y" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "2D Noise" +msgstr "هيڠر 2D" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z spread" +msgstr "سيبرن Z" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Octaves" +msgstr "اوکتف" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Persistance" +msgstr "ڤنروسن" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Lacunarity" +msgstr "لاکوناريتي" + +#. ~ "defaults" is a noise parameter flag. +#. It describes the default processing options +#. for noise settings in main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.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 +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "eased" +msgstr "تومڤول" + +#. ~ "absvalue" is a noise parameter flag. +#. It is short for "absolute value". +#. It can be enabled in noise settings in +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "absvalue" +msgstr "نيلاي مطلق" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X" +msgstr "X" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y" +msgstr "Y" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z" +msgstr "Z" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "(No description of setting given)" +msgstr "(تيادا ڤريهل اونتوق تتڤن يڠ دبري)" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid integer." +msgstr "سيلا ماسوقکن اينتيݢر يڠ صح." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must be at least $1." +msgstr "نيلاي مستيله سکورڠ-کورڠڽ $1." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must not be larger than $1." +msgstr "نيلاي مستيله تيدق لبيه درڤد $1." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid number." +msgstr "سيلا ماسوقکن نومبور يڠ صح." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select directory" +msgstr "ڤيليه ديريکتوري" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select file" +msgstr "ڤيليه فايل" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "< Back to Settings page" +msgstr "< کمبالي کهلامن تتڤن" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Edit" +msgstr "ايديت" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Restore Default" +msgstr "ڤوليهکن تتڤن اصل" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Show technical names" +msgstr "تونجوقکن نام تيکنيکل" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 (Enabled)" +msgstr "$1 (دبوليهکن)" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a $1 as a texture pack" +msgstr "ݢاݢل مماسڠ $1 سباݢاي ڤيک تيکستور" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Failed to install $1 to $2" +msgstr "ݢاݢل مماسڠ $1 ڤد $2" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to find a valid mod or modpack" +msgstr "تيدق جومڤ مودس اتاو ڤيک مودس يڠ صح" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a modpack as a $1" +msgstr "ݢاݢل مماسڠ ڤيک مودس سباݢاي $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find suitable folder name for modpack $1" +msgstr "ڤاسڠ مودس: تيدق جومڤ نام فولدر يڠ سسواي اونتوق ڤيک مودس $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a mod as a $1" +msgstr "ݢاݢل مماسڠ مودس سباݢاي $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find real mod name for: $1" +msgstr "ڤاسڠ مودس: ݢاݢل منچاري نام مودس سبنر اونتوق: $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a game as a $1" +msgstr "ݢاݢل مماسڠ ڤرماءينن سباݢاي $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: file: \"$1\"" +msgstr "ڤاسڠ: فايل: \"$1\"" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: Unsupported file type \"$1\" or broken archive" +msgstr "ڤاسڠ: جنيس فايل \"$1\" تيدق دسوکوڠ اتاو ارکيب روسق" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 mods" +msgstr "$1 مودس" + +#: builtin/mainmenu/tab_content.lua +msgid "Installed Packages:" +msgstr "ڤاکيج دڤاسڠ:" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +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 "No dependencies." +msgstr "تيادا کبرݢنتوڠن." + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "لومڤوهکن ڤيک تيکستور" + +#: builtin/mainmenu/tab_content.lua +msgid "Use Texture Pack" +msgstr "ݢونا ڤيک تيکستور" + +#: builtin/mainmenu/tab_content.lua +msgid "Information:" +msgstr "معلومت:" + +#: builtin/mainmenu/tab_content.lua +msgid "Uninstall Package" +msgstr "ڽهڤاسڠ ڤاکيج" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "کندوڠن" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "ڤڠهرݢاءن" + +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "ڤمباڠون تراس" + +#: builtin/mainmenu/tab_credits.lua +msgid "Active Contributors" +msgstr "ڤڽومبڠ اکتيف" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "ڤمباڠون تراس تردهولو" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "ڤڽومبڠ تردهولو" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "ڤاسڠکن ڤرماءينن درڤد ContentDB" + +#: builtin/mainmenu/tab_local.lua +msgid "Configure" +msgstr "کونفيݢوراسي" + +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "بوات بارو" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "ڤيليه دنيا:" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative Mode" +msgstr "مود کرياتيف" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Enable Damage" +msgstr "بوليه چدرا" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Server" +msgstr "هوس ڤلاين" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Game" +msgstr "هوس ڤرماءينن" + +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" +msgstr "اومومکن ڤلاين" + +#: builtin/mainmenu/tab_local.lua +msgid "Name/Password" +msgstr "نام\\کات لالوان" + +#: builtin/mainmenu/tab_local.lua +msgid "Bind Address" +msgstr "علامت ايکتن" + +#: builtin/mainmenu/tab_local.lua +msgid "Port" +msgstr "ڤورت" + +#: builtin/mainmenu/tab_local.lua +msgid "Server Port" +msgstr "ڤورت ڤلاين" + +#: builtin/mainmenu/tab_local.lua +msgid "Play Game" +msgstr "مولا ماءين" + +#: builtin/mainmenu/tab_local.lua +msgid "No world created or selected!" +msgstr "تيادا دنيا دچيڤت اتاو دڤيليه!" + +#: builtin/mainmenu/tab_local.lua +msgid "Start Game" +msgstr "مولاکن ڤرماءينن" + +#: builtin/mainmenu/tab_online.lua +msgid "Address / Port" +msgstr "علامت \\ ڤورت" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name / Password" +msgstr "نام \\ کات لالوان" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "سمبوڠ" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Del. Favorite" +msgstr "ڤادم کݢمرن" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Favorite" +msgstr "کݢمرن" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Ping" +msgstr "ڤيڠ" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "مود کرياتيف" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "بوليه چدرا" + +#. ~ PvP = Player versus Player +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "بوليه برلاوان PvP" + +#: builtin/mainmenu/tab_online.lua +msgid "Join Game" +msgstr "سرتاءي ڤرماءينن" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "داون لݢڤ" + +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "داون ريڠکس" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "داون براݢم" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Outlining" +msgstr "کرڠک نود" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "تونجولن نود" + +#: builtin/mainmenu/tab_settings.lua +msgid "None" +msgstr "تيادا" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "تيادا تاڤيسن" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "ڤناڤيسن بيلينيار" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "ڤناڤيسن تريلينيار" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "تيادا ڤتا ميڤ" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "ڤتا ميڤ" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "ڤتا ميڤ + ڤناڤيسن انيسو" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "2x" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "4x" + +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "8x" + +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "اداکه اندا ماهو سيت سمولا دنيا ڤماءين ڤرساورڠن؟" + +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "ياء" + +#: builtin/mainmenu/tab_settings.lua +msgid "No" +msgstr "تيدق" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "ڤنچهاياءن لمبوت" + +#: builtin/mainmenu/tab_settings.lua +msgid "Particles" +msgstr "ڤرتيکل" + +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "اوان 3D" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "اءير لݢڤ" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "کاچ برسمبوڠن" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "جالينن:" + +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "انتيالياس:" + +#: builtin/mainmenu/tab_settings.lua +msgid "Screen:" +msgstr "سکرين:" + +#: builtin/mainmenu/tab_settings.lua +msgid "Autosave Screen Size" +msgstr "اءوتوسيمڤن سايز سکرين" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Shaders" +msgstr "ڤمبايڠ" + +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders (unavailable)" +msgstr "ڤمبايڠ (تيدق ترسديا)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "سيت سمولا دنيا ڤماءين ڤرساورڠن" + +#: builtin/mainmenu/tab_settings.lua src/client/game.cpp +msgid "Change Keys" +msgstr "توکر ککونچي" + +#: builtin/mainmenu/tab_settings.lua +msgid "All Settings" +msgstr "سموا تتڤن" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold: (px)" +msgstr "نيلاي امبڠ سنتوهن: (px)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bump Mapping" +msgstr "ڤمتاءن بيڠݢول" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Tone Mapping" +msgstr "ڤمتاءن تونا" + +#: builtin/mainmenu/tab_settings.lua +msgid "Generate Normal Maps" +msgstr "جان ڤتا نورمل" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "اوکلوسي ڤارالکس" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Liquids" +msgstr "چچاءير برݢلورا" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "داءون برݢويڠ" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "تومبوهن برݢويڠ" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "اونتوق ممبوليهکن ڤمبايڠ⹁ ڤماچو OpenGL مستي دݢوناکن." + +#: builtin/mainmenu/tab_settings.lua +msgid "Settings" +msgstr "تتڤن" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "مولا ماءين ساورڠ" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "کونفيݢوراسي مودس" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "اوتام" + +#: src/client/client.cpp +msgid "Connection timed out." +msgstr "سمبوڠن تامت تيمڤوه." + +#: src/client/client.cpp +msgid "Loading textures..." +msgstr "سدڠ ممواتکن تيکستور..." + +#: src/client/client.cpp +msgid "Rebuilding shaders..." +msgstr "سدڠ ممبينا سمولا ڤمبايڠ..." + +#: src/client/client.cpp +msgid "Initializing nodes..." +msgstr "سدڠ مڠاولکن نود..." + +#: src/client/client.cpp +msgid "Initializing nodes" +msgstr "مڠاولکن نود" + +#: src/client/client.cpp +msgid "Done!" +msgstr "سلساي!" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "مينو اوتام" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "نام ڤماءين ترلالو ڤنجڠ." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "رالت دالم ڤڽمبوڠن (تامت تيمڤوه؟)" + +#: src/client/clientlauncher.cpp +msgid "Provided password file failed to open: " +msgstr "فايل کات لالوان يڠ دسدياکن ݢاݢل دبوک: " + +#: src/client/clientlauncher.cpp +msgid "Please choose a name!" +msgstr "سيلا ڤيليه سواتو نام!" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "تيادا دنيا دڤيليه اتاو تيادا علامت دبري. تيادا اڤ بوليه دلاکوکن." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "لالوان دنيا دبري تيدق وجود: " + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "تيدق جومڤ اتاو تيدق بوليه مواتکن ڤرماءينن \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "سڤيسيفيکاسي ڤرماءينن تيدق صح." + +#. ~ DO NOT TRANSLATE THIS LITERALLY! +#. This is a special string. Put either "no" or "yes" +#. into the translation field (literally). +#. Choose "yes" if the language requires use of the fallback +#. font, "no" otherwise. +#. The fallback font is (normally) required for languages with +#. non-Latin script, like Chinese. +#. When in doubt, test your translation. +#: src/client/fontengine.cpp +msgid "needs_fallback_font" +msgstr "yes" + +#: src/client/game.cpp +msgid "Shutting down..." +msgstr "سدڠ منوتوڤ..." + +#: src/client/game.cpp +msgid "Creating server..." +msgstr "سدڠ منچيڤت ڤلاين..." + +#: src/client/game.cpp +msgid "Creating client..." +msgstr "سدڠ منچيڤت کليئن..." + +#: src/client/game.cpp +msgid "Resolving address..." +msgstr "سدڠ مڽلسايکن علامت..." + +#: src/client/game.cpp +msgid "Connecting to server..." +msgstr "سدڠ مڽمبوڠ کڤد ڤلاين..." + +#: src/client/game.cpp +msgid "Item definitions..." +msgstr "سدڠ منتعريفکن ايتم..." + +#: src/client/game.cpp +msgid "Node definitions..." +msgstr "سدڠ منتعريفکن نود..." + +#: src/client/game.cpp +msgid "Media..." +msgstr "سدڠ ممواتکن ميديا..." + +#: src/client/game.cpp +msgid "KiB/s" +msgstr "KiB/s" + +#: src/client/game.cpp +msgid "MiB/s" +msgstr "MiB/s" + +#: src/client/game.cpp +msgid "Client side scripting is disabled" +msgstr "سکريڤ ڤيهق کليئن دلومڤوهکن" + +#: src/client/game.cpp +msgid "Sound muted" +msgstr "بوڽي دبيسوکن" + +#: src/client/game.cpp +msgid "Sound unmuted" +msgstr "بوڽي دڽهبيسوکن" + +#: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "سيستم بوڽي دلومڤوهکن" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "ککواتن بوڽي داوبه کڤد %d%%" + +#: src/client/game.cpp +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 "مود تربڠ دبوليهکن" + +#: src/client/game.cpp +msgid "Fly mode enabled (note: no 'fly' privilege)" +msgstr "مود تربڠ دبوليهکن (نوت: تيادا کأيستيميواءن 'تربڠ')" + +#: src/client/game.cpp +msgid "Fly mode disabled" +msgstr "مود تربڠ دلومڤوهکن" + +#: src/client/game.cpp +msgid "Pitch move mode enabled" +msgstr "مود ڤرݢرقن ڤيچ دبوليهکن" + +#: src/client/game.cpp +msgid "Pitch move 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 "Fast 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 "Noclip mode disabled" +msgstr "مود تمبوس بلوک دلومڤوهکن" + +#: src/client/game.cpp +msgid "Cinematic mode enabled" +msgstr "مود سينماتيک دبوليهکن" + +#: src/client/game.cpp +msgid "Cinematic mode disabled" +msgstr "مود سينماتيک دلومڤوهکن" + +#: src/client/game.cpp +msgid "Automatic forward enabled" +msgstr "ڤرݢرقن اءوتوماتيک دبوليهکن" + +#: src/client/game.cpp +msgid "Automatic forward disabled" +msgstr "ڤرݢرقن اءوتوماتيک دلومڤوهکن" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x1" +msgstr "ڤتا ميني دالم مود ڤرموکاءن⹁ زوم 1x" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x2" +msgstr "ڤتا ميني دالم مود ڤرموکاءن⹁ زوم 2x" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x4" +msgstr "ڤتا ميني دالم مود ڤرموکاءن⹁ زوم 4x" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x1" +msgstr "ڤتا ميني دالم مود رادر⹁ زوم 1x" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x2" +msgstr "ڤتا ميني دالم مود رادر⹁ زوم 2x" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x4" +msgstr "ڤتا ميني دالم مود رادر⹁ زوم 4x" + +#: src/client/game.cpp +msgid "Minimap hidden" +msgstr "ڤتا ميني دسمبوڽيکن" + +#: src/client/game.cpp +msgid "Minimap currently disabled by game or mod" +msgstr "ڤتا ميني دلومڤوهکن اوليه ڤرماءينن اتاو مودس" + +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "کابوت دلومڤوهکن" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "کابوت دبوليهکن" + +#: src/client/game.cpp +msgid "Debug info shown" +msgstr "معلومت ڽهڤڤيجت دتونجوقکن" + +#: src/client/game.cpp +msgid "Profiler graph shown" +msgstr "ݢراف ڤمبوکه دتونجوقکن" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "رڠک داواي دتونجوقکن" + +#: src/client/game.cpp +msgid "Debug info, profiler graph, and wireframe hidden" +msgstr "معلومت ڽهڤڤيجت⹁ ݢراف ڤمبوکه⹁ دان رڠک داواي دسمبوڽيکن" + +#: src/client/game.cpp +msgid "Debug info and profiler graph hidden" +msgstr "معلومت ڽهڤڤيجت دان ݢراف ڤمبوکه دسمبوڽيکن" + +#: src/client/game.cpp +msgid "Camera update disabled" +msgstr "کمس کيني کاميرا دلومڤوهکن" + +#: src/client/game.cpp +msgid "Camera update enabled" +msgstr "کمس کيني کاميرا دبوليهکن" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at maximum: %d" +msgstr "جارق ڤندڠ براد دتاهڤ مکسيموم: %d" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d" +msgstr "جارق ڤندڠ دتوکر ک%d" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at minimum: %d" +msgstr "جارق ڤندڠ براد دتاهڤ مينيموم: %d" + +#: src/client/game.cpp +msgid "Enabled unlimited viewing range" +msgstr "جارق ڤندڠ تنڤ حد دبوليهکن" + +#: src/client/game.cpp +msgid "Disabled unlimited viewing range" +msgstr "جارق ڤندڠ تنڤ حد دلومڤوهکن" + +#: src/client/game.cpp +msgid "Zoom currently disabled by game or mod" +msgstr "زوم سدڠ دلومڤوهکن اوليه ڤرماءينن اتاو مودس" + +#: src/client/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\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 "" +"کاولن اصل:\n" +"تيادا مينو کليهتن:\n" +"- تکن سکالي: اکتيفکن بوتڠ\n" +"- تکن دوا کالي: لتق بارڠ\\ݢونا سسواتو\n" +"- تاريق دڠن جاري: ليهت سکليليڠ\n" +"مينو\\اينۏينتوري کليهتن:\n" +"- تکن برݢندا (لوار کاوسن اينۏينتوري):\n" +" -->توتوڤ\n" +"- تکن تيندنن⹁ تکن سلوت:\n" +" --> ڤينده تيندنن\n" +"- سنتوه دان تاريق⹁ تکن سکرين ڤاکاي جاري کدوا\n" +" --> لتق ساتو ايتم دري تيندنن کدالم سلوت\n" + +#: 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\n" +"- %s: sneak/go down\n" +"- %s: drop item\n" +"- %s: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\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 +msgid "Continue" +msgstr "تروسکن" + +#: src/client/game.cpp +msgid "Change Password" +msgstr "توکر کات لالوان" + +#: src/client/game.cpp +msgid "Game paused" +msgstr "ڤرماءينن دجيداکن" + +#: src/client/game.cpp +msgid "Sound Volume" +msgstr "ککواتن بوڽي" + +#: src/client/game.cpp +msgid "Exit to Menu" +msgstr "کلوار کمينو" + +#: src/client/game.cpp +msgid "Exit to OS" +msgstr "کلوار تروس ڤرماءينن" + +#: src/client/game.cpp +msgid "Game info:" +msgstr "معلومت ڤرماءينن:" + +#: src/client/game.cpp +msgid "- Mode: " +msgstr "- مود: " + +#: src/client/game.cpp +msgid "Remote server" +msgstr "ڤلاين جارق جاءوه" + +#: src/client/game.cpp +msgid "- Address: " +msgstr "- علامت: " + +#: src/client/game.cpp +msgid "Hosting server" +msgstr "مڠهوس ڤلاين" + +#: src/client/game.cpp +msgid "- Port: " +msgstr "- ڤورت: " + +#: src/client/game.cpp +msgid "Singleplayer" +msgstr "ڤماءين ڤرسأورڠن" + +#: src/client/game.cpp +msgid "On" +msgstr "بوک" + +#: src/client/game.cpp +msgid "Off" +msgstr "توتوڤ" + +#: src/client/game.cpp +msgid "- Damage: " +msgstr "- بوليه چدرا " + +#: src/client/game.cpp +msgid "- Creative Mode: " +msgstr "- مود کرياتيف: " + +#. ~ PvP = Player versus Player +#: src/client/game.cpp +msgid "- PvP: " +msgstr "- PvP: " + +#: src/client/game.cpp +msgid "- Public: " +msgstr "- عوام: " + +#: src/client/game.cpp +msgid "- Server Name: " +msgstr "- نام ڤلاين: " + +#: src/client/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"ڤريقسا فايل debug.txt اونتوق معلومت لنجوت." + +#: src/client/gameui.cpp +msgid "Chat shown" +msgstr "سيمبڠ دتونجوقکن" + +#: src/client/gameui.cpp +msgid "Chat hidden" +msgstr "سيمبڠ دسمبوڽيکن" + +#: src/client/gameui.cpp +msgid "HUD shown" +msgstr "ڤاڤر ڤندو (HUD) دتونجوقکن" + +#: src/client/gameui.cpp +msgid "HUD hidden" +msgstr "ڤاڤر ڤندو (HUD) دسمبوڽيکن" + +#: src/client/gameui.cpp +#, c-format +msgid "Profiler shown (page %d of %d)" +msgstr "ڤمبوکه دتونجوقکن (هلامن %d دري %d)" + +#: src/client/gameui.cpp +msgid "Profiler hidden" +msgstr "ڤمبوکه دسمبوڽيکن" + +#: src/client/keycode.cpp +msgid "Left Button" +msgstr "بوتڠ کيري" + +#: src/client/keycode.cpp +msgid "Right Button" +msgstr "بوتڠ کانن" + +#: src/client/keycode.cpp +msgid "Middle Button" +msgstr "بوتڠ تڠه" + +#: src/client/keycode.cpp +msgid "X Button 1" +msgstr "بوتڠ X نومبور 1" + +#: src/client/keycode.cpp +msgid "X Button 2" +msgstr "بوتڠ X نومبور 2" + +#: src/client/keycode.cpp +msgid "Backspace" +msgstr "Backspace" + +#: src/client/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/client/keycode.cpp +msgid "Clear" +msgstr "ڤادم" + +#: src/client/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/client/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/client/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#. ~ Key name, common on Windows keyboards +#: src/client/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/client/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/client/keycode.cpp +msgid "Caps Lock" +msgstr "کونچي حروف بسر" + +#: src/client/keycode.cpp +msgid "Space" +msgstr "سلاڠ" + +#: src/client/keycode.cpp +msgid "Page up" +msgstr "Page up" + +#: src/client/keycode.cpp +msgid "Page down" +msgstr "Page down" + +#: src/client/keycode.cpp +msgid "End" +msgstr "End" + +#: src/client/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Left" +msgstr "ککيري" + +#: src/client/keycode.cpp +msgid "Up" +msgstr "اتس" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Right" +msgstr "ککانن" + +#: src/client/keycode.cpp +msgid "Down" +msgstr "باواه" + +#. ~ Key name +#: src/client/keycode.cpp +msgid "Select" +msgstr "Select" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" +msgstr "Print Screen" + +#: src/client/keycode.cpp +msgid "Execute" +msgstr "لاکوکن" + +#: src/client/keycode.cpp +msgid "Snapshot" +msgstr "تڠکڤ ݢمبر سکرين" + +#: src/client/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/client/keycode.cpp +msgid "Help" +msgstr "بنتوان" + +#: src/client/keycode.cpp +msgid "Left Windows" +msgstr "Windows کيري" + +#: src/client/keycode.cpp +msgid "Right Windows" +msgstr "Windows کانن" + +#: src/client/keycode.cpp +msgid "Numpad 0" +msgstr "ڤد اڠک 0" + +#: src/client/keycode.cpp +msgid "Numpad 1" +msgstr "ڤد اڠک 1" + +#: src/client/keycode.cpp +msgid "Numpad 2" +msgstr "ڤد اڠک 2" + +#: src/client/keycode.cpp +msgid "Numpad 3" +msgstr "ڤد اڠک 3" + +#: src/client/keycode.cpp +msgid "Numpad 4" +msgstr "ڤد اڠک 4" + +#: src/client/keycode.cpp +msgid "Numpad 5" +msgstr "ڤد اڠک 5" + +#: src/client/keycode.cpp +msgid "Numpad 6" +msgstr "ڤد اڠک 6" + +#: src/client/keycode.cpp +msgid "Numpad 7" +msgstr "ڤد اڠک 7" + +#: src/client/keycode.cpp +msgid "Numpad 8" +msgstr "ڤد اڠک 8" + +#: src/client/keycode.cpp +msgid "Numpad 9" +msgstr "ڤد اڠک 9" + +#: src/client/keycode.cpp +msgid "Numpad *" +msgstr "ڤد اڠک *" + +#: src/client/keycode.cpp +msgid "Numpad +" +msgstr "ڤد اڠک +" + +#: src/client/keycode.cpp +msgid "Numpad ." +msgstr "ڤد اڠک ." + +#: src/client/keycode.cpp +msgid "Numpad -" +msgstr "ڤد اڠک -" + +#: src/client/keycode.cpp +msgid "Numpad /" +msgstr "ڤد اڠک /" + +#: src/client/keycode.cpp +msgid "Num Lock" +msgstr "کونچي اڠک" + +#: src/client/keycode.cpp +msgid "Scroll Lock" +msgstr "کونچي تاتل" + +#: src/client/keycode.cpp +msgid "Left Shift" +msgstr "Shift کيري" + +#: src/client/keycode.cpp +msgid "Right Shift" +msgstr "Shift کانن" + +#: src/client/keycode.cpp +msgid "Left Control" +msgstr "Ctrl کيري" + +#: src/client/keycode.cpp +msgid "Right Control" +msgstr "Ctrl کانن" + +#: src/client/keycode.cpp +msgid "Left Menu" +msgstr "مينو کيري" + +#: src/client/keycode.cpp +msgid "Right Menu" +msgstr "مينو کانن" + +#: src/client/keycode.cpp +msgid "IME Escape" +msgstr "IME - کلوار" + +#: src/client/keycode.cpp +msgid "IME Convert" +msgstr "IME - توکر" + +#: src/client/keycode.cpp +msgid "IME Nonconvert" +msgstr "IME - تيدقتوکر" + +#: src/client/keycode.cpp +msgid "IME Accept" +msgstr "IME - تريما" + +#: src/client/keycode.cpp +msgid "IME Mode Change" +msgstr "IME - توکر مود" + +#: src/client/keycode.cpp +msgid "Apps" +msgstr "اڤليکاسي" + +#: src/client/keycode.cpp +msgid "Sleep" +msgstr "تيدور" + +#: src/client/keycode.cpp +msgid "Erase EOF" +msgstr "ڤادم EOF" + +#: src/client/keycode.cpp +msgid "Play" +msgstr "مولا ماءين" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Zoom" +msgstr "زوم" + +#: src/client/keycode.cpp +msgid "OEM Clear" +msgstr "ڤادم OEM" + +#: src/gui/guiConfirmRegistration.cpp +#, c-format +msgid "" +"You are about to join this server with the name \"%s\" for the first time.\n" +"If you proceed, a new account using your credentials will be created on this " +"server.\n" +"Please retype your password and click 'Register and Join' to confirm account " +"creation, or click 'Cancel' to abort." +msgstr "" +"اندا اکن سرتاءي ڤلاين دڠن نام \"%s\" اونتوق کالي ڤرتام.\n" +"جيک اندا تروسکن⹁ اکاءون بهارو دڠن معلومت اندا اکن دچيڤت دڤلاين اين.\n" +"سيلا تايڤ سمولا کات لالوان اندا دان کليک 'دفتر دان سرتاءي' اونتوق صحکن " +"ڤنچيڤتاءن اکاءون⹁ اتاو کليک 'باتل' اونتوق ممباتلکن." + +#: src/gui/guiConfirmRegistration.cpp +msgid "Register and Join" +msgstr "دفتر دان سرتاءي" + +#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "کات لالوان تيدق ڤادن!" + +#: src/gui/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "تروسکن" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"ايکتن ککونچي. (جيک مينو اين برسليرق⹁ ڤادم سستڠه بندا دري فايل minetest.conf)" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "\"Special\" = climb down" +msgstr "\"ايستيميوا\" = ڤنجت تورون" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "تکن دوا کالي \"لومڤت\" اونتوق منوݢول تربڠ" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Automatic jumping" +msgstr "لومڤت أوتوماتيک" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "ککونچي تله دݢوناکن اونتوق فوڠسي لاءين" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "تکن ککونچي" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "کدڤن" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "کبلاکڠ" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Special" +msgstr "ايستيميوا" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "لومڤت" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "سلينڤ" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "جاتوهکن" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "اينۏينتوري" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Prev. item" +msgstr "ايتم سبلومڽ" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Next item" +msgstr "ايتم ستروسڽ" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Change camera" +msgstr "توکر کاميرا" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle minimap" +msgstr "توݢول ڤتا ميني" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "توݢول تربڠ" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle pitchmove" +msgstr "توݢول ڤرݢرقن منچورم" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "توݢول ڤرݢرقن ڤنتس" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "توݢول تمبوس بلوک" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Mute" +msgstr "بيسو" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. volume" +msgstr "ڤرلاهنکن بوڽي" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. volume" +msgstr "کواتکن بوڽي" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Autoforward" +msgstr "أوتوڤرݢرقن" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "سيمبڠ" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "تڠکڤ لاير" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "جارق ڤميليهن" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. range" +msgstr "کورڠکن جارق" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. range" +msgstr "ناءيقکن جارق" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "کونسول" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "ارهن" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Local command" +msgstr "ارهن تمڤتن" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle HUD" +msgstr "توݢول ڤاڤر ڤندو (HUD)" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle chat log" +msgstr "توݢول لوݢ سيمبڠ" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fog" +msgstr "توݢول کابوت" + +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" +msgstr "کات لالوان لام" + +#: src/gui/guiPasswordChange.cpp +msgid "New Password" +msgstr "کات لالوان بارو" + +#: src/gui/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "صحکن کات لالوان" + +#: src/gui/guiPasswordChange.cpp +msgid "Change" +msgstr "توکر" + +#: src/gui/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "ککواتن بوڽي: " + +#: src/gui/guiVolumeChange.cpp +msgid "Exit" +msgstr "کلوار" + +#: src/gui/guiVolumeChange.cpp +msgid "Muted" +msgstr "دبيسوکن" + +#. ~ Imperative, as in "Enter/type in text". +#. Don't forget the space. +#: src/gui/modalMenu.cpp +msgid "Enter " +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 +msgid "LANG_CODE" +msgstr "ms_Arab" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "کاولن" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "بينا دالم ڤماءين" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks 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 "Flying" +msgstr "تربڠ" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the \"fly\" privilege on the server." +msgstr "" +"ڤماءين بوليه تربڠ تنڤ ترکسن دڠن ݢراۏيتي.\n" +"اين ممرلوکن کأيستيميواءن \"تربڠ\" دالم ڤلاين ڤرماءينن ترسبوت." + +#: src/settings_translation_file.cpp +msgid "Pitch move mode" +msgstr "مود ڤرݢرقن ڤيچ" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, makes move directions relative to the player's pitch when flying " +"or swimming." +msgstr "" +"جيک دبوليهکن⹁ اي ممبواتکن اره ڤرݢرقن ريلاتيف دڠن ڤيچ ڤماءين اڤابيلا تربڠ " +"اتاو برنڠ." + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "ڤرݢرقن ڤنتس" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via the \"special\" key).\n" +"This requires the \"fast\" privilege on the server." +msgstr "" +"برݢرق ڤنتس (دڠن ککونچي \"ايستيميوا\").\n" +"اين ممرلوکن کأيستيميواءن \"ڤرݢرقن ڤنتس\" دالم ڤلاين ڤرماءينن ترسبوت." + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "تمبوس بلوک" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the \"noclip\" privilege on the server." +msgstr "" +"جيک دبوليهکن برسام مود تربڠ⹁ ڤماءين بوليه تربڠ منروسي نود ڤڤجل.\n" +"اين ممرلوکن کأيستيميواءن \"تمبوس بلوک\" دالم ڤلاين ڤرماءينن ترسبوت." + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "مود سينماتيک" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when looking around. Also called look or mouse smoothing.\n" +"Useful for recording videos." +msgstr "" +"ملمبوتکن کاميرا اڤابيلا مليهت سکليليڠ. جوݢ دکنلي سباݢاي ڤلمبوتن ڤڠليهتن اتاو " +"ڤلمبوتن تتيکوس.\n" +"برݢونا اونتوق مراکم ۏيديو." + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "ڤلمبوتن کاميرا" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "ملمبوتکن ڤموترن کاميرا. سيت سباݢاي 0 اونتوق ملومڤوهکنڽ." + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "ڤلمبوتن کاميرا دالم مود سينماتيک" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" +"ملمبوتکن ڤموترن کاميرا دالم مود سينماتيک. سيت سباݢاي 0 اونتوق ملومڤوهکنڽ." + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "تتيکوس سوڠسڠ" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "مڽوڠسڠکن ڤرݢرقن تتيکوس منݢق." + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "کڤيکاءن تتيکوس" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "ڤندارب کڤيکاءن تتيکوس." + +#: src/settings_translation_file.cpp +msgid "Special key for climbing/descending" +msgstr "ککونچي اونتوق ممنجت\\منورون" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, \"special\" key instead of \"sneak\" key is used for climbing " +"down and\n" +"descending." +msgstr "" +"جيک دبوليهکن⹁ ککونچي \"ايستيميوا\" اکن دݢوناکن اونتوق ڤنجت کباوه دان\n" +"تورون دالم مود تربڠ⹁ مڠݢنتيکن ککونچي \"سلينڤ\"." + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "تکن \"لومڤت\" دوا کالي اونتوق تربڠ" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "تکن بوتڠ \"لومڤت\" سچارا چڤت دوا کالي اونتوق منوݢول مود تربڠ." + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "سنتياس تربڠ دان برݢرق ڤنتس" + +#: src/settings_translation_file.cpp +msgid "" +"If disabled, \"special\" key is used to fly fast if both fly and fast mode " +"are\n" +"enabled." +msgstr "" +"جيک دلومڤوهکن⹁ ککونچي \"ايستيميوا\" اکن دݢوناکن اونتوق تربڠ لاجو\n" +"سکيراڽ کدوا-دوا مود تربڠ دان مود ڤرݢرقن ڤنتس دبوليهکن." + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "سلڠ ڤڠاولڠن کليک کانن" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right\n" +"mouse button." +msgstr "" +"جومله ماس دالم ساءت دامبيل اونتوق ملاکوکن کليک کانن يڠ براولڠ اڤابيلا\n" +"ڤماءين منکن بوتڠ تتيکوس کانن تنڤ ملڤسکنڽ." + +#: src/settings_translation_file.cpp +msgid "Automatically jump up single-node obstacles." +msgstr "لومڤت هالڠن ساتو-نود سچارا أوروماتيک." + +#: src/settings_translation_file.cpp +msgid "Safe digging and placing" +msgstr "ڤڠݢالين دان ڤلتقن سلامت" + +#: src/settings_translation_file.cpp +msgid "" +"Prevent digging and placing from repeating when holding the mouse buttons.\n" +"Enable this when you dig or place too often by accident." +msgstr "" +"منچݢه ݢالي دان ڤلتقن درڤد براولڠ کتيک تروس منکن بوتڠ تتيکوس.\n" +"بوليهکن تتڤن اين اڤابيلا اندا ݢالي اتاو لتق سچارا تيدق سڠاج ترلالو کرڤ." + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "اينڤوت راوق" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "ممبوليهکن اينڤوت ڤڠݢونا سچارا راوق (هاڽ اونتوق ڤرچوباءن)." + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "کدڤن برتروسن" + +#: src/settings_translation_file.cpp +msgid "" +"Continuous forward movement, toggled by autoforward key.\n" +"Press the autoforward key again or the backwards movement to disable." +msgstr "" +"ڤرݢرقن کدڤن برتروسن⹁ دتوݢول اوليه ککونچي أوتوڤرݢرقن.\n" +"تکن ککونچي أوتوڤرݢرقن لاݢي اتاو ڤرݢرقن کبلاکڠ اونتوق ملومڤوهکنڽ." + +#: src/settings_translation_file.cpp +msgid "Touch screen threshold" +msgstr "نيلاي امبڠ سکرين سنتوه" + +#: src/settings_translation_file.cpp +msgid "The length in pixels it takes for touch screen interaction to start." +msgstr "ڤنجڠ دالم ڤيکسيل اونتوق ممولاکن اينتراکسي سکرين سنتوه." + +#: src/settings_translation_file.cpp +msgid "Fixed virtual joystick" +msgstr "کايو بديق ماي تتڤ" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) Fixes the position of virtual joystick.\n" +"If disabled, virtual joystick will center to first-touch's position." +msgstr "" +"(Android) منتڤکن کدودوقن کايو بديق ماي.\n" +"جيک دلومڤوهکن⹁ کدودوقن تڠه اونتوق کايو بديق ماي اکن دتنتوکن برداسرکن کدودوقن " +"سنتوهن ڤرتام." + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers aux button" +msgstr "کايو بديق ماي مميچو بوتڠ aux" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) Use virtual joystick to trigger \"aux\" button.\n" +"If enabled, virtual joystick will also tap \"aux\" button when out of main " +"circle." +msgstr "" +"(Android) ݢوناکن کايو بديق ماي اونتوق ڤيچو بوتڠ \"aux\".\n" +"جيک دبوليهکن⹁ کايو بديق ماي جوݢ اکن منکن بوتڠ \"aux\" اڤابيلا براد دلوار " +"بولتن اوتام." + +#: src/settings_translation_file.cpp +msgid "Enable joysticks" +msgstr "ممبوليهکن کايو بديق" + +#: src/settings_translation_file.cpp +msgid "Joystick ID" +msgstr "ID کايو بديق" + +#: src/settings_translation_file.cpp +msgid "The identifier of the joystick to use" +msgstr "ڤڠنل ڤستي کايو بديق يڠ دݢوناکن" + +#: src/settings_translation_file.cpp +msgid "Joystick type" +msgstr "جنيس کايو بديق" + +#: src/settings_translation_file.cpp +msgid "The type of joystick" +msgstr "جنيس کايو بديق" + +#: src/settings_translation_file.cpp +msgid "Joystick button repetition interval" +msgstr "سلڠ ماس ڤڠاولڠن بوتڠ کايو بديق" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated events\n" +"when holding down a joystick button combination." +msgstr "" +"سلڠ ماس دالم ساءت⹁ دامبيل انتارا ڤريستيوا يڠ براولڠن\n" +"اڤابيلا منکن کومبيناسي بوتڠ کايو بديق." + +#: src/settings_translation_file.cpp +msgid "Joystick frustum sensitivity" +msgstr "کڤيکاءن فروستوم کايو بديق" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"ingame view frustum around." +msgstr "" +"کڤيکاءن ڤکسي کايو بديق اونتوق مڠݢرقکن\n" +"فروستوم ڤڠليهتن دالم ڤرماءينن." + +#: src/settings_translation_file.cpp +msgid "Forward key" +msgstr "ککونچي کدڤن" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مڠݢرقکن ڤماءين کدڤن.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Backward key" +msgstr "ککونچي کبلاکڠ" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"Will also disable autoforward, when active.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مڠݢرقکن ڤماءين کبلاکڠ.\n" +"جوݢ اکن ملومڤوهکن أوتوڤرݢرقن⹁ اڤابيلا اکتيف.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Left key" +msgstr "ککونچي ککيري" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مڠݢرقکن ڤماءين ککيري.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Right key" +msgstr "ککومچي ککانن" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مڠݢرقکن ڤماءين ککانن.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Jump key" +msgstr "ککونچي لومڤت" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق ملومڤت.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +msgstr "ککونچي سلينڤ" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مڽلينڤ.\n" +"جوݢ دݢوناکن اونتوق تورون باواه کتيک ممنجت دان دالم اءير جيک تتڤن " +"aux1_descends دلومڤوهکن.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "ککونچي اينۏينتوري" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق ممبوک اينۏينتوري.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Special key" +msgstr "ککونچي ايستيميوا" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق برݢرق ڤنتس دالم مود ڤرݢرقن ڤنتس.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Chat key" +msgstr "ککونچي سيمبڠ" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق ممبوک تتيڠکڤ سيمبڠ.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Command key" +msgstr "ککونچي ارهن" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق ممبوک تتيڠکڤ سيمبڠ اونتوق مناءيڤ ارهن.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type local commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق ممبوک تتيڠکڤ سيمبڠ اونتوق مناءيڤ ارهن تمڤتن.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "ککونچي جارق ڤميليهن" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منوݢول جارق ڤندڠن تيادا حد.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "ککونچي تربڠ" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منوݢول مود تربڠ.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Pitch move key" +msgstr "ککونچي ڤرݢرقن ڤيچ" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling pitch move mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منوݢول مود ڤرݢرقن ڤيچ.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "ککونچي ڤرݢرقن ڤنتس" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منوݢول مود ڤرݢرقن ڤنتس.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "ککونچي تمبوس بلوک" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منوݢول مود تمبوس بلوک.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar next key" +msgstr "ککونچي ايتم ستروسڽ دالم هوتبر" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the next item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه ايتم ستروسڽ ددالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar previous key" +msgstr "ککونچي ايتم سبلومڽ دالم هوتبر" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the previous item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه بارڠ سبلومڽ دهوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Mute key" +msgstr "ککونچي بيسو" + +#: src/settings_translation_file.cpp +msgid "" +"Key for muting the game.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق ممبيسوکن ڤرماءينن.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Inc. volume key" +msgstr "ککونچي کواتکن بوڽي" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مڠواتکن بوڽي.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Dec. volume key" +msgstr "ککونچي ڤرلاهنکن بوڽي" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق ممڤرلاهنکن بوڽي.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Automatic forward key" +msgstr "ککونچي أوتوڤرݢرقن" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling autoforward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منوݢول أوتوڤرݢرقن.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "ککونچي مود سينماتيک" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منوݢول مود سينماتيک.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "ککونچي ڤتا ميني" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منوݢول ڤاڤرن ڤتا ميني.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منڠکڤ ݢمبر لاير.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "ککونچي جاتوهکن ايتم" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منجاتوهکن ايتم يڠ سدڠ دڤيليه.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "View zoom key" +msgstr "ککونچي زوم ڤندڠن" + +#: src/settings_translation_file.cpp +msgid "" +"Key to use view zoom when possible.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مڠݢوناکن ڤندڠن زوم اڤابيلا دبنرکن.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 1 key" +msgstr "ککونچي سلوت هوتبر 1" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the first hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ڤرتام دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 2 key" +msgstr "ککونچي سلوت هوتبر 2" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the second hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-2 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 3 key" +msgstr "ککونچي سلوت هوتبر 3" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the third hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-3 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 4 key" +msgstr "ککونچي سلوت هوتبر 4" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fourth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-4 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 5 key" +msgstr "ککونچي سلوت هوتبر 5" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fifth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-5 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 6 key" +msgstr "ککونچي سلوت هوتبر 6" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the sixth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-6 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 7 key" +msgstr "ککونچي سلوت هوتبر 7" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the seventh hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-7 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 8 key" +msgstr "ککونچي سلوت هوتبر 8" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the eighth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-8 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 9 key" +msgstr "ککونچي سلوت هوتبر 9" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the ninth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-9 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 10 key" +msgstr "ککونچي سلوت هوتبر 10" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the tenth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-10 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 11 key" +msgstr "ککونچي سلوت هوتبر 11" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 11th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-11 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 12 key" +msgstr "ککونچي سلوت هوتبر 12" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 12th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-12 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 13 key" +msgstr "ککونچي سلوت هوتبر 13" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 13th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-13 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 14 key" +msgstr "ککونچي سلوت هوتبر 14" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 14th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-14 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 15 key" +msgstr "ککونچي سلوت هوتبر 15" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 15th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-15 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 16 key" +msgstr "ککونچي سلوت هوتبر 16" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 16th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-16 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 17 key" +msgstr "ککونچي سلوت هوتبر 17" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 17th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-17 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 18 key" +msgstr "ککونچي سلوت هوتبر 18" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 18th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-18 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 19 key" +msgstr "ککونچي سلوت هوتبر 19" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 19th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-19 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 20 key" +msgstr "ککونچي سلوت هوتبر 20" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 20th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-20 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 21 key" +msgstr "ککونچي سلوت هوتبر 21" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 21st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-21 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 22 key" +msgstr "ککونچي سلوت هوتبر 22" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 22nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-22 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 23 key" +msgstr "ککونچي سلوت هوتبر 23" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 23rd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-23 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 24 key" +msgstr "ککونچي سلوت هوتبر 24" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 24th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-24 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 25 key" +msgstr "ککونچي سلوت هوتبر 25" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 25th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-25 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 26 key" +msgstr "ککونچي سلوت هوتبر 26" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 26th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-26 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 27 key" +msgstr "ککونچي سلوت هوتبر 27" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 27th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-27 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 28 key" +msgstr "ککونچي سلوت هوتبر 28" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 28th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-28 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 29 key" +msgstr "ککونچي سلوت هوتبر 29" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 29th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-29 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 30 key" +msgstr "ککونچي سلوت هوتبر 30" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 30th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-30 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 31 key" +msgstr "ککونچي سلوت هوتبر 31" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 31st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-31 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 32 key" +msgstr "ککونچي سلوت هوتبر 32" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 32nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق مميليه سلوت ک-32 دالم هوتبر.\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "ککونچي منوݢول ڤاڤر ڤندو (HUD)" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" +"ککونچي اونتوق منوݢول ڤاڤر ڤندو (HUD).\n" +"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large chat console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the large chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camera update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-Game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic" +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 "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Method used to highlight selected object." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Digging particles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adds particles when digging a node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use mip mapping to scale 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 "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"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 "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +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 "" +"Shaders allow advanced visual effects and may increase performance on some " +"video\n" +"cards.\n" +"This only works with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shader path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to shader directory. If no path is defined, default location will be " +"used." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filmic tone mapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables Hable's 'Uncharted 2' filmic tone mapping.\n" +"Simulates the tone curve of photographic film and how this approximates the\n" +"appearance of high dynamic range images. Mid-range contrast is slightly\n" +"enhanced, highlights and shadows are gradually compressed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving liquids (like water).\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The maximum height of the surface of waving liquids.\n" +"4.0 = Wave height is two nodes.\n" +"0.0 = Wave doesn't move at all.\n" +"Default is 1.0 (1/2 node).\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wavelength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of liquid waves.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How fast liquid waves will move. Higher = faster.\n" +"If negative, liquid waves will move backwards.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +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 "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pause on lost window focus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Open the pause menu when the window's focus is lost. Does not pause if a " +"formspec is\n" +"open." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View distance in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Near plane" +msgstr "" + +#: src/settings_translation_file.cpp +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" +"Increasing can reduce artifacting on weaker GPUs.\n" +"0.1 = Default, 0.25 = Good value for weaker tablets." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autosave screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save window size automatically when modified." +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 "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VSync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Alters the light curve by applying 'gamma correction' to it.\n" +"Higher values make middle and lower light levels brighter.\n" +"Value '1.0' leaves the light curve unaltered.\n" +"This only has significant effect on daylight and artificial\n" +"light, it has very little effect on natural night light." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve low gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at minimum light level.\n" +"Controls the contrast of the lowest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve high gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at maximum light level.\n" +"Controls the contrast of the highest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Strength of light curve boost.\n" +"The 3 'boost' parameters define a range of the light\n" +"curve that is boosted in brightness." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost center" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Center of light curve boost range.\n" +"Where 0.0 is minimum light level, 1.0 is maximum light level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost spread" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Spread of light curve boost range.\n" +"Controls the width of the range to be boosted.\n" +"Standard deviation of the light curve boost Gaussian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The rendering back-end for Irrlicht.\n" +"A restart is required after changing this.\n" +"Note: On Android, stick with OGLES1 if unsure! App may fail to start " +"otherwise.\n" +"On other platforms, OpenGL is recommended, and it’s the only driver with\n" +"shader support currently." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable view bobbing and amount of view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side.\n" +"- crossview: Cross-eyed 3d\n" +"- pageflip: quadbuffer based 3d.\n" +"Note that the interlaced mode requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selection box lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Recent Chat Messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of recent chat messages to show" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD scale factor" +msgstr "فکتور سکالا ڤاڤر ڤندو (HUD)" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the hudbar elements." +msgstr "مڠاوبه سايز ايليمن ڤالڠ ڤاڤر ڤندو (hudbar)." + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Delay between mesh updates on the client in ms. Increasing this will slow\n" +"down the rate of mesh updates, thus reducing jitter on slower clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh 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" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Usable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables animation of inventory items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog start" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fraction of the visible distance at which fog starts to be rendered" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Opaque liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes all liquids opaque" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World-aligned textures mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Textures on a node may be aligned either to the node or to the world.\n" +"The former mode suits better things like machines, furniture, etc., while\n" +"the latter makes stairs and microblocks fit surroundings better.\n" +"However, as this possibility is new, thus may not be used by older servers,\n" +"this option allows enforcing it for certain node types. Note though that\n" +"that is considered EXPERIMENTAL and may not work properly." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World-aligned textures may be scaled to span several nodes. However,\n" +"the server may not send the scale you want, especially if you use\n" +"a specially-designed texture pack; with this option, the client tries\n" +"to determine the scale automatically basing on the texture size.\n" +"See also texture_min_size.\n" +"Warning: This option is EXPERIMENTAL!" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show entity selection boxes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale GUI by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"properly support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name to tooltip." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FreeType fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether FreeType fonts are used, requires FreeType support to be compiled " +"in.\n" +"If disabled, bitmap and XML vectors fonts are used instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font bold by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font italic by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shadow offset (in pixels) of the default font. If 0, then shadow will not be " +"drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the default font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Regular font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the default font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"The fallback font will be used if the font cannot be loaded." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the monospace font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the monospace font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font is used for e.g. the console and profiler screen." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the fallback font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not " +"be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path of the fallback font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font will be used for certain languages or if the default font is " +"unavailable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Font size of the recent chat text and chat prompt in point (pt).\n" +"Value 0 will use the default font size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to save screenshots at. Can be an absolute or relative path.\n" +"The folder will be created if it doesn't already exist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Format of screenshots." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot quality" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Screenshot quality. Only used for JPEG format.\n" +"1 means worst quality; 100 means best quality.\n" +"Use 0 for default quality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "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 "Enable console window" +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 "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables the sound system.\n" +"If disabled, this completely disables all sounds everywhere and the in-game\n" +"sound controls will be non-functional.\n" +"Changing this setting requires a restart." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Volume of all sounds.\n" +"Requires the sound system to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to mute sounds. You can unmute sounds at any time, unless the\n" +"sound system is disabled (enable_sound=false).\n" +"In-game, you can toggle the mute state with the mute key or by using the\n" +"pause menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable Lua modding support on client.\n" +"This support is experimental and API can change." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the\n" +"Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum size of the out chat queue" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum size of the out chat queue.\n" +"0 to disable queueing and -1 to make the queue size unlimited." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable register confirmation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable register confirmation when connecting to server.\n" +"If disabled, new account will be registered automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server / Singleplayer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce to this serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strip color codes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Remove color codes from incoming chat messages\n" +"Use this to stop players from being able to use color in their messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server.\n" +"Ignored if bind_address is set.\n" +"Needs enable_ipv6 to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneous block sends per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks that are simultaneously sent per client.\n" +"The maximum total count is calculated dynamically:\n" +"max_total = ceil((#clients + max_users) * per_client / 4)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay in sending blocks after building" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, 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 "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can be connected simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Creative" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable creative mode for new created maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Privileges that players with basic_privs can grant" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod channels support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +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 "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Format of player chat messages. The following strings are valid " +"placeholders:\n" +"@name, @message, @timestamp (optional)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes).\n" +"\n" +"Setting this larger than active_block_range will also cause the server\n" +"to maintain active objects up to this distance in the direction the\n" +"player is looking. (This can avoid mobs suddenly disappearing from view)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The radius of the volume of blocks around every player that is subject to " +"the\n" +"active block stuff, stated in mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run.\n" +"This is also the minimum range in which active objects (mobs) are " +"maintained.\n" +"This should be configured together with active_object_send_range_blocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples:\n" +"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World start time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time of day when a new world is started, in millihours (0-23999)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message max length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set the maximum character length of a chat message sent by clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message count limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amount of messages a player may send per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message kick threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Kick players who sent more than X messages per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration on ground or when climbing,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal acceleration in air when jumping or falling,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration in fast mode,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking and flying speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking, flying and climbing speed in fast mode, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical climbing speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Initial vertical speed when jumping, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Decrease this to increase liquid resistance to movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum liquid resistance. Controls deceleration when entering liquid at\n" +"high speed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sinking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls sinking speed in liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration of gravity, in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated Lua API calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over\n" +"network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block management interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between active block management cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ABM interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between Active Block Modifier (ABM) execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "NodeTimer interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between NodeTimer execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block send optimize distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"At this distance the server will aggressively optimize which blocks are sent " +"to\n" +"clients.\n" +"Small values potentially improve performance a lot, at the expense of " +"visible\n" +"rendering glitches (some blocks will not be rendered under water and in " +"caves,\n" +"as well as sometimes on land).\n" +"Setting this to a value greater than max_block_send_distance disables this\n" +"optimization.\n" +"Stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server side occlusion culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled the server will perform map block occlusion culling based on\n" +"on the eye position of the player. This can reduce the number of blocks\n" +"sent to the client 50-80%. The client will not longer receive most " +"invisible\n" +"so that the utility of noclip mode is reduced." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side modding restrictions" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Restricts the access of certain client-side functions on servers.\n" +"Combine the byteflags below to restrict client-side features, or set to 0\n" +"for no restrictions:\n" +"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n" +"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n" +"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n" +"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n" +"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n" +"csm_restriction_noderange)\n" +"READ_PLAYERINFO: 32 (disable get_player_names call client-side)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side node lookup range restriction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the CSM restriction for node range is enabled, get_node calls are " +"limited\n" +"to this distance from the player to the node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HTTP mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of mods that are allowed to access HTTP APIs, which\n" +"allow them to upload and download data to/from the internet." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Load the game profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Load the game profiler to collect game profiling data.\n" +"Provides a /profiler command to access the compiled profile.\n" +"Useful for mod developers and server operators." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default report format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The default format in which profiles are being saved,\n" +"when calling `/profiler save [format]` without format." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Report path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The file path relative to your worldpath in which profiles will be saved to." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrumentation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Entity methods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument the methods of entities on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Active Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Loading Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Loading Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chatcommands" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument chatcommands on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Global callbacks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument global callback functions on registration.\n" +"(anything you pass to a minetest.register_*() function)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Builtin" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument builtin.\n" +"This is usually only needed by core/builtin contributors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Have the profiler instrument itself:\n" +"* Instrument an empty function.\n" +"This estimates the overhead, that instrumentation is adding (+1 function " +"call).\n" +"* Instrument the sampler being used to update the statistics." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +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 "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log file size threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the file size of debug.txt exceeds the number of megabytes specified in\n" +"this setting when it is opened, the file is moved to debug.txt.1,\n" +"deleting an older debug.txt.1 if it exists.\n" +"debug.txt is only moved if this setting is positive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable IPv6 support (for both client and server).\n" +"Required for IPv6 connections to work at all." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Changes the main menu UI:\n" +"- Full: Multiple singleplayer worlds, game choice, texture pack chooser, " +"etc.\n" +"- Simple: One singleplayer world, no game or texture pack choosers. May " +"be\n" +"necessary for smaller screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Engine profiling data print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Print the engine's profiling data in regular intervals (in seconds).\n" +"0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this.\n" +"Current mapgens in a highly unstable state:\n" +"- The optional floatlands of v7 (disabled by default)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n" +"Only mapchunks completely within the mapgen limit are generated.\n" +"Value is stored per-world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" +"and junglegrass, in all other mapgens this flag controls all decorations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome API temperature and humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Temperature variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale temperature variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale humidity variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen v5." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls width of tunnels, a smaller value creates wider tunnels.\n" +"Value >= 10.0 completely disables generation of tunnels and avoids the\n" +"intensive noise calculations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of upper limit of large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave proportion flooded" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of cavern upper limit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern taper" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-distance over which caverns expand to full size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines full size of caverns, smaller values create larger caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noises" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of biome filler depth." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Factor noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Variation of terrain vertical scale.\n" +"When noise is < -0.55 terrain is near-flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of average terrain surface." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise that determines number of dungeons per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v6.\n" +"The 'snowbiomes' flag enables the new 5 biome system.\n" +"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" +"the 'jungles' flag is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desert noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Deserts occur when np_biome exceeds this value.\n" +"When the 'snowbiomes' flag is enabled, this is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sandy beaches occur when np_beach exceeds this value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain base noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of lower terrain and seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain higher noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of higher terrain that creates cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Steepness noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height select noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mud noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies depth of biome surface nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas with sandy beaches." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of number of caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines tree areas and tree density." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Apple trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas where trees have apples." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v7.\n" +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain zero level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y of mountain density gradient zero level. Used to shift mountains " +"vertically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y-distance over which floatlands taper from full density to nothing.\n" +"Tapering starts at this distance from the Y limit.\n" +"For a solid floatland layer, this controls the height of hills/mountains.\n" +"Must be less than or equal to half the distance between the Y limits." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\n" +"Value = 1.0 creates a uniform, linear tapering.\n" +"Values > 1.0 create a smooth tapering suitable for the default separated\n" +"floatlands.\n" +"Values < 1.0 (for example 0.25) create a more defined surface level with\n" +"flatter lowlands, suitable for a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "" + +#: src/settings_translation_file.cpp +#, c-format +msgid "" +"Adjusts the density of the floatland layer.\n" +"Increase value to increase density. Can be positive or negative.\n" +"Value = 0.0: 50% of volume is floatland.\n" +"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" +"to be sure) creates a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Surface level of optional water placed on a solid floatland layer.\n" +"Water is disabled by default and will only be placed if this value is set\n" +"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n" +"upper tapering).\n" +"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n" +"When enabling water placement the floatlands must be configured and tested\n" +"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n" +"required value depending on 'mgv7_np_floatland'), to avoid\n" +"server-intensive extreme water flow and to avoid vast flooding of the\n" +"world surface below." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain alternative noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain persistence noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Varies roughness of terrain.\n" +"Defines the 'persistence' value for terrain_base and terrain_alt noises." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain and steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of maximum mountain height (in nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge underwater noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines large-scale river channel structure." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining mountain structure and height.\n" +"Also defines structure of floatland mountain terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining structure of river canyon walls." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining structure of floatlands.\n" +"If altered from the default, the noise 'scale' (0.7 by default) may need\n" +"to be adjusted, as floatland tapering functions best when this noise has\n" +"a value range of approximately -2.0 to 2.0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen Carpathian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the base ground level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the depth of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River valley width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river valley." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness3 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Third of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness4 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fourth of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hills spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of ridged mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of step mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hill size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridged mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of ridged mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of step mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that locates the river valleys and channels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain variation noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Flat.\n" +"Occasional lakes and hills can be added to the flat world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of flat ground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for lakes.\n" +"Controls proportion of world area covered by lakes.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/depth of lake depressions." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for hills.\n" +"Controls proportion of world area covered by hills.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/height of hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines location and terrain of optional hills and lakes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Fractal.\n" +"'terrain' enables the generation of non-fractal terrain:\n" +"ocean, islands and underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fractal type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Selects one of 18 fractal types.\n" +"1 = 4D \"Roundy\" Mandelbrot set.\n" +"2 = 4D \"Roundy\" Julia set.\n" +"3 = 4D \"Squarry\" Mandelbrot set.\n" +"4 = 4D \"Squarry\" Julia set.\n" +"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n" +"6 = 4D \"Mandy Cousin\" Julia set.\n" +"7 = 4D \"Variation\" Mandelbrot set.\n" +"8 = 4D \"Variation\" Julia set.\n" +"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n" +"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n" +"11 = 3D \"Christmas Tree\" Mandelbrot set.\n" +"12 = 3D \"Christmas Tree\" Julia set.\n" +"13 = 3D \"Mandelbulb\" Mandelbrot set.\n" +"14 = 3D \"Mandelbulb\" Julia set.\n" +"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n" +"16 = 3D \"Cosine Mandelbulb\" Julia set.\n" +"17 = 4D \"Mandelbulb\" Mandelbrot set.\n" +"18 = 4D \"Mandelbulb\" Julia set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Iterations of the recursive function.\n" +"Increasing this increases the amount of fine detail, but also\n" +"increases processing load.\n" +"At iterations = 20 this mapgen has a similar load to mapgen V7." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) scale of fractal in nodes.\n" +"Actual fractal size will be 2 to 3 times larger.\n" +"These numbers can be made very large, the fractal does\n" +"not have to fit inside the world.\n" +"Increase these to 'zoom' into the detail of the fractal.\n" +"Default is for a vertically-squashed shape suitable for\n" +"an island, set all 3 numbers equal for the raw shape." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n" +"Can be used to move a desired point to (0, 0) to create a\n" +"suitable spawn point, or to allow 'zooming in' on a desired\n" +"point by increasing 'scale'.\n" +"The default is tuned for a suitable spawn point for Mandelbrot\n" +"sets with default parameters, it may need altering in other\n" +"situations.\n" +"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slice w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"W coordinate of the generated 3D slice of a 4D fractal.\n" +"Determines which 3D slice of the 4D shape is generated.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia x" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"X component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Y component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia z" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Z component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"W component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Seabed noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Valleys.\n" +"'altitude_chill': Reduces heat with altitude.\n" +"'humid_rivers': Increases humidity around rivers.\n" +"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n" +"to become shallower and occasionally dry.\n" +"'altitude_dry': Reduces humidity with altitude." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n" +"enabled. Also the vertical distance over which humidity drops by 10 if\n" +"'altitude_dry' is enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern upper limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How deep to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How wide to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #1" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #2" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The depth of dirt or other biome filler node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base terrain height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Raises terrain to make valleys around the rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley fill" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slope and fill work together to modify the heights." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley profile" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amplifies the valleys." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley slope" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n" +"WARNING!: There is no benefit, and there are several dangers, in\n" +"increasing this value above 5.\n" +"Reducing this value increases cave and dungeon density.\n" +"Altering this value is for special usage, leaving it unchanged is\n" +"recommended." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug information." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of queued blocks to emerge" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use.\n" +"Value 0:\n" +"- Automatic selection. The number of emerge threads will be\n" +"- 'number of processors - 2', with a lower limit of 1.\n" +"Any other value:\n" +"- Specifies the number of emerge threads, with a lower limit of 1.\n" +"WARNING: Increasing the number of emerge threads increases engine mapgen\n" +"speed, but this may harm game performance by interfering with other\n" +"processes, especially in singleplayer and/or when running Lua code in\n" +"'on_generated'. For many users the optimum setting may be '1'." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Online Content Repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The URL for the content repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of flags to hide in the content repository.\n" +"\"nonfree\" can be used to hide packages which do not qualify as 'free " +"software',\n" +"as defined by the Free Software Foundation.\n" +"You can also specify content ratings.\n" +"These flags are independent from Minetest versions,\n" +"so see a full list at https://content.minetest.net/help/content_flags/" +msgstr "" diff -Nru minetest-5.2.0/po/my/minetest.po minetest-5.3.0/po/my/minetest.po --- minetest-5.2.0/po/my/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/my/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Burmese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-01-11 18:26+0000\n" "Last-Translator: rubenwardy \n" "Language-Team: Burmese 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 "FPS in pause menu" msgstr "" @@ -2846,6 +3056,34 @@ 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 "Fly key" msgstr "" @@ -2899,6 +3137,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4194,14 +4438,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4265,6 +4501,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4331,7 +4571,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4419,10 +4661,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4490,13 +4728,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4581,6 +4819,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4739,9 +4981,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4818,10 +5057,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4831,7 +5066,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4865,6 +5102,14 @@ 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 "" @@ -4933,6 +5178,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5371,6 +5628,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5393,6 +5657,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5404,15 +5672,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5529,7 +5807,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5682,6 +5960,10 @@ 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 "" @@ -6001,6 +6283,14 @@ 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 "" diff -Nru minetest-5.2.0/po/nb/minetest.po minetest-5.3.0/po/nb/minetest.po --- minetest-5.2.0/po/nb/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/nb/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Norwegian Bokmål (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-03-31 10:14+0000\n" -"Last-Translator: Liet Kynes \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-18 13:41+0000\n" +"Last-Translator: Allan Nordhøy \n" "Language-Team: Norwegian Bokmål \n" "Language: nb\n" @@ -12,7 +12,7 @@ "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.0-dev\n" +"X-Generator: Weblate 4.1.1-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,6 +22,10 @@ msgid "You died" msgstr "Du døde" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Det oppstod en feil i et Lua-skript:" @@ -35,10 +39,6 @@ msgstr "Hovedmeny" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Okei" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Koble til på nytt" @@ -111,10 +111,14 @@ "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." msgstr "" -"Kunne ikke aktivere mod \"$1\" fordi den inneholder ugyldige tegn. Kun " +"Kunne ikke aktivere modden «$1» fordi den inneholder ugyldige tegn. Kun " "tegnene [a-z0-9_] er tillatt." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" @@ -161,16 +165,17 @@ msgstr "Alle pakker" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Tilbake" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Tilbake til hovedmeny" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Laster ned og installerer $1, vent…" +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Downloading..." +msgstr "Laster..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -215,15 +220,57 @@ msgid "Update" msgstr "Oppdater" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "En verden med navn \"$1\" eksisterer allerede" #: 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 "Temperaturen synker med stigende høyde" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Altitude dry" +msgstr "Temperaturen synker med stigende høyde" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biome blending" +msgstr "Biotoplyd" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biomes" +msgstr "Biotoplyd" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caverns" +msgstr "Grottelyd" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caves" +msgstr "Oktaver" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Opprett" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "Informasjon:" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Last ned et spill, for eksempel Minetest Game, fra minetest.net" @@ -231,25 +278,149 @@ msgid "Download one from minetest.net" msgstr "Last ned en fra minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Dungeons" +msgstr "Grottelyd" + +#: 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 src/settings_translation_file.cpp msgid "Game" msgstr "Spill" +#: 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 +#, fuzzy +msgid "Humid rivers" +msgstr "Videodriver" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +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 "Mapgen" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Mapgen-specific flags" +msgstr "Mapgen" + +#: 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 "Intet spill valgt" #: 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 +#, fuzzy +msgid "Rivers" +msgstr "Elvestørrelse" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Seed" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Vary river depth" +msgstr "Elvedybde" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "Advarsel: Den minimale utviklingstesten er tiltenkt utviklere." #: builtin/mainmenu/dlg_create_world.lua @@ -470,8 +641,9 @@ msgstr "Klarte ikke å installere mod som en $1" #: builtin/mainmenu/pkgmgr.lua +#, fuzzy msgid "Unable to install a modpack as a $1" -msgstr "Klarte ikke å installere en modpack som $2" +msgstr "Klarte ikke å installere en modpakke som $1" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" @@ -562,6 +734,10 @@ msgstr "Vertstjener" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Navn/passord" @@ -856,7 +1032,7 @@ #: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." -msgstr "Intet å gjøre. Ingen verden valgt og ingen adresse oppgitt." +msgstr "Intet å gjøre. Ingen verden valgt og ingen adresse oppgitt." #: src/client/clientlauncher.cpp msgid "Player name too long." @@ -1217,6 +1393,14 @@ msgstr "Lyd av" #: 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 "Lyd på" @@ -1248,7 +1432,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "ok" @@ -1857,6 +2041,10 @@ msgstr "3D-modus" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "3D-støytall som definerer kjempegrotter." @@ -1869,6 +2057,14 @@ "Definerer også fjellterrengstruktur på luftøyer." #: 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 "3D-støytall som definerer strukturen til sidene i en elvekløft." @@ -1931,7 +2127,7 @@ msgstr "ABM-intervall" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp @@ -1983,6 +2179,16 @@ "skjermer." #: 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 "Advanced" msgstr "Avansert" @@ -2001,10 +2207,6 @@ "belysning - det har lite å si for naturlig nattelys." #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "Temperaturen synker med stigende høyde" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "Alltid flymodus og rask forflytning" @@ -2277,10 +2479,20 @@ "nødvendig på mindre skjermer." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "Skriftstørrelse" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Skydretast" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "Loggingsnivå for feilsøking" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "Maks antall meldinger i chatten" @@ -2564,6 +2776,11 @@ msgstr "Forvalgt rapporteringsformat" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Forvalgt spill" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2876,6 +3093,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "" @@ -2988,6 +3215,38 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Maksimum y-verdi for grotter" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Minimum y-verdi for grotter" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Bakkestøy" + +#: 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 +#, fuzzy +msgid "Floatland water level" +msgstr "Vannivå" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Flygingstast" @@ -3041,6 +3300,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4502,14 +4767,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4574,6 +4831,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Y-verdi for store grotters øvre grense." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Skript for hovedmeny" @@ -4641,7 +4903,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4735,10 +4999,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4806,13 +5066,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4899,6 +5159,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Minikart" @@ -5057,9 +5321,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5136,10 +5397,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5149,8 +5406,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Filsti til lagring av skjermdumper." +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 "" @@ -5183,6 +5442,14 @@ 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 "Fysikk" @@ -5252,6 +5519,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5705,6 +5984,13 @@ "Filer som ikke er til stede hentes på den vanlige måten." #: 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 #, fuzzy msgid "" "Spread of light curve boost range.\n" @@ -5732,6 +6018,10 @@ msgstr "Spredningsstøy for bratt fjell" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5743,15 +6033,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5874,7 +6174,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6031,6 +6331,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Y-verdi for store grotters øvre grense." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Bruk 3D-skyer i stedet for flate." @@ -6361,6 +6666,14 @@ msgstr "Y-avstand som en grotte kan øke i størrelse til full størrelse." #: 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 "Y-nivå for gjennomsnittlig terrengoverflate." @@ -6392,20 +6705,32 @@ msgid "cURL timeout" msgstr "cURL-tidsgrense" -#~ msgid "Enable VBO" -#~ msgstr "Aktiver VBO" +#~ msgid "Select Package File:" +#~ msgstr "Velg pakkefil:" -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Aktiver filmatisk toneoversettelse" +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Y-verdi for øvre grense for lava i store grotter." + +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Hvilket Y-nivå som skyggen til luftøyer når." #~ msgid "IPv6 support." #~ msgstr "IPv6-støtte." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Hvilket Y-nivå som skyggen til luftøyer når." +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Aktiver filmatisk toneoversettelse" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Y-verdi for øvre grense for lava i store grotter." +#~ msgid "Enable VBO" +#~ msgstr "Aktiver VBO" -#~ msgid "Select Package File:" -#~ msgstr "Velg pakkefil:" +#~ msgid "Path to save screenshots at." +#~ msgstr "Filsti til lagring av skjermdumper." + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Laster ned og installerer $1, vent…" + +#~ msgid "Back" +#~ msgstr "Tilbake" + +#~ msgid "Ok" +#~ msgstr "Okei" diff -Nru minetest-5.2.0/po/nl/minetest.po minetest-5.3.0/po/nl/minetest.po --- minetest-5.2.0/po/nl/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/nl/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Dutch (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-08 20:47+0000\n" +"Last-Translator: sfan5 \n" "Language-Team: Dutch \n" "Language: nl\n" @@ -12,7 +12,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.9-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -20,15 +20,17 @@ #: builtin/client/death_formspec.lua src/client/game.cpp msgid "You died" -msgstr "Je stierf" +msgstr "Je bent gestorven" + +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "Oke" #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred in a Lua script:" -msgstr "Er is een fout opgetreden in een Lua script, zoals dat van een mod:" +msgstr "Er is een fout opgetreden in een Lua script:" #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred:" msgstr "Er is een fout opgetreden:" @@ -37,10 +39,6 @@ msgstr "Hoofdmenu" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Oké" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Opnieuw verbinding maken" @@ -117,31 +115,32 @@ "Enkel [a-z0-9_] zijn toegestaan." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Zoek Meer Mods" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No (optional) dependencies" -msgstr "Optionele afhankelijkheden:" +msgstr "Geen (optionele) afhankelijkheden" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." -msgstr "Geen mod-beschrijving aanwezig." +msgstr "Geen spelbeschrijving aanwezig." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No hard dependencies" -msgstr "Geen afhankelijkheden." +msgstr "Geen afhankelijkheden" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "Geen mod-beschrijving aanwezig." +msgstr "Geen modpack-beschrijving aanwezig." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No optional dependencies" -msgstr "Optionele afhankelijkheden:" +msgstr "Geen optionele afhankelijkheden" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" @@ -165,16 +164,17 @@ msgstr "Alle pakketten" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Terug" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Terug naar hoofdmenu" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "$1 wordt gedownload, een ogenblik geduld alstublieft..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" +"ContentDB is niet beschikbaar wanneer Minetest compileert is zonder cURL" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "Downloaden..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -219,15 +219,58 @@ msgid "Update" msgstr "Update" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Een wereld met de naam \"$1\" bestaat al" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +#, fuzzy +msgid "Altitude chill" +msgstr "Temperatuurverschil vanwege hoogte" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Altitude dry" +msgstr "Temperatuurverschil vanwege hoogte" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biome blending" +msgstr "Biome-ruis" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biomes" +msgstr "Biome-ruis" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caverns" +msgstr "Grot ruis" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caves" +msgstr "Octaven" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Maak aan" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "Per soort" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Download een subspel, zoals Minetest Game, van minetest.net" @@ -235,25 +278,153 @@ msgid "Download one from minetest.net" msgstr "Laad er een van minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Dungeons" +msgstr "Kerker ruis" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Floating landmasses in the sky" +msgstr "Drijvend gebergte dichtheid" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Floatlands (experimental)" +msgstr "Waterniveau" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Spel" +#: 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 +#, fuzzy +msgid "Humid rivers" +msgstr "Video driver" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +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 "Wereldgenerator" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Wereldgenerator vlaggen" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Mapgen-specific flags" +msgstr "Vlaggen" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Mountains" +msgstr "Bergen ruis" + +#: 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 "Geen spel geselecteerd" #: 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 +#, fuzzy +msgid "Rivers" +msgstr "Grootte van rivieren" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Kiemgetal" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Terrain surface erosion" +msgstr "Terrein hoogte" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Vary river depth" +msgstr "Diepte van rivieren" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "" "Waarschuwing: Het minimale ontwikkellaars-test-spel is bedoeld voor " "ontwikkelaars." @@ -297,13 +468,12 @@ msgstr "Modverzameling hernoemen:" #: builtin/mainmenu/dlg_rename_modpack.lua -#, fuzzy msgid "" "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." msgstr "" -"Deze modverzameling heeft een andere naam in modpack.conf wat hernoemen hier " -"zal overschrijven." +"Deze modpack heeft een expliciete naam gegeven in zijn modpack.conf die elke " +"hernoeming hier zal overschrijven." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" @@ -367,7 +537,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select directory" -msgstr "Selecteer folder" +msgstr "Selecteer map" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select file" @@ -415,14 +585,14 @@ #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "absvalue" -msgstr "" +msgstr "absolute waarde" #. ~ "defaults" is a noise parameter flag. #. It describes the default processing options #. for noise settings in main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "defaults" -msgstr "Standaard" +msgstr "standaard" #. ~ "eased" is a noise parameter flag. #. It is used to make the map smoother and @@ -433,29 +603,25 @@ msgstr "makkelijker" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "$1 (Enabled)" -msgstr "Ingeschakeld" +msgstr "$1 (Ingeschakeld)" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "$1 mods" -msgstr "3D modus" +msgstr "$1 mods" #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" msgstr "Installeren van mod $1 in $2 is mislukt" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install Mod: Unable to find real mod name for: $1" -msgstr "Mod installeren: kan de echte modnaam niet vinden voor: $1" +msgstr "Mod installeren: kan de echte mod-naam niet vinden voor: $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -"Mod installeren: kan geen geschikte map-naam vinden voor modverzameling $1" +"Mod installeren: kan geen geschikte map naam vinden voor mod verzameling $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install: Unsupported file type \"$1\" or broken archive" @@ -471,21 +637,19 @@ #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" -msgstr "Niet mogelijk om een $1 als textuuren pakket te installeren" +msgstr "Kan $1 niet als textuurpakket installeren" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to install a game as a $1" msgstr "Installeren van een spel als $1 mislukt" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a mod as a $1" msgstr "Installeren van mod $1 in $2 is mislukt" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a modpack as a $1" -msgstr "Installeren van mod $1 in $2 is mislukt" +msgstr "Installeren van mod verzameling $1 in $2 is mislukt" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" @@ -496,9 +660,8 @@ msgstr "Inhoud" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Disable Texture Pack" -msgstr "Selecteer textuurverzameling:" +msgstr "Uitschakelen Textuurverzameling" #: builtin/mainmenu/tab_content.lua msgid "Information:" @@ -513,23 +676,20 @@ msgstr "Geen afhankelijkheden." #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "No package description available" -msgstr "Geen mod-beschrijving aanwezig" +msgstr "Geen pakketbeschrijving beschikbaar" #: builtin/mainmenu/tab_content.lua msgid "Rename" msgstr "Hernoemen" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Uninstall Package" -msgstr "Geselecteerde mod deïnstalleren" +msgstr "Pakket verwijderen" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Use Texture Pack" -msgstr "Textuurverzamelingen" +msgstr "Gebruik textuurverzamelingen" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" @@ -580,6 +740,10 @@ msgstr "Server Hosten" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Naam / Wachtwoord" @@ -592,7 +756,6 @@ msgstr "Geen wereldnaam opgegeven of geen wereld aangemaakt!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Play Game" msgstr "Spel Spelen" @@ -605,9 +768,8 @@ msgstr "Selecteer Wereld:" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Server Port" -msgstr "Server-poort" +msgstr "Server Poort" #: builtin/mainmenu/tab_local.lua msgid "Start Game" @@ -627,7 +789,7 @@ #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" -msgstr "Verwondingen aangeschakeld" +msgstr "Verwondingen ingeschakeld" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Del. Favorite" @@ -638,9 +800,8 @@ msgstr "Favorieten" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Join Game" -msgstr "Spel Hosten" +msgstr "Join spel" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Name / Password" @@ -653,7 +814,7 @@ #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "PvP enabled" -msgstr "Spelergevechten aangeschakeld" +msgstr "Spelergevechten ingeschakeld" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -672,9 +833,8 @@ msgstr "8x" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "All Settings" -msgstr "Instellingen" +msgstr "Alle Instellingen" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" @@ -685,9 +845,8 @@ msgstr "Weet je zeker dat je je wereld wilt resetten?" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Autosave Screen Size" -msgstr "Scherm afmetingen automatisch bewaren" +msgstr "Schermafmetingen automatisch bewaren" #: builtin/mainmenu/tab_settings.lua msgid "Bilinear Filter" @@ -710,9 +869,8 @@ msgstr "Mooie bladeren" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Generate Normal Maps" -msgstr "Genereer normaalmappen" +msgstr "Genereer normale werelden" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -768,7 +926,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Screen:" -msgstr "Schermafbeelding:" +msgstr "Scherm:" #: builtin/mainmenu/tab_settings.lua msgid "Settings" @@ -780,7 +938,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" -msgstr "" +msgstr "Shaders (niet beschikbaar)" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" @@ -803,9 +961,8 @@ msgstr "Tone-mapping" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Touchthreshold: (px)" -msgstr "Toetsgrenswaarde (px)" +msgstr "Toetsgrenswaarde: (px)" #: builtin/mainmenu/tab_settings.lua msgid "Trilinear Filter" @@ -816,9 +973,8 @@ msgstr "Bewegende bladeren" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Waving Liquids" -msgstr "Bewegende nodes" +msgstr "Golvende Vloeistoffen" #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" @@ -858,7 +1014,7 @@ #: src/client/client.cpp msgid "Loading textures..." -msgstr "Bezig met texturen te laden..." +msgstr "Texturen laden..." #: src/client/client.cpp msgid "Rebuilding shaders..." @@ -886,7 +1042,7 @@ #: src/client/clientlauncher.cpp msgid "Player name too long." -msgstr "Spelernaam is te lang." +msgstr "Speler-naam is te lang." #: src/client/clientlauncher.cpp msgid "Please choose a name!" @@ -894,7 +1050,7 @@ #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " -msgstr "" +msgstr "Opgegeven wachtwoordbestand kan niet worden geopend: " #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " @@ -909,7 +1065,6 @@ #. non-Latin script, like Chinese. #. When in doubt, test your translation. #: src/client/fontengine.cpp -#, fuzzy msgid "needs_fallback_font" msgstr "no" @@ -922,16 +1077,14 @@ "Kijk in debug.txt voor details." #: src/client/game.cpp -#, fuzzy msgid "- Address: " -msgstr "Lokaal server-adres " +msgstr "- Adres: " #: src/client/game.cpp msgid "- Creative Mode: " msgstr "- Creatieve Modus: " #: src/client/game.cpp -#, fuzzy msgid "- Damage: " msgstr "- Verwondingen: " @@ -944,9 +1097,8 @@ msgstr "- Poort: " #: src/client/game.cpp -#, fuzzy msgid "- Public: " -msgstr "- Publiek: " +msgstr "- Openbaar: " #. ~ PvP = Player versus Player #: src/client/game.cpp @@ -958,42 +1110,36 @@ msgstr "- Server Naam: " #: src/client/game.cpp -#, fuzzy msgid "Automatic forward disabled" -msgstr "Vooruit toets" +msgstr "Automatisch vooruit uitgeschakeld" #: src/client/game.cpp -#, fuzzy msgid "Automatic forward enabled" -msgstr "Vooruit toets" +msgstr "Automatisch vooruit ingeschakeld" #: src/client/game.cpp -#, fuzzy msgid "Camera update disabled" -msgstr "Toets voor cameraverversing aan/uit" +msgstr "Camera-update uitgeschakeld" #: src/client/game.cpp -#, fuzzy msgid "Camera update enabled" -msgstr "Toets voor cameraverversing aan/uit" +msgstr "Camera-update ingeschakeld" #: src/client/game.cpp msgid "Change Password" msgstr "Verander wachtwoord" #: src/client/game.cpp -#, fuzzy msgid "Cinematic mode disabled" -msgstr "Cinematic modus aan/uit toets" +msgstr "Filmische modus uitgeschakeld" #: src/client/game.cpp -#, fuzzy msgid "Cinematic mode enabled" -msgstr "Cinematic modus aan/uit toets" +msgstr "Filmische modus ingeschakeld" #: src/client/game.cpp msgid "Client side scripting is disabled" -msgstr "" +msgstr "Client-side scripting is uitgeschakeld" #: src/client/game.cpp msgid "Connecting to server..." @@ -1004,7 +1150,7 @@ msgstr "Verder spelen" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1021,22 +1167,24 @@ "- Mouse wheel: select item\n" "- %s: chat\n" msgstr "" -"Standaard toetsen:\n" -"- W,A,S,D: bewegen\n" -"- Spatie: spring/klim\n" -"- Shift: kruip/duik\n" -"- Q: item weggooien\n" -"- I: rugzak\n" -"- Muis: draaien/kijken\n" -"- Linker muisknop: graaf/sla\n" -"- Rechter muisknop: plaats/gebruik\n" -"- Muiswiel: selecteer item\n" -"- T: chatten\n" +"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: sluip / ga naar beneden \n" +"-%s: drop item \n" +"-%s: inventaris \n" +"- Muis: draaien / kijken \n" +"- Muis links: graven / stoten \n" +"- Muis rechts: plaats / gebruik \n" +"- Muiswiel: item selecteren \n" +"-%s: chat\n" #: src/client/game.cpp -#, fuzzy msgid "Creating client..." -msgstr "Bezig cliënt te maken..." +msgstr "Gebruiker aanmaken..." #: src/client/game.cpp msgid "Creating server..." @@ -1044,16 +1192,15 @@ #: src/client/game.cpp msgid "Debug info and profiler graph hidden" -msgstr "" +msgstr "Debug info en profiler grafiek verborgen" #: src/client/game.cpp -#, fuzzy msgid "Debug info shown" -msgstr "Toets voor aan/uitzetten debug informatie" +msgstr "Debug informatie weergegeven" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "" +msgstr "Debug info, profiler grafiek en wireframe verborgen" #: src/client/game.cpp msgid "" @@ -1081,15 +1228,15 @@ "- aanraken stapel of vak:\n" " --> stapel verplaatsen\n" "- aanraken & slepen, tik met tweede vinger\n" -" --> plaats enkel object in vak\n" +" --> plaats enkel object in vak\n" #: src/client/game.cpp msgid "Disabled unlimited viewing range" -msgstr "" +msgstr "Oneindige kijkafstand uitgezet" #: src/client/game.cpp msgid "Enabled unlimited viewing range" -msgstr "" +msgstr "Oneindige kijkafstand aangezet" #: src/client/game.cpp msgid "Exit to Menu" @@ -1100,42 +1247,36 @@ msgstr "Afsluiten" #: src/client/game.cpp -#, fuzzy msgid "Fast mode disabled" -msgstr "Snelheid in snelle modus" +msgstr "Snelle modus uitgeschakeld" #: src/client/game.cpp -#, fuzzy msgid "Fast mode enabled" -msgstr "Snelheid in snelle modus" +msgstr "Snelle modus ingeschakeld" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "" +msgstr "Snelle modus ingeschakeld (let op: geen 'fast' recht)" #: src/client/game.cpp -#, fuzzy msgid "Fly mode disabled" -msgstr "Snelheid in snelle modus" +msgstr "Vlieg modus uitgeschakeld" #: src/client/game.cpp -#, fuzzy msgid "Fly mode enabled" -msgstr "Verwondingen aangeschakeld" +msgstr "Vlieg modus ingeschakeld" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "" +msgstr "Vliegmodus ingeschakeld (let op: geen 'fly'-privilege)" #: src/client/game.cpp -#, fuzzy msgid "Fog disabled" -msgstr "MP uitschakelen" +msgstr "Mist uitgeschakeld" #: src/client/game.cpp -#, fuzzy msgid "Fog enabled" -msgstr "aangeschakeld" +msgstr "Mist ingeschakeld" #: src/client/game.cpp msgid "Game info:" @@ -1146,9 +1287,8 @@ msgstr "Spel gepauzeerd" #: src/client/game.cpp -#, fuzzy msgid "Hosting server" -msgstr "Bezig server te maken..." +msgstr "Server maken" #: src/client/game.cpp msgid "Item definitions..." @@ -1168,49 +1308,47 @@ #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" -msgstr "" +msgstr "Mini-kaart momenteel uitgeschakeld door spel of mod" #: src/client/game.cpp -#, fuzzy msgid "Minimap hidden" -msgstr "Mini-kaart toets" +msgstr "Mini-kaart verborgen" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x1" -msgstr "" +msgstr "Mini-kaart in radar modus, Zoom x1" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x2" -msgstr "" +msgstr "Mini-kaart in radar modus, Zoom x2" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x4" -msgstr "" +msgstr "Mini-kaart in radar modus, Zoom x4" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x1" -msgstr "" +msgstr "Minimap in oppervlaktemodus, Zoom x1" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x2" -msgstr "" +msgstr "Minimap in oppervlaktemodus, Zoom x2" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x4" -msgstr "" +msgstr "Minimap in oppervlaktemodus, Zoom x4" #: src/client/game.cpp msgid "Noclip mode disabled" -msgstr "" +msgstr "Noclip-modus uitgeschakeld" #: src/client/game.cpp -#, fuzzy msgid "Noclip mode enabled" -msgstr "Verwondingen aangeschakeld" +msgstr "Noclip-modus ingeschakeld" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "" +msgstr "Noclip-modus ingeschakeld (opmerking: geen 'noclip' recht)" #: src/client/game.cpp msgid "Node definitions..." @@ -1218,28 +1356,27 @@ #: src/client/game.cpp msgid "Off" -msgstr "Uitgeschakeld" +msgstr "Uit" #: src/client/game.cpp msgid "On" -msgstr "Ingeschakeld" +msgstr "Aan" #: src/client/game.cpp msgid "Pitch move mode disabled" -msgstr "" +msgstr "Pitch move-modus uitgeschakeld" #: src/client/game.cpp msgid "Pitch move mode enabled" -msgstr "" +msgstr "Pitch move-modus ingeschakeld" #: src/client/game.cpp msgid "Profiler graph shown" -msgstr "" +msgstr "Profiler-grafiek weergegeven" #: src/client/game.cpp -#, fuzzy msgid "Remote server" -msgstr "Poort van externe server" +msgstr "Externe server" #: src/client/game.cpp msgid "Resolving address..." @@ -1258,73 +1395,78 @@ msgstr "Geluidsvolume" #: src/client/game.cpp -#, fuzzy msgid "Sound muted" -msgstr "Geluidsvolume" +msgstr "Geluid gedempt" + +#: 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 -#, fuzzy msgid "Sound unmuted" -msgstr "Geluidsvolume" +msgstr "Geluid niet gedempt" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d" -msgstr "Volume veranderd naar %d1%%2" +msgstr "Kijkbereik gewijzigd naar %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range is at maximum: %d" -msgstr "Minimale zichtafstand" +msgstr "Het kijkbereik is maximaal: %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range is at minimum: %d" -msgstr "Minimale zichtafstand" +msgstr "Het kijkbereik is minimaal: %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Volume changed to %d%%" -msgstr "Volume veranderd naar %d1%%2" +msgstr "Volume gewijzigd naar %d%%" #: src/client/game.cpp +#, fuzzy msgid "Wireframe shown" -msgstr "" +msgstr "Draadframe weergegeven" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" -msgstr "" +msgstr "Zoom momenteel uitgeschakeld door game of mod" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "oké" #: src/client/gameui.cpp -#, fuzzy msgid "Chat hidden" -msgstr "Chat-toets" +msgstr "Chat verborgen" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "" +msgstr "Chat weergegeven" #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "" +msgstr "HUD verborgen" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "" +msgstr "HUD getoond" #: src/client/gameui.cpp -#, fuzzy msgid "Profiler hidden" -msgstr "Profiler" +msgstr "Profiler verborgen" #: src/client/gameui.cpp #, c-format msgid "Profiler shown (page %d of %d)" -msgstr "" +msgstr "Profiler getoond (pagina %d van %d)" #: src/client/keycode.cpp msgid "Apps" @@ -1356,7 +1498,6 @@ msgstr "Einde" #: src/client/keycode.cpp -#, fuzzy msgid "Erase EOF" msgstr "Verwijder EOF" @@ -1373,19 +1514,16 @@ msgstr "Home" #: src/client/keycode.cpp -#, fuzzy msgid "IME Accept" msgstr "IME Accepteren" #: src/client/keycode.cpp -#, fuzzy msgid "IME Convert" msgstr "IME Converteren" #: src/client/keycode.cpp -#, fuzzy msgid "IME Escape" -msgstr "IME Escape" +msgstr "IME Ontsnappen" #: src/client/keycode.cpp msgid "IME Mode Change" @@ -1393,7 +1531,7 @@ #: src/client/keycode.cpp msgid "IME Nonconvert" -msgstr "IME Nonconvert" +msgstr "IME Niet-converteren" #: src/client/keycode.cpp msgid "Insert" @@ -1437,12 +1575,10 @@ msgstr "Num Lock" #: src/client/keycode.cpp -#, fuzzy msgid "Numpad *" msgstr "Numpad *" #: src/client/keycode.cpp -#, fuzzy msgid "Numpad +" msgstr "Numpad +" @@ -1500,15 +1636,15 @@ #: src/client/keycode.cpp msgid "OEM Clear" -msgstr "OEM Clear" +msgstr "OEM duidelijk" #: src/client/keycode.cpp msgid "Page down" -msgstr "" +msgstr "Pagina omlaag" #: src/client/keycode.cpp msgid "Page up" -msgstr "" +msgstr "Pagina omhoog" #: src/client/keycode.cpp msgid "Pause" @@ -1521,7 +1657,7 @@ #. ~ "Print screen" key #: src/client/keycode.cpp msgid "Print" -msgstr "Print" +msgstr "Schermafbeelding" #: src/client/keycode.cpp msgid "Return" @@ -1602,7 +1738,7 @@ #: src/gui/guiConfirmRegistration.cpp msgid "Register and Join" -msgstr "" +msgstr "Registreer en doe mee" #: src/gui/guiConfirmRegistration.cpp #, c-format @@ -1613,33 +1749,37 @@ "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" +"U staat op het punt om voor het eerst lid te worden van deze server met de " +"naam \"%s\". \n" +"Als u doorgaat, wordt op deze server een nieuw account gemaakt met uw " +"inloggegevens. \n" +"Voer uw wachtwoord opnieuw in en klik op 'Registreren en aanmelden' om het " +"aanmaken van een account te bevestigen, of klik op 'Annuleren' om af te " +"breken." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Doorgaan" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Special\" = climb down" -msgstr "\"Gebruiken\" = omlaag klimmen" +msgstr "\"Speciaal\" = naar beneden klimmen" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Autoforward" -msgstr "Vooruit" +msgstr "Automatisch Vooruit" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Automatic jumping" -msgstr "" +msgstr "Automatisch springen" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Achteruit" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Change camera" -msgstr "Toetsen aanpassen" +msgstr "Camera veranderen" #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" @@ -1654,9 +1794,8 @@ msgstr "Console" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Dec. range" -msgstr "Zichtafstand" +msgstr "Zichtafstand verkleinen" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. volume" @@ -1675,14 +1814,12 @@ msgstr "Vooruit" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Inc. range" -msgstr "Zichtafstand" +msgstr "Afstand verhogen" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Inc. volume" -msgstr "Geluidsvolume" +msgstr "Volume verhogen" #: src/gui/guiKeyChangeMenu.cpp msgid "Inventory" @@ -1703,16 +1840,14 @@ "minetest.conf)" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Local command" -msgstr "Chat-commando's" +msgstr "Lokale commando" #: src/gui/guiKeyChangeMenu.cpp msgid "Mute" msgstr "Dempen" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Next item" msgstr "Volgende item" @@ -1734,17 +1869,15 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Special" -msgstr "" +msgstr "Speciaal" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle HUD" -msgstr "Vliegen aan/uit" +msgstr "Schakel HUD in/uit" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle chat log" -msgstr "Snel bewegen aan/uit" +msgstr "Chatlogboek wisselen" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fast" @@ -1755,23 +1888,20 @@ msgstr "Vliegen aan/uit" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle fog" -msgstr "Vliegen aan/uit" +msgstr "Schakel mist in/uit" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle minimap" -msgstr "Noclip aan/uit" +msgstr "Schakel mini-kaart in/uit" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Noclip aan/uit" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle pitchmove" -msgstr "Snel bewegen aan/uit" +msgstr "Schakel pitchmove aan/uit" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" @@ -1798,9 +1928,8 @@ msgstr "Terug" #: src/gui/guiVolumeChange.cpp -#, fuzzy msgid "Muted" -msgstr "Dempen" +msgstr "Gedempt" #: src/gui/guiVolumeChange.cpp msgid "Sound Volume: " @@ -1824,6 +1953,9 @@ "(Android) Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" +"(Android) Corrigeert de positie van virtuele joystick. \n" +"Indien uitgeschakeld, wordt de virtuele joystick gecentreerd op de positie " +"van de eerste aanraking." #: src/settings_translation_file.cpp msgid "" @@ -1831,9 +1963,11 @@ "If enabled, virtual joystick will also tap \"aux\" button when out of main " "circle." msgstr "" +"(Android) Gebruik virtuele joystick om de \"aux\" -knop te activeren. \n" +"Indien ingeschakeld, zal de virtuele joystick ook op de \"aux\" -knop tikken " +"wanneer deze buiten de hoofdcirkel is." #: 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" @@ -1844,16 +1978,15 @@ "situations.\n" "Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" -"(X,Y,Z)-afstand van de fractal, vanaf het centrum van de wereld, als " -"veelvoud van de schaal.\n" -"Te gebruiken om een geschikt geboortegebied met laaggelegen land in de buurt " -"van (0,0)\n" -"te krijgen.\n" -"De standaardwaarde is geschikt voor Mandelbrot fractals. Aanpassing is nodig " -"voor\n" -"Julia fractals.\n" -"Bereik: circa -2 tot +2. Vermenigvuldig dit met de 'schaal' voor de afstand " -"in nodes." +"X, Y, Z) offset van fractal van wereldcentrum in eenheden van 'schaal'. \n" +"Kan worden gebruikt om een gewenst punt naar (0, 0) te verplaatsen om een \n" +"geschikt spawnpunt, of om 'inzoomen' op een gewenst \n" +"punt mogelijk te maken punt door 'schaal' te vergroten. \n" +"De standaard is afgestemd op een geschikt spawn-punt voor Mandelbrot \n" +"sets met standaardparameters, moet deze mogelijk in andere \n" +"worden gewijzigd situaties. \n" +"Bereik ongeveer -2 tot 2. Vermenigvuldig met 'schaal' voor offset in " +"knooppunten." #: src/settings_translation_file.cpp msgid "" @@ -1865,6 +1998,13 @@ "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) schaal van fractal in knooppunten. \n" +"De werkelijke fractale grootte is 2 tot 3 keer groter. \n" +"Deze getallen kunnen heel groot gemaakt worden, \n" +"de fractal wel hoeven niet in de wereld te passen. \n" +"Verhoog deze om te 'zoomen' tot in de details van de fractal. \n" +"Standaard is voor een verticaal geplette vorm geschikt voor \n" +"een eiland, stel alle 3 getallen gelijk voor de ruwe vorm." #: src/settings_translation_file.cpp msgid "" @@ -1876,31 +2016,32 @@ #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of ridged mountains." -msgstr "" +msgstr "2D-ruis die de vorm/grootte van geribbelde bergen bepaalt." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of rolling hills." -msgstr "" +msgstr "2D-ruis die de vorm / grootte van glooiende heuvels bepaalt." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of step mountains." -msgstr "" +msgstr "2D-ruis die de vorm / grootte van step-bergen regelt." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of ridged mountain ranges." msgstr "" +"2D-ruis die de grootte / het voorkomen van geribbelde bergketens regelt." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of rolling hills." -msgstr "" +msgstr "2D-ruis die de grootte / het optreden van glooiende heuvels regelt." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of step mountain ranges." -msgstr "" +msgstr "2D-ruis die de grootte / het optreden van bergketens regelt." #: src/settings_translation_file.cpp msgid "2D noise that locates the river valleys and channels." -msgstr "" +msgstr "2D-ruis die de rivierdalen en -kanalen lokaliseert." #: src/settings_translation_file.cpp msgid "3D clouds" @@ -1911,6 +2052,11 @@ msgstr "3D modus" #: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode parallax strength" +msgstr "Sterkte van normal-maps" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "3D geluid voor grote holtes." @@ -1923,24 +2069,31 @@ "Ook voor luchtdrijvende bergen." #: 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 "3D geluid voor wanden van diepe rivier kloof." #: src/settings_translation_file.cpp -#, fuzzy msgid "3D noise defining terrain." -msgstr "3D geluid voor grote holtes." +msgstr "3D-ruisbepalend terrein." #: src/settings_translation_file.cpp msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." msgstr "" +"3D-ruis voor overhangende bergen, kliffen, etc. Meestal kleine variaties." #: src/settings_translation_file.cpp msgid "3D noise that determines number of dungeons per mapchunk." -msgstr "" +msgstr "3D-ruis die het aantal kerkers per mapchunk bepaalt." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -1959,18 +2112,18 @@ "- anaglyph: 3D met de kleuren cyaan en magenta.\n" "- interlaced: 3D voor polariserend scherm (even/oneven beeldlijnen).\n" "- topbottom: 3D met horizontaal gedeeld scherm (boven/onder).\n" -"- sidebyside: 3D met vertikaal gedeeld scherm (links/rechts).\n" -"- pageflip: 3D met vier buffers ('quad buffer')." +"- sidebyside: 3D met verticaal gedeeld scherm (links/rechts).\n" +"- crossview: Schele 3d\n" +"- pageflip: 3D met vier buffers ('quad buffer').\n" +"Merk op dat de geïnterlinieerde modus vereist dat shaders zijn ingeschakeld." #: 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 "" -"Vooringesteld kiemgetal voor de wereld. Indien leeg, wordt een willekeurige\n" -"waarde gekozen.\n" -"Wanneer vanuit het hoofdmenu een nieuwe wereld gecreëerd wordt, kan een\n" -"ander kiemgetal gekozen worden." +"Een gekozen kaartzaad voor een nieuwe kaart, laat leeg voor willekeurig. \n" +"Wordt overschreven bij het creëren van een nieuwe wereld in het hoofdmenu." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." @@ -1990,7 +2143,8 @@ msgstr "Interval voor opslaan wereld" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +#, fuzzy +msgid "Absolute limit of queued blocks to emerge" msgstr "Maximaal aantal 'emerge' blokken in de wachtrij" #: src/settings_translation_file.cpp @@ -1999,16 +2153,15 @@ #: src/settings_translation_file.cpp msgid "Acceleration of gravity, in nodes per second per second." -msgstr "" +msgstr "Versnelling van de zwaartekracht, in knopen per seconde per seconde." #: src/settings_translation_file.cpp msgid "Active Block Modifiers" msgstr "Actieve blokken wijzigers (ABMs)" #: src/settings_translation_file.cpp -#, fuzzy msgid "Active block management interval" -msgstr "Bereik waarbinnen blokken actief zijn" +msgstr "Actief blokbeheerinterval" #: src/settings_translation_file.cpp msgid "Active block range" @@ -2037,8 +2190,18 @@ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " "screens." msgstr "" -"Aangepaste DPI (dots per inch) instelling voor het scherm.\n" -"Bijv. voor 4k schermen (niet voor X11 of Android)." +"Pas de dpi-configuratie aan op uw scherm (alleen niet X11 / Android), b.v. " +"voor 4k-schermen." + +#: 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 "Advanced" @@ -2052,11 +2215,11 @@ "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 -#, fuzzy -msgid "Altitude chill" -msgstr "Temperatuurverschil vanwege hoogte" +"Verandert de lichtcurve door er 'gammacorrectie' op toe te passen. \n" +"Hogere waarden maken het middelste en lagere lichtniveau helderder. \n" +"Waarde '1.0' laat de lichtcurve ongewijzigd. \n" +"Dit heeft alleen een significant effect op daglicht en kunstmatig \n" +"licht, heeft het weinig effect op natuurlijk nachtlicht." #: src/settings_translation_file.cpp msgid "Always fly and fast" @@ -2064,16 +2227,15 @@ #: src/settings_translation_file.cpp msgid "Ambient occlusion gamma" -msgstr "Ambient occlusion gamma" +msgstr "omringende Occlusie gamma" #: src/settings_translation_file.cpp msgid "Amount of messages a player may send per 10 seconds." -msgstr "" +msgstr "Aantal berichten dat een speler per 10 seconden mag verzenden." #: src/settings_translation_file.cpp -#, fuzzy msgid "Amplifies the valleys." -msgstr "Vergroot de valleien" +msgstr "Versterkt de valleien." #: src/settings_translation_file.cpp msgid "Anisotropic filtering" @@ -2084,17 +2246,16 @@ msgstr "Meldt server aan bij de server-lijst" #: src/settings_translation_file.cpp -#, fuzzy msgid "Announce to this serverlist." -msgstr "Meldt server aan bij de server-lijst" +msgstr "Kondig aan op deze serverlijst." #: src/settings_translation_file.cpp msgid "Append item name" -msgstr "" +msgstr "Voeg itemnaam toe" #: src/settings_translation_file.cpp msgid "Append item name to tooltip." -msgstr "" +msgstr "Voeg itemnaam toe aan knopinfo." #: src/settings_translation_file.cpp msgid "Apple trees noise" @@ -2102,20 +2263,21 @@ #: src/settings_translation_file.cpp msgid "Arm inertia" -msgstr "" +msgstr "Arm traagheid" #: src/settings_translation_file.cpp msgid "" "Arm inertia, gives a more realistic movement of\n" "the arm when the camera moves." msgstr "" +"Arm traagheid, geeft een meer realistische beweging van \n" +"de arm wanneer de camera beweegt." #: src/settings_translation_file.cpp 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" @@ -2129,29 +2291,30 @@ "optimization.\n" "Stated in mapblocks (16 nodes)." msgstr "" -"Op deze afstand zal de server agressief optimaliseren welke blokken naar de " -"cliënt worden gezonden.\n" -"Kleine waarden kunnen prestaties verbeteren ten koste van zichtbare fouten " -"in de weergave.\n" -"(sommige blokken onder water en in grotten en soms op land zullen niet " -"worden weergegeven)\n" -"Indien deze waarde groter is dan max_block_send_distance is deze " -"optimalisatie uitgeschakeld.\n" -"Getal duidt het aantal mapblocks aan (16 nodes)" +"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 "Automatic forward key" -msgstr "Vooruit toets" +msgstr "Automatisch Vooruit toets" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." -msgstr "" +msgstr "Spring automatisch op obstakels met één knooppunt." #: src/settings_translation_file.cpp -#, fuzzy msgid "Automatically report to the serverlist." -msgstr "Meldt de server automatisch aan bij de serverlijst." +msgstr "Server automatisch aan melden bij de serverlijst." #: src/settings_translation_file.cpp msgid "Autosave screen size" @@ -2159,30 +2322,27 @@ #: src/settings_translation_file.cpp msgid "Autoscaling mode" -msgstr "" +msgstr "Automatische schaalmodus" #: src/settings_translation_file.cpp msgid "Backward key" msgstr "Achteruit" #: src/settings_translation_file.cpp -#, fuzzy msgid "Base ground level" -msgstr "Grondniveau" +msgstr "Basis grondniveau" #: src/settings_translation_file.cpp -#, fuzzy msgid "Base terrain height." -msgstr "Basishoogte van terrein" +msgstr "Basis terrein hoogte." #: src/settings_translation_file.cpp msgid "Basic" msgstr "Basis" #: src/settings_translation_file.cpp -#, fuzzy msgid "Basic privileges" -msgstr "Basisvoorrechten" +msgstr "Basis rechten" #: src/settings_translation_file.cpp msgid "Beach noise" @@ -2201,14 +2361,12 @@ msgstr "Lokaal server-adres" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API temperature and humidity noise parameters" -msgstr "Vochtigheid ruisparameters" +msgstr "Biome API parameters voor temperatuur- en vochtigheidsruis" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome noise" -msgstr "Rivier ruis parameters" +msgstr "Biome-ruis" #: src/settings_translation_file.cpp msgid "Bits per pixel (aka color depth) in fullscreen mode." @@ -2217,27 +2375,23 @@ #: src/settings_translation_file.cpp #, fuzzy msgid "Block send optimize distance" -msgstr "Maximale afstand voor te versturen blokken" +msgstr "Blok verzend optimaliseren afstand" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic font path" -msgstr "Vaste-breedte font pad" +msgstr "Vet en cursief pad" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic monospace font path" -msgstr "Vaste-breedte font pad" +msgstr "Vet en cursief monospace-lettertypepad" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold font path" -msgstr "Font pad" +msgstr "Vet lettertypepad" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold monospace font path" -msgstr "Vaste-breedte font pad" +msgstr "Vet monospace-lettertypepad" #: src/settings_translation_file.cpp msgid "Build inside player" @@ -2258,6 +2412,11 @@ "Increasing can reduce artifacting on weaker GPUs.\n" "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" +"Camera 'near clipping plane' afstand in knooppunten, tussen 0 en 0,25 \n" +"Werkt alleen op GLES-platforms. De meeste gebruikers hoeven dit niet te " +"wijzigen. \n" +"Verhogen kan artefacten op zwakkere GPU's verminderen. \n" +"0,1 = standaard, 0,25 = goede waarde voor zwakkere tablets." #: src/settings_translation_file.cpp msgid "Camera smoothing" @@ -2265,16 +2424,15 @@ #: src/settings_translation_file.cpp msgid "Camera smoothing in cinematic mode" -msgstr "Vloeiender camerabeweging (in cinematic modus)" +msgstr "Vloeiendere camerabeweging (in cinematic modus)" #: src/settings_translation_file.cpp msgid "Camera update toggle key" -msgstr "Toets voor cameraverversing aan/uit" +msgstr "Toets voor het aan of uit schakelen van cameraverversing" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cave noise" -msgstr "Grot ruispatroon #1" +msgstr "Grot ruis" #: src/settings_translation_file.cpp msgid "Cave noise #1" @@ -2289,44 +2447,40 @@ msgstr "Grot breedte" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cave1 noise" -msgstr "Grot ruispatroon #1" +msgstr "Grot1 ruis" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cave2 noise" -msgstr "Grot ruispatroon #1" +msgstr "Grot2 ruis" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cavern limit" -msgstr "Grot breedte" +msgstr "Grot limiet" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cavern noise" -msgstr "Grot ruispatroon #1" +msgstr "Grot ruis" #: src/settings_translation_file.cpp msgid "Cavern taper" msgstr "Grot hoogtepunt" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cavern threshold" -msgstr "Heuvel-grenswaarde" +msgstr "Grot drempel" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cavern upper limit" -msgstr "Grot breedte" +msgstr "Bovengrens grot" #: 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 "" +"Midden van het lichtcurve-boostbereik. \n" +"Waar 0,0 het minimale lichtniveau is, is 1,0 het maximale lichtniveau." #: src/settings_translation_file.cpp msgid "" @@ -2337,6 +2491,17 @@ "be\n" "necessary for smaller screens." msgstr "" +"Verandert de gebruikersinterface van het hoofdmenu: \n" +"- Volledig: meerdere werelden voor één speler, spelkeuze, de kiezer van " +"textuurpak, etc. \n" +"- Eenvoudig: één wereld voor één speler, geen game- of texture pack-kiezers. " +"Kan zijn \n" +"noodzakelijk voor kleinere schermen." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "Lettergrootte" #: src/settings_translation_file.cpp msgid "Chat key" @@ -2344,22 +2509,24 @@ #: src/settings_translation_file.cpp #, fuzzy +msgid "Chat log level" +msgstr "Debug logniveau" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" -msgstr "Status bericht bij verbinding" +msgstr "Limiet aantal chatberichten" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message format" -msgstr "Status bericht bij verbinding" +msgstr "Chatbericht formaat" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message kick threshold" -msgstr "Woestijn ruis drempelwaarde" +msgstr "Drempel voor kick van chatbericht" #: src/settings_translation_file.cpp msgid "Chat message max length" -msgstr "" +msgstr "Maximale lengte chatbericht" #: src/settings_translation_file.cpp msgid "Chat toggle key" @@ -2383,7 +2550,7 @@ #: src/settings_translation_file.cpp msgid "Clean transparent textures" -msgstr "Schoonmaken Transparante texturen" +msgstr "Schone transparante texturen" #: src/settings_translation_file.cpp msgid "Client" @@ -2399,13 +2566,12 @@ msgstr "Cliënt modding" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client side modding restrictions" -msgstr "Cliënt modding" +msgstr "Aanpassingen aan clientzijde" #: src/settings_translation_file.cpp msgid "Client side node lookup range restriction" -msgstr "" +msgstr "Clientzijde blok opzoekbereikbeperking" #: src/settings_translation_file.cpp msgid "Climbing speed" @@ -2441,15 +2607,24 @@ "These flags are independent from Minetest versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" +"Door komma's gescheiden lijst met vlaggen om te verbergen in de " +"inhoudsbibliotheek. \n" +"\"nonfree\" kan gebruikt worden om pakketten te verbergen die niet " +"kwalificeren als 'vrije software', \n" +"zoals gedefinieerd door de Free Software Foundation. \n" +"U kunt ook inhoudsclassificaties specificeren. \n" +"Deze vlaggen zijn onafhankelijk van Minetest-versies, \n" +"zie dus een volledige lijst op https://content.minetest.net/help/" +"content_flags/" #: 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 "" -"Lijst van mods die HTTP mogen gebruiken. Deze mods kunnen gegevens uploaden\n" -"naar en downloaden van het internet.\n" -"Gescheiden door komma's." +"Door komma's gescheiden lijst met mods die toegang hebben tot HTTP API's, " +"die \n" +"sta hen toe om gegevens van / naar internet te uploaden en te downloaden." #: src/settings_translation_file.cpp msgid "" @@ -2463,7 +2638,7 @@ #: src/settings_translation_file.cpp msgid "Command key" -msgstr "Opdracht-toets" +msgstr "Commando-toets" #: src/settings_translation_file.cpp msgid "Connect glass" @@ -2475,7 +2650,8 @@ #: src/settings_translation_file.cpp msgid "Connects glass if supported by node." -msgstr "Verbind glas-nodes met elkaar (indien ondersteund door het type node)." +msgstr "" +"Verbind glas-nodes met elkaar (indien ondersteund door het type node/blok)." #: src/settings_translation_file.cpp msgid "Console alpha" @@ -2486,18 +2662,17 @@ msgstr "Console-kleur" #: src/settings_translation_file.cpp -#, fuzzy msgid "Console height" -msgstr "Console hoogte" +msgstr "Hoogte console" #: src/settings_translation_file.cpp +#, fuzzy msgid "ContentDB Flag Blacklist" -msgstr "" +msgstr "ContentDB markeert zwarte lijst" #: src/settings_translation_file.cpp -#, fuzzy msgid "ContentDB URL" -msgstr "Verder spelen" +msgstr "ContentDB-URL" #: src/settings_translation_file.cpp msgid "Continuous forward" @@ -2508,28 +2683,28 @@ "Continuous forward movement, toggled by autoforward key.\n" "Press the autoforward key again or the backwards movement to disable." msgstr "" +"Continue voorwaartse beweging, geschakeld door autoforward-toets. \n" +"Druk nogmaals op de autoforward-toets of de achterwaartse beweging om uit te " +"schakelen." #: src/settings_translation_file.cpp msgid "Controls" msgstr "Besturing" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Controls length of day/night cycle.\n" "Examples:\n" "72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." msgstr "" -"Bepaalt de lengte van de dag/nacht cyclus\n" -"Voorbeelden:\n" -"72 = 20min\n" -"360 = 4min\n" -"1 = 24 uur\n" -"0 = de kloktijd (dag, nacht, schemering) verandert niet." +"Regelt de lengte van de dag/nacht-cyclus. \n" +"Voorbeelden: \n" +"72 = 20 min, 360 = 4 min, 1 = 24 uur, 0 = dag nacht /wat dan ook onveranderd " +"blijft." #: src/settings_translation_file.cpp msgid "Controls sinking speed in liquid." -msgstr "" +msgstr "Regelt de zinksnelheid in vloeistof." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -2545,10 +2720,15 @@ "Value >= 10.0 completely disables generation of tunnels and avoids the\n" "intensive noise calculations." msgstr "" +"Bepaalt de breedte van tunnels, een kleinere waarde creëert bredere " +"tunnels. \n" +"Waarde> = 10,0 schakelt het genereren van tunnels volledig uit en vermijdt " +"de \n" +"intensieve geluidsberekeningen." #: src/settings_translation_file.cpp msgid "Crash message" -msgstr "Crash boodschap" +msgstr "Crashbericht" #: src/settings_translation_file.cpp msgid "Creative" @@ -2576,33 +2756,31 @@ #: src/settings_translation_file.cpp msgid "Damage" -msgstr "Verwondingen" +msgstr "Verwondingen/schade" #: src/settings_translation_file.cpp msgid "Debug info toggle key" msgstr "Toets voor aan/uitzetten debug informatie" #: src/settings_translation_file.cpp -#, fuzzy msgid "Debug log file size threshold" -msgstr "Woestijn ruis drempelwaarde" +msgstr "Debug logbestand drempel" #: src/settings_translation_file.cpp msgid "Debug log level" msgstr "Debug logniveau" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dec. volume key" msgstr "Volume verlagen toets" #: src/settings_translation_file.cpp msgid "Decrease this to increase liquid resistance to movement." -msgstr "" +msgstr "Verlaag dit om de vloeistofweerstand te vergroten." #: src/settings_translation_file.cpp msgid "Dedicated server step" -msgstr "Tijdsstaplengte van de server" +msgstr "Toegewijde serverstap" #: src/settings_translation_file.cpp msgid "Default acceleration" @@ -2626,13 +2804,18 @@ #: src/settings_translation_file.cpp msgid "Default privileges" -msgstr "Standaard voorrechten" +msgstr "Standaard rechten" #: src/settings_translation_file.cpp msgid "Default report format" msgstr "Standaardformaat voor rapport-bestanden" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Standaardspel" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2649,16 +2832,12 @@ msgstr "Bepaalt gebieden met zandstranden." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines distribution of higher terrain and steepness of cliffs." -msgstr "" -"Bepaalt gebieden van hoger (rotswand-top) terrein en de steilte van de " -"rotswand." +msgstr "Definieert de verdeling van hoger terrein en steilheid van kliffen." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines distribution of higher terrain." -msgstr "Bepaalt gebieden van 'terrain_higher' (rotswand-top terrein)." +msgstr "Definieert de verdeling van hoger terrein." #: src/settings_translation_file.cpp msgid "Defines full size of caverns, smaller values create larger caverns." @@ -2682,14 +2861,12 @@ "Een hogere waarde geeft vloeiender normal maps." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the base ground level." -msgstr "Bepaalt de gebieden met bomen en hun dichtheid." +msgstr "Definieert het basisgrondniveau." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the depth of the river channel." -msgstr "Bepaalt de gebieden met bomen en hun dichtheid." +msgstr "Definieert de diepte van het rivierkanaal." #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." @@ -2699,14 +2876,12 @@ "(0 = oneindig ver)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river channel." -msgstr "Bepaalt de grootschalige rivierkanaal structuren." +msgstr "Definieert de breedte van het rivierkanaal." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river valley." -msgstr "Bepaalt gebieden met appels in de bomen." +msgstr "Definieert de breedte van de riviervallei." #: src/settings_translation_file.cpp msgid "Defines tree areas and tree density." @@ -2734,9 +2909,8 @@ msgstr "Gedrag bij gebruik van verouderde Lua API functies" #: src/settings_translation_file.cpp -#, fuzzy msgid "Depth below which you'll find giant caverns." -msgstr "Diepte waaronder je grote grotten vind." +msgstr "Diepte waaronder je gigantische grotten vindt." #: src/settings_translation_file.cpp msgid "Depth below which you'll find large caves." @@ -2755,20 +2929,18 @@ msgstr "Woestijn ruis drempelwaarde" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Deserts occur when np_biome exceeds this value.\n" "When the 'snowbiomes' flag is enabled, this is ignored." msgstr "" -"Woestijnen ontstaan wanneer np_biome deze waarde overstijgt.\n" -"Indien het nieuwe biome systeem is ingeschakeld wordt dit genegeerd." +"Woestijnen treden op wanneer np_biome deze waarde overschrijdt. \n" +"Als de vlag 'snowbiomes' is ingeschakeld, wordt dit genegeerd." #: src/settings_translation_file.cpp msgid "Desynchronize block animation" msgstr "Textuur-animaties niet synchroniseren" #: src/settings_translation_file.cpp -#, fuzzy msgid "Digging particles" msgstr "Graaf deeltjes" @@ -2797,28 +2969,28 @@ msgstr "Weggooi-toets" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dump the mapgen debug information." -msgstr "Print wereldgenerator debug informatie." +msgstr "Dump de mapgen-debug informatie." #: src/settings_translation_file.cpp msgid "Dungeon maximum Y" -msgstr "" +msgstr "Dungeon maximaal Y" #: src/settings_translation_file.cpp msgid "Dungeon minimum Y" -msgstr "" +msgstr "Dungeon minimaal Y" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dungeon noise" -msgstr "Bergen ruis" +msgstr "Kerker ruis" #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" "Required for IPv6 connections to work at all." msgstr "" +"Schakel IPv6-ondersteuning in (voor zowel client als server). \n" +"Vereist om IPv6-verbindingen te laten werken." #: src/settings_translation_file.cpp msgid "" @@ -2837,14 +3009,12 @@ msgstr "Schakel creatieve modus in voor nieuwe kaarten." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable joysticks" -msgstr "Joysticks aanzetten" +msgstr "Schakel joysticks in" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable mod channels support." -msgstr "Veilige modus voor mods aanzetten" +msgstr "Ondersteuning voor mod-kanalen inschakelen." #: src/settings_translation_file.cpp msgid "Enable mod security" @@ -2860,13 +3030,15 @@ #: src/settings_translation_file.cpp msgid "Enable register confirmation" -msgstr "" +msgstr "Registerbevestiging inschakelen" #: src/settings_translation_file.cpp msgid "" "Enable register confirmation when connecting to server.\n" "If disabled, new account will be registered automatically." msgstr "" +"Schakel registerbevestiging in wanneer u verbinding maakt met de server. \n" +"Indien uitgeschakeld, wordt een nieuw account automatisch geregistreerd." #: src/settings_translation_file.cpp msgid "" @@ -2908,6 +3080,8 @@ "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 "" @@ -2921,15 +3095,14 @@ "2.0 voor twee keer grotere loopbeweging." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enable/disable running an IPv6 server.\n" "Ignored if bind_address is set.\n" "Needs enable_ipv6 to be enabled." msgstr "" -"Schakel IPv6 in voor de server. Afhankelijk van de systeemconfiguratie\n" -"kan dit tot gevolg hebben dat enkel IPv6 cliënten verbinding kunnen maken\n" -"Deze instelling wordt genegeerd als een lokaal server-adres ingesteld is." +"Schakel het uitvoeren van een IPv6-server in/uit. \n" +"Wordt genegeerd als bind_address is ingesteld. \n" +"Moet inschakelen_ipv6 moet worden ingeschakeld." #: src/settings_translation_file.cpp msgid "" @@ -2938,6 +3111,11 @@ "appearance of high dynamic range images. Mid-range contrast is slightly\n" "enhanced, highlights and shadows are gradually compressed." msgstr "" +"Maakt Hable's 'Uncharted 2' filmische tonemapping mogelijk. \n" +"Simuleert de tooncurve van fotografische film en hoe deze de \n" +"uiterlijk van afbeeldingen met een hoog dynamisch bereik. Het contrast in " +"het middenbereik is iets \n" +"verbeterd, worden hooglichten en schaduwen geleidelijk gecomprimeerd." #: src/settings_translation_file.cpp msgid "Enables animation of inventory items." @@ -2986,6 +3164,10 @@ "sound controls will be non-functional.\n" "Changing this setting requires a restart." msgstr "" +"Schakelt het geluidssysteem in. \n" +"Als deze optie is uitgeschakeld, worden alle geluiden overal en in de game \n" +"volledig uitgeschakeld geluidsbesturingen zullen niet functioneel zijn. \n" +"Het wijzigen van deze instelling vereist een herstart." #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" @@ -3004,6 +3186,16 @@ "ruimtes tussen blokken tot gevolg hebben." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "FPS in het pauze-menu" @@ -3016,14 +3208,12 @@ msgstr "Ruis factor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fall bobbing factor" -msgstr "Loopbeweging bij vallen" +msgstr "Val dobberende factor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "Terugval-font" +msgstr "Terugvallettertype" #: src/settings_translation_file.cpp msgid "Fallback font shadow" @@ -3054,13 +3244,12 @@ msgstr "Snelle modus" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"special\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Snelle beweging toestaan (met de \"gebruiken\" toets).\n" -"Het \"fast\" voorrecht is vereist op de server." +"Snelle beweging (via de \"speciale\" toets). \n" +"Dit vereist het \"snelle\" recht op de server." #: src/settings_translation_file.cpp msgid "Field of view" @@ -3071,24 +3260,22 @@ msgstr "Zichthoek in graden." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "File in client/serverlist/ that contains your favorite servers displayed in " "the\n" "Multiplayer Tab." msgstr "" -"Bestand in de map 'client/serverlist/' met favoriete servers die getoond\n" -"worden in de multiplayer tab." +"Bestand in client / serverlijst / dat uw favoriete servers bevat die worden " +"weergegeven in de \n" +"Tabblad Multiplayer." #: src/settings_translation_file.cpp -#, fuzzy msgid "Filler depth" -msgstr "Filler Diepte" +msgstr "Vuldiepte" #: src/settings_translation_file.cpp -#, fuzzy msgid "Filler depth noise" -msgstr "Filler Diepte" +msgstr "Vuldiepte ruis" #: src/settings_translation_file.cpp msgid "Filmic tone mapping" @@ -3128,7 +3315,42 @@ #: src/settings_translation_file.cpp msgid "Fixed virtual joystick" -msgstr "" +msgstr "Vaste virtuele joystick" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Drijvend gebergte dichtheid" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Dungeon maximaal Y" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Dungeon minimaal Y" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Drijvend land basis ruis" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Drijvend gebergte dichtheid" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Drijvend land basis ruis" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Waterniveau" #: src/settings_translation_file.cpp msgid "Fly key" @@ -3153,11 +3375,11 @@ #: src/settings_translation_file.cpp msgid "Font bold by default" -msgstr "" +msgstr "Standaard vetgedrukt" #: src/settings_translation_file.cpp msgid "Font italic by default" -msgstr "" +msgstr "Standaard cursief" #: src/settings_translation_file.cpp msgid "Font shadow" @@ -3173,14 +3395,20 @@ #: src/settings_translation_file.cpp msgid "Font size of the default font in point (pt)." -msgstr "" +msgstr "Lettergrootte van het standaardlettertype in punt (pt)." #: src/settings_translation_file.cpp msgid "Font size of the fallback font in point (pt)." -msgstr "" +msgstr "Lettergrootte van het fallback-lettertype in punt (pt)." #: src/settings_translation_file.cpp msgid "Font size of the monospace font in point (pt)." +msgstr "Lettergrootte van het monospace-lettertype in punt (pt)." + +#: 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 @@ -3189,6 +3417,9 @@ "placeholders:\n" "@name, @message, @timestamp (optional)" msgstr "" +"Formaat van chatberichten van spelers. De volgende tekenreeksen zijn geldige " +"tijdelijke aanduidingen: \n" +"@name, @message, @timestamp (optioneel)" #: src/settings_translation_file.cpp msgid "Format of screenshots." @@ -3196,19 +3427,19 @@ #: src/settings_translation_file.cpp msgid "Formspec Default Background Color" -msgstr "" +msgstr "Formspec Standaard achtergrondkleur" #: src/settings_translation_file.cpp msgid "Formspec Default Background Opacity" -msgstr "" +msgstr "Formspec Standaard achtergronddekking" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Color" -msgstr "" +msgstr "Formspec Achtergrondkleur op volledig scherm" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Opacity" -msgstr "" +msgstr "Formspec Achtergronddekking op volledig scherm" #: src/settings_translation_file.cpp #, fuzzy @@ -3277,6 +3508,13 @@ "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 "" +"Van hoe ver klanten weten over objecten, vermeld in mapblocks (16 " +"knooppunten). \n" +"\n" +"Het instellen van dit groter dan active_block_range zal ook de server \n" +"veroorzaken om actieve objecten tot deze afstand in de richting \n" +"van de speler kijkt. (Dit kan voorkomen dat mobs plotseling uit het zicht " +"verdwijnen)" #: src/settings_translation_file.cpp msgid "Full screen" @@ -3331,12 +3569,16 @@ "Gradient of light curve at maximum light level.\n" "Controls the contrast of the highest light levels." msgstr "" +"Verloop van lichtkromme bij maximaal lichtniveau. \n" +"Regelt het contrast van de hoogste lichtniveaus." #: src/settings_translation_file.cpp msgid "" "Gradient of light curve at minimum light level.\n" "Controls the contrast of the lowest light levels." msgstr "" +"Verloop van lichtkromme bij minimaal lichtniveau. \n" +"Regelt het contrast van de laagste lichtniveaus." #: src/settings_translation_file.cpp msgid "Graphics" @@ -3395,9 +3637,8 @@ msgstr "" "Laat de profiler zichzelf profileren:\n" "* Profileer een lege functie.\n" -" Dit geeft een schatting van de CPU-tijd die door de profiler zelf " -"gebruikt wordt,\n" -" ten koste van één extra functie-aanroep.\n" +" Dit geeft een schatting van de CPU-tijd die door de profiler zelf gebruikt " +"wordt (+1 functie-aanroep).\n" "* Profileer de code die de statistieken ververst." #: src/settings_translation_file.cpp @@ -3463,22 +3704,31 @@ msgstr "Home-pagina van de server. Wordt getoond in de serverlijst." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Horizontal acceleration in air when jumping or falling,\n" "in nodes per second per second." msgstr "" +"Horizontale acceleratie in lucht bij springen of vallen, \n" +"in knooppunten per seconde per seconde." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Horizontal and vertical acceleration in fast mode,\n" "in nodes per second per second." msgstr "" +"Horizontale en verticale acceleratie in snelle modus, \n" +"in knooppunten per seconde per seconde." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Horizontal and vertical acceleration on ground or when climbing,\n" "in nodes per second per second." msgstr "" +"Horizontale en verticale acceleratie op de grond of bij het klimmen, \n" +"in knooppunten per seconde per seconde." #: src/settings_translation_file.cpp msgid "Hotbar next key" @@ -3649,9 +3899,8 @@ msgstr "Toets voor volgend gebruikte tool" #: src/settings_translation_file.cpp -#, fuzzy msgid "How deep to make rivers." -msgstr "Diepte van de rivieren" +msgstr "Diepte van de rivieren." #: src/settings_translation_file.cpp msgid "" @@ -3659,6 +3908,9 @@ "If negative, liquid waves will move backwards.\n" "Requires waving liquids to be enabled." msgstr "" +"Hoe snel vloeibare golven zullen bewegen. Hoger = sneller. \n" +"Indien negatief, zullen vloeibare golven achteruit bewegen. \n" +"Vereist dat golvende vloeistoffen zijn ingeschakeld." #: src/settings_translation_file.cpp msgid "" @@ -3670,9 +3922,8 @@ "geheugen." #: src/settings_translation_file.cpp -#, fuzzy msgid "How wide to make rivers." -msgstr "Breedte van rivieren" +msgstr "Breedte van rivieren." #: src/settings_translation_file.cpp msgid "Humidity blend noise" @@ -3775,6 +4026,8 @@ "If enabled, makes move directions relative to the player's pitch when flying " "or swimming." msgstr "" +"Indien ingeschakeld, maakt verplaatsingsrichtingen ten opzichte van het veld " +"van de speler tijdens het vliegen of zwemmen." #: src/settings_translation_file.cpp msgid "If enabled, new players cannot join with an empty password." @@ -3797,6 +4050,9 @@ "limited\n" "to this distance from the player to the node." msgstr "" +"Als de CSM-beperking voor het blok is ingeschakeld, zijn get_node-aanroepen " +"beperkt \n" +"tot deze afstand van de speler tot het blok." #: src/settings_translation_file.cpp msgid "" @@ -3805,6 +4061,12 @@ "deleting an older debug.txt.1 if it exists.\n" "debug.txt is only moved if this setting is positive." msgstr "" +"Als de bestandsgrootte van debug.txt groter is dan het aantal megabytes dat " +"is opgegeven in \n" +"deze instelling wanneer het wordt geopend, wordt het bestand verplaatst naar " +"debug.txt.1, \n" +"het verwijderen van een oudere debug.txt.1 als deze bestaat. \n" +"debug.txt wordt alleen verplaatst als deze instelling positief is." #: src/settings_translation_file.cpp msgid "If this is set, players will always (re)spawn at the given position." @@ -3841,7 +4103,7 @@ #: src/settings_translation_file.cpp msgid "Initial vertical speed when jumping, in nodes per second." -msgstr "" +msgstr "Verticale beginsnelheid tijdens springen, in blokken per seconde." #: src/settings_translation_file.cpp msgid "" @@ -3898,7 +4160,7 @@ #: src/settings_translation_file.cpp msgid "Inventory key" -msgstr "Rugzak toets" +msgstr "Inventaristoets" #: src/settings_translation_file.cpp msgid "Invert mouse" @@ -3934,6 +4196,12 @@ "increases processing load.\n" "At iterations = 20 this mapgen has a similar load to mapgen V7." msgstr "" +"Aantal iteraties van de recursieve functie.\n" +"Het groter maken hiervan zorgt voor een toename in fijne details, maar zorgt " +"ook \n" +"voor een toename in processorgebruik.\n" +"Bij iteraties = 20 heeft deze mapgen een vergelijkbare belasting als mapgen " +"V7." #: src/settings_translation_file.cpp msgid "Joystick ID" @@ -4766,11 +5034,11 @@ #: src/settings_translation_file.cpp msgid "Kick players who sent more than X messages per 10 seconds." msgstr "" +"Schop spelers die meer dan X berichten per 10 seconden hebben verzonden." #: src/settings_translation_file.cpp -#, fuzzy msgid "Lake steepness" -msgstr "Steilheid Van de meren" +msgstr "Steilheid van meren" #: src/settings_translation_file.cpp #, fuzzy @@ -4787,15 +5055,15 @@ #: src/settings_translation_file.cpp msgid "Large cave maximum number" -msgstr "" +msgstr "Maximaal aantal grote grotten" #: src/settings_translation_file.cpp msgid "Large cave minimum number" -msgstr "" +msgstr "Groot minimumaantal grotten" #: src/settings_translation_file.cpp msgid "Large cave proportion flooded" -msgstr "" +msgstr "Grote grotaandeel overstroomd" #: src/settings_translation_file.cpp #, fuzzy @@ -4879,35 +5147,27 @@ #: src/settings_translation_file.cpp msgid "Light curve boost" -msgstr "" +msgstr "Lichtcurve boost" #: src/settings_translation_file.cpp msgid "Light curve boost center" -msgstr "" +msgstr "Lichtcurve boost centrum" #: src/settings_translation_file.cpp msgid "Light curve boost spread" -msgstr "" +msgstr "Lichtcurve boost verspreiding" #: src/settings_translation_file.cpp msgid "Light curve gamma" -msgstr "" +msgstr "Lichtcurve gamma" #: src/settings_translation_file.cpp msgid "Light curve high gradient" -msgstr "" +msgstr "Lichtcurve hoog verloop" #: src/settings_translation_file.cpp msgid "Light curve low gradient" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Emerge-wachtrij voor lezen" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Emerge-wachtrij voor genereren" +msgstr "Lichtcurve laag verloop" #: src/settings_translation_file.cpp msgid "" @@ -4984,7 +5244,12 @@ #: src/settings_translation_file.cpp msgid "Lower Y limit of dungeons." -msgstr "" +msgstr "Onderste Y-limiet van kerkers." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Onderste Y-limiet van kerkers." #: src/settings_translation_file.cpp msgid "Main menu script" @@ -5017,7 +5282,7 @@ #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen Carpathian." -msgstr "" +msgstr "Wereldgeneratieattributen specifiek aan Mapgen Carpathian." #: src/settings_translation_file.cpp #, fuzzy @@ -5053,10 +5318,16 @@ "to become shallower and occasionally dry.\n" "'altitude_dry': Reduces humidity with altitude." msgstr "" +"Wereldgeneratieattributen specifiek aan Mapgen Valleys.\n" +"'altitude_chill': Hoe groter de hoogte, hoe lager de temperatuur.\n" +"'humid_rivers': Hogere vochtigheidsgraad rond rivieren.\n" +"'vary_river_depth': Lage vochtigheidsgraad en hoge temperatuur\n" +"zorgen ervoor dat rivieren smaller worden en uiteindelijk uitdrogen.\n" +"'altitude_dry': Hoe groter de hoogte, hoe lager de vochtigheidsgraad." #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen v5." -msgstr "" +msgstr "Wereldgenerator instellingen specifiek voor Mapgen V5." #: src/settings_translation_file.cpp #, fuzzy @@ -5074,10 +5345,16 @@ "Zet \"no\" voor een vlag om hem expliciet uit te zetten." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." -msgstr "" +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." +msgstr "" +"Kenmerken voor het genereren van kaarten die specifiek zijn voor Mapgen " +"v7. \n" +"'richels' maakt de rivieren mogelijk." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5179,10 +5456,6 @@ msgstr "Wereldgenerator debug" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Wereldgenerator vlaggen" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Wereldgenerator" @@ -5226,17 +5499,20 @@ #: src/settings_translation_file.cpp msgid "Maximum limit of random number of large caves per mapchunk." -msgstr "" +msgstr "Maximale limiet van willekeurig aantal grote grotten per mapchunk." #: src/settings_translation_file.cpp msgid "Maximum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Maximale limiet van willekeurig aantal kleine grotten per mapchunk." #: src/settings_translation_file.cpp msgid "" "Maximum liquid resistance. Controls deceleration when entering liquid at\n" "high speed." msgstr "" +"Maximale vloeistofweerstand. Regelt de vertraging bij het invoeren van " +"vloeistof op \n" +"hoge snelheid." #: src/settings_translation_file.cpp msgid "" @@ -5244,23 +5520,28 @@ "The maximum total count is calculated dynamically:\n" "max_total = ceil((#clients + max_users) * per_client / 4)" msgstr "" +"Maximum aantal blokken dat tegelijkertijd verzonden kan worden\n" +"per client. Het totale maximum wordt dynamisch berekend:\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 "Maximaal aantal blokken in de wachtrij voor laden/genereren." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Maximaal aantal blokken in de wachtrij om gegenereerd te worden.\n" "Laat leeg om een geschikt aantal automatisch te laten berekenen." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Maximaal aantal blokken in de wachtrij om van disk geladen te worden.\n" "Laat leeg om een geschikt aantal automatisch te laten berekenen." @@ -5291,14 +5572,12 @@ "dat gelijk verbonden kan zijn." #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum number of players that can be connected simultaneously." -msgstr "Maximaal aantal spelers dat tegelijk verbonden kan zijn." +msgstr "Maximaal aantal spelers dat tegelijkertijd verbonden kan zijn." #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum number of recent chat messages to show" -msgstr "Maximaal aantal geforceerd geladen blokken." +msgstr "Maximaal aantal zichtbare recente chatberichten" #: src/settings_translation_file.cpp msgid "Maximum number of statically stored objects in a block." @@ -5323,13 +5602,15 @@ #: src/settings_translation_file.cpp msgid "Maximum size of the out chat queue" -msgstr "" +msgstr "Maximale omvang van de wachtrij uitgezonden berichten" #: src/settings_translation_file.cpp msgid "" "Maximum size of the out chat queue.\n" "0 to disable queueing and -1 to make the queue size unlimited." msgstr "" +"Maximale omvang van de wachtrij uitgezonden berichten.\n" +"'0' om de wachtrij uit te schakelen en '-1' om de wachtrij oneindig te maken." #: src/settings_translation_file.cpp msgid "Maximum time in ms a file download (e.g. a mod download) may take." @@ -5365,6 +5646,10 @@ "* halo: node licht op." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Mini-kaart" @@ -5378,11 +5663,11 @@ #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "" +msgstr "Minimumlimiet van willekeurig aantal grote grotten per mapchunk." #: src/settings_translation_file.cpp msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Minimale limiet van willekeurig aantal kleine grotten per mapchunk." #: src/settings_translation_file.cpp #, fuzzy @@ -5395,7 +5680,7 @@ #: src/settings_translation_file.cpp msgid "Mod channels" -msgstr "" +msgstr "Mod-kanalen" #: src/settings_translation_file.cpp msgid "Modifies the size of the hudbar elements." @@ -5424,9 +5709,8 @@ msgstr "Heuvel-hoogte ruisparameters" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mountain zero level" -msgstr "Bergen ruis" +msgstr "Nulniveau bergen" #: src/settings_translation_file.cpp msgid "Mouse sensitivity" @@ -5457,7 +5741,7 @@ #: src/settings_translation_file.cpp msgid "Mute sound" -msgstr "" +msgstr "Geluid dempen" #: src/settings_translation_file.cpp msgid "" @@ -5466,6 +5750,11 @@ "Current mapgens in a highly unstable state:\n" "- The optional floatlands of v7 (disabled by default)." msgstr "" +"Naam van de wereldgenerator die gebruikt moet worden om een nieuwe wereld " +"aan te maken. \n" +"Een nieuwe wereld aanmaken in het hoofdmenu heeft echter voorrang.\n" +"Huidige wereldgeneratoren in zeer instabiele staat:\n" +"- De optionele zweeflanden van v7 (standaard uitgeschakeld)." #: src/settings_translation_file.cpp msgid "" @@ -5487,7 +5776,7 @@ #: src/settings_translation_file.cpp msgid "Near plane" -msgstr "" +msgstr "Dichtbij vliegtuig" #: src/settings_translation_file.cpp msgid "Network" @@ -5538,11 +5827,9 @@ msgstr "Aantal 'emerge' threads" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5553,6 +5840,23 @@ "processes, especially in singleplayer and/or when running Lua code in\n" "'on_generated'. For many users the optimum setting may be '1'." msgstr "" +"Aantal te gebruiken emerge-threads. \n" +"WAARSCHUWING: Momenteel zijn er meerdere bugs die crashes kunnen veroorzaken " +"wanneer \n" +"'num_emerge_threads' is groter dan 1. Totdat deze waarschuwing is " +"verwijderd, is dat \n" +"zo sterk aanbevolen deze waarde is ingesteld op de standaard '1'. \n" +"Waarde 0: \n" +"- Automatische selectie. Het aantal emerge threads zal zijn \n" +"- 'aantal processors - 2', met een ondergrens van 1. \n" +"Elke andere waarde: \n" +"- Specificeert het aantal emerge threads, met een ondergrens van 1. \n" +"WAARSCHUWING: Door het aantal emerge threads te vergroten, worden de motor " +"mapgen \n" +"vergroot snelheid, maar dit kan de spelprestaties schaden door interfereren " +"met andere \n" +"processen, vooral in singleplayer en/of bij het uitvoeren van Lua-code in \n" +"'on_generated'. Voor veel gebruikers kan de optimale instelling '1' zijn." #: src/settings_translation_file.cpp msgid "" @@ -5573,21 +5877,25 @@ #: src/settings_translation_file.cpp msgid "Online Content Repository" -msgstr "" +msgstr "Online inhoud repository" #: src/settings_translation_file.cpp msgid "Opaque liquids" -msgstr "Ondoorschijnende vloeistoffen" +msgstr "Ondoorzichtige vloeistoffen" #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." msgstr "" +"Ondoorzichtigheid (alpha) van de schaduw achter het standaardlettertype, " +"tussen 0 en 255." #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255." msgstr "" +"Ondoorzichtigheid (alpha) van de schaduw achter het fallback-lettertype, " +"tussen 0 en 255." #: src/settings_translation_file.cpp msgid "" @@ -5595,6 +5903,8 @@ "formspec is\n" "open." msgstr "" +"Pauzemenu openen als het venster focus verliest. Pauzeert niet als er\n" +"een formspec geopend is." #: src/settings_translation_file.cpp msgid "Overall bias of parallax occlusion effect, usually scale/2." @@ -5627,10 +5937,6 @@ msgstr "Parallax occlusie schaal" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Parallax occlusie sterkte" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5638,10 +5944,19 @@ "This font will be used for certain languages or if the default font is " "unavailable." msgstr "" +"Pad van het fallback-lettertype. \n" +"Als de instelling \"freetype\" is ingeschakeld: Moet een TrueType-lettertype " +"zijn. \n" +"Als de instelling \"freetype\" is uitgeschakeld: Moet een bitmap- of XML-" +"vectorenlettertype zijn. \n" +"Dit lettertype wordt gebruikt voor bepaalde talen of als het " +"standaardlettertype niet beschikbaar is." #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Pad waar screenshots bewaard worden." +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 "" @@ -5663,6 +5978,13 @@ "If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" "The fallback font will be used if the font cannot be loaded." msgstr "" +"Pad naar het standaardlettertype. \n" +"Als de instelling \"freetype\" is ingeschakeld: Moet een TrueType-lettertype " +"zijn. \n" +"Als de instelling \"freetype\" is uitgeschakeld: Moet een bitmap- of XML-" +"vectorenlettertype zijn. \n" +"Het fallback-lettertype wordt gebruikt als het lettertype niet kan worden " +"geladen." #: src/settings_translation_file.cpp msgid "" @@ -5671,12 +5993,27 @@ "If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" "This font is used for e.g. the console and profiler screen." msgstr "" +"Pad naar het monospace-lettertype. \n" +"Als de instelling \"freetype\" is ingeschakeld: Moet een TrueType-lettertype " +"zijn. \n" +"Als de instelling \"freetype\" is uitgeschakeld: Moet een bitmap- of XML-" +"vectorenlettertype zijn. \n" +"Dit lettertype wordt o.a. gebruikt voor het console- en profilerscherm." #: src/settings_translation_file.cpp msgid "Pause on lost window focus" +msgstr "Pauzeer als venster focus verliest" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "Emerge-wachtrij voor genereren" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Fysica" @@ -5687,7 +6024,7 @@ #: src/settings_translation_file.cpp msgid "Pitch move mode" -msgstr "" +msgstr "Pitch beweeg modus" #: src/settings_translation_file.cpp msgid "" @@ -5723,6 +6060,9 @@ "Prevent digging and placing from repeating when holding the mouse buttons.\n" "Enable this when you dig or place too often by accident." msgstr "" +"Voorkom dat graven en plaatsen zich herhaalt wanneer u de muisknoppen " +"ingedrukt houdt. \n" +"Schakel dit in als u per ongeluk te vaak graaft of plaatst." #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." @@ -5755,10 +6095,22 @@ msgstr "Profileren" #: src/settings_translation_file.cpp -msgid "Proportion of large caves that contain liquid." +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 fetch on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "Aandeel grote grotten die vloeistof bevatten." + +#: 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 " @@ -5768,9 +6120,8 @@ "Waarden groter dan 26 hebben scherpe wolkenranden tot gevolg." #: src/settings_translation_file.cpp -#, fuzzy msgid "Raises terrain to make valleys around the rivers." -msgstr "Verhoogt het terrein om rond de rivieren valleien te maken" +msgstr "Verhoogt het terrein om rond de rivieren valleien te maken." #: src/settings_translation_file.cpp msgid "Random input" @@ -5782,7 +6133,7 @@ #: src/settings_translation_file.cpp msgid "Recent Chat Messages" -msgstr "" +msgstr "Recente chatberichten" #: src/settings_translation_file.cpp #, fuzzy @@ -5802,6 +6153,9 @@ "Remove color codes from incoming chat messages\n" "Use this to stop players from being able to use color in their messages" msgstr "" +"Verwijder kleurcodes van binnenkomende chatberichten\n" +"Gebruik dit om er voor te zorgen dat spelers geen kleuren kunnen gebruiken " +"in hun berichten" #: src/settings_translation_file.cpp msgid "Replaces the default main menu with a custom one." @@ -5824,6 +6178,18 @@ "csm_restriction_noderange)\n" "READ_PLAYERINFO: 32 (disable get_player_names call client-side)" msgstr "" +"Beperkt de toegang van bepaalde client-side functies op servers. \n" +"Combineer de onderstaande byteflags om functies aan de clientzijde te " +"beperken of stel deze in op 0 \n" +"voor geen beperkingen: \n" +"LOAD_CLIENT_MODS: 1 (schakel het laden van door de gebruiker geleverde mods " +"uit) \n" +"CHAT_MESSAGES: 2 (schakel send_chat_message call client-side uit) \n" +"READ_ITEMDEFS: 4 (schakel get_item_def call client-side uit) \n" +"READ_NODEDEFS: 8 (schakel get_node_def call client-side uit) \n" +"LOOKUP_NODES_LIMIT: 16 (beperkt get_node call client-side tot \n" +"csm_restriction_noderange) \n" +"READ_PLAYERINFO: 32 (deactiveer get_player_names call client-side)" #: src/settings_translation_file.cpp #, fuzzy @@ -5858,9 +6224,8 @@ msgstr "Diepte van rivieren" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel width" -msgstr "Diepte van rivieren" +msgstr "Breedte van rivieren" #: src/settings_translation_file.cpp #, fuzzy @@ -5888,11 +6253,11 @@ #: src/settings_translation_file.cpp msgid "Rolling hill size noise" -msgstr "" +msgstr "Ruis golvende heuvels" #: src/settings_translation_file.cpp msgid "Rolling hills spread noise" -msgstr "" +msgstr "Glooiende heuvels verspreiden ruis" #: src/settings_translation_file.cpp msgid "Round minimap" @@ -5900,7 +6265,7 @@ #: src/settings_translation_file.cpp msgid "Safe digging and placing" -msgstr "" +msgstr "Veilig breken en plaatsen" #: src/settings_translation_file.cpp msgid "Sandy beaches occur when np_beach exceeds this value." @@ -5912,7 +6277,7 @@ #: src/settings_translation_file.cpp msgid "Save window size automatically when modified." -msgstr "" +msgstr "Onthoud venstergrootte wanneer veranderd." #: src/settings_translation_file.cpp msgid "Saving map received from server" @@ -5964,9 +6329,8 @@ "0 = een redelijke standaardwaarde." #: src/settings_translation_file.cpp -#, fuzzy msgid "Seabed noise" -msgstr "Grot ruispatroon #1" +msgstr "Zeebodem ruis" #: src/settings_translation_file.cpp #, fuzzy @@ -6088,7 +6452,7 @@ #: src/settings_translation_file.cpp msgid "Set the maximum character length of a chat message sent by clients." -msgstr "" +msgstr "Maximaal aantal tekens voor chatberichten van gebruikers instellen." #: src/settings_translation_file.cpp #, fuzzy @@ -6171,6 +6535,14 @@ "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" +"Grootte van mapchunks gegenereerd door mapgen, vermeld in mapblocks (16 " +"blokken). \n" +"WAARSCHUWING !: Er is geen voordeel en er zijn verschillende gevaren het \n" +"verhogen van deze waarde boven 5. \n" +"Het verlagen van deze waarde verhoogt de dichtheid van grotten en kerkers. \n" +"Het wijzigen van deze waarde is voor speciaal gebruik, maar blijft " +"ongewijzigd \n" +"aanbevolen." #: src/settings_translation_file.cpp msgid "" @@ -6188,17 +6560,16 @@ msgstr "Slice w" #: src/settings_translation_file.cpp -#, fuzzy msgid "Slope and fill work together to modify the heights." -msgstr "Helling en vulling bepalen in combinatie de hoogte" +msgstr "Helling en vulling bepalen in combinatie de hoogte." #: src/settings_translation_file.cpp msgid "Small cave maximum number" -msgstr "" +msgstr "Maximaal aantal kleine grotten" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "" +msgstr "Minimaal aantal kleine grotten" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." @@ -6235,13 +6606,12 @@ msgstr "Sluipen toets" #: src/settings_translation_file.cpp -#, fuzzy msgid "Sneaking speed" -msgstr "Loopsnelheid" +msgstr "Sluipsnelheid" #: src/settings_translation_file.cpp msgid "Sneaking speed, in nodes per second." -msgstr "" +msgstr "Sluipsnelheid, in blokken per seconde." #: src/settings_translation_file.cpp msgid "Sound" @@ -6272,10 +6642,20 @@ #: 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 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 "" +"Verspreiding van het bereik van de lichtcurve. \n" +"Bepaalt de breedte van het bereik dat moet worden versterkt. \n" +"Standaardafwijking van de lichtcurve boost Gaussian." #: src/settings_translation_file.cpp msgid "Static spawnpoint" @@ -6296,6 +6676,11 @@ msgstr "Bergen ruis" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "Sterkte van de parallax." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Sterkte van de normal-maps." @@ -6305,10 +6690,9 @@ "The 3 'boost' parameters define a range of the light\n" "curve that is boosted in brightness." msgstr "" - -#: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Sterkte van de parallax." +"Kracht van lichtcurve boost. \n" +"De 3 'boost'-parameters bepalen een bereik van het licht \n" +"curve die wordt versterkt in helderheid." #: src/settings_translation_file.cpp msgid "Strict protocol checking" @@ -6316,6 +6700,20 @@ #: src/settings_translation_file.cpp msgid "Strip color codes" +msgstr "Kleurcodes weghalen" + +#: 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 the 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 @@ -6388,10 +6786,20 @@ "this option allows enforcing it for certain node types. Note though that\n" "that is considered EXPERIMENTAL and may not work properly." msgstr "" +"Texturen op een blok kunnen worden uitgelijnd met het blok of met de " +"wereld. \n" +"De eerste modus past bij betere dingen zoals machines, meubels, enz \n" +"dit laatste zorgt ervoor dat trappen en microblokken beter in de omgeving " +"passen. \n" +"Deze mogelijkheid is echter nieuw en mag daarom niet worden gebruikt door " +"oudere servers, \n" +"Met deze optie kan deze voor bepaalde blokkentypen worden afgedwongen. Merk " +"echter op dat \n" +"die als EXPERIMENTEEL wordt beschouwd en mogelijk niet goed werkt." #: src/settings_translation_file.cpp msgid "The URL for the content repository" -msgstr "" +msgstr "De URL voor de inhoudsrepository" #: src/settings_translation_file.cpp msgid "" @@ -6402,17 +6810,15 @@ " als '/profiler save' wordt aangeroepen zonder expliciet formaat." #: src/settings_translation_file.cpp -#, fuzzy msgid "The depth of dirt or other biome filler node." -msgstr "De diepte van aarde of andersoortige toplaag" +msgstr "De diepte van aarde of andersoortige toplaag." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The file path relative to your worldpath in which profiles will be saved to." msgstr "" -"Het pad, ten opzichte van het wereld-pad, waar profilerings-gegevens worden " -"opgeslagen.\n" +"Het bestand pad ten opzichte van de wereldfolder waar profilerings-gegevens " +"worden opgeslagen." #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" @@ -6421,6 +6827,7 @@ #: src/settings_translation_file.cpp msgid "The length in pixels it takes for touch screen interaction to start." msgstr "" +"De lengte in pixels die nodig is om een touchscreeninteractie te starten." #: src/settings_translation_file.cpp msgid "" @@ -6430,6 +6837,11 @@ "Default is 1.0 (1/2 node).\n" "Requires waving liquids to be enabled." msgstr "" +"De maximale hoogte van het oppervlak van golvende vloeistoffen. \n" +"4.0 = Golfhoogte is twee knooppunten. \n" +"0.0 = Golf beweegt helemaal niet. \n" +"De standaardwaarde is 1,0 (1/2 blok). \n" +"Vereist dat golvende vloeistoffen zijn ingeschakeld." #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -6445,6 +6857,7 @@ "van beschikbare voorrechten op de server." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The radius of the volume of blocks around every player that is subject to " "the\n" @@ -6452,8 +6865,15 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" +"De straal van het volume van blokken rond elke speler die onderworpen is aan " +"de \n" +"actieve blokspullen, vermeld in mapblocks (16 blokken). \n" +"In actieve blokken worden objecten geladen en ABM's uitgevoerd. \n" +"Dit is ook het minimumbereik waarin actieve objecten (mobs) worden " +"onderhouden. \n" +"Dit moet samen met active_object_range worden geconfigureerd." #: src/settings_translation_file.cpp msgid "" @@ -6464,6 +6884,12 @@ "On other platforms, OpenGL is recommended, and it’s the only driver with\n" "shader support currently." msgstr "" +"De rendering back-end voor Irrlicht. \n" +"Na het wijzigen hiervan is een herstart vereist. \n" +"Opmerking: op Android, blijf bij OGLES1 als je het niet zeker weet! Anders " +"start de app mogelijk niet. \n" +"Op andere platforms wordt OpenGL aanbevolen en het is de enige driver met \n" +"shader-ondersteuning momenteel." #: src/settings_translation_file.cpp msgid "" @@ -6524,6 +6950,11 @@ "enabled. Also the vertical distance over which humidity drops by 10 if\n" "'altitude_dry' is enabled." msgstr "" +"De verticale afstand waarover de warmte met 20 daalt als 'altitude_chill' " +"is \n" +"ingeschakeld. Ook de verticale afstand waarover de vochtigheid met 10 daalt " +"als \n" +"'altitude_dry' is ingeschakeld." #: src/settings_translation_file.cpp #, fuzzy @@ -6541,6 +6972,7 @@ #: src/settings_translation_file.cpp msgid "Time of day when a new world is started, in millihours (0-23999)." msgstr "" +"Tijdstip waarop een nieuwe wereld wordt gestart, in mili-uren (0-23999)." #: src/settings_translation_file.cpp msgid "Time send interval" @@ -6609,9 +7041,8 @@ msgstr "URL voor de serverlijst in de multiplayer tab." #: src/settings_translation_file.cpp -#, fuzzy msgid "Undersampling" -msgstr "Rendering:" +msgstr "Rendering" #: src/settings_translation_file.cpp #, fuzzy @@ -6638,7 +7069,12 @@ #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." -msgstr "" +msgstr "Bovenste Y-limiet van kerkers." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Bovenste Y-limiet van kerkers." #: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." @@ -6662,6 +7098,10 @@ "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" +"Gebruik mip-mapping om texturen te schalen. Kan de prestaties enigszins " +"verbeteren, \n" +"vooral bij gebruik van een textuurpakket met hoge resolutie. \n" +"Gamma-correcte verkleining wordt niet ondersteund." #: src/settings_translation_file.cpp msgid "Use trilinear filtering when scaling textures." @@ -6735,7 +7175,7 @@ #: src/settings_translation_file.cpp msgid "Vertical climbing speed, in nodes per second." -msgstr "" +msgstr "Verticale klimsnelheid, in blokken per seconde." #: src/settings_translation_file.cpp msgid "Vertical screen synchronization." @@ -6772,7 +7212,7 @@ #: src/settings_translation_file.cpp msgid "Virtual joystick triggers aux button" -msgstr "" +msgstr "Virtuele joystick activeert aux-knop" #: src/settings_translation_file.cpp msgid "Volume" @@ -6803,7 +7243,7 @@ #: src/settings_translation_file.cpp msgid "Walking and flying speed, in nodes per second." -msgstr "" +msgstr "Loop- en vliegsnelheid, in blokken per seconde." #: src/settings_translation_file.cpp msgid "Walking speed" @@ -6811,7 +7251,7 @@ #: src/settings_translation_file.cpp msgid "Walking, flying and climbing speed in fast mode, in nodes per second." -msgstr "" +msgstr "Loop-, vlieg- en klimsnelheid in snelle modus, in blokken per seconde." #: src/settings_translation_file.cpp msgid "Water level" @@ -6940,12 +7380,19 @@ "Maak het einde van het zichtbereik mistig, zodat het einde niet opvalt." #: src/settings_translation_file.cpp +#, fuzzy 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 "" +"Of geluiden moeten worden gedempt. U kunt het dempen van geluiden op elk " +"moment opheffen, tenzij de \n" +"geluidssysteem is uitgeschakeld (enable_sound = false). \n" +"In de game kun je de mute-status wijzigen met de mute-toets of door de te " +"gebruiken \n" +"pauzemenu." #: src/settings_translation_file.cpp msgid "" @@ -6996,10 +7443,18 @@ "See also texture_min_size.\n" "Warning: This option is EXPERIMENTAL!" msgstr "" +"Wereldwijd uitgelijnde texturen kunnen worden geschaald over meerdere " +"knooppunten. Echter, \n" +"de server verzendt mogelijk niet de gewenste weegschaal, vooral als u " +"gebruikt \n" +"een speciaal ontworpen texture pack; met deze optie probeert de gebruiker\n" +"om de schaal automatisch te bepalen op basis van de textuurgrootte. \n" +"Zie ook texture_min_size. \n" +"Waarschuwing: deze optie is EXPERIMENTEEL!" #: src/settings_translation_file.cpp msgid "World-aligned textures mode" -msgstr "" +msgstr "Wereldwijd uitgelijnde texturenmodus" #: src/settings_translation_file.cpp msgid "Y of flat ground." @@ -7010,6 +7465,8 @@ "Y of mountain density gradient zero level. Used to shift mountains " "vertically." msgstr "" +"Y van het niveau van de gradiënt nul van de bergdichtheid. Gebruikt om " +"bergen verticaal te verschuiven." #: src/settings_translation_file.cpp #, fuzzy @@ -7021,6 +7478,14 @@ msgstr "Y-afstand waar over grotten uitbreiden tot volle grootte." #: 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 "Y-niveau van gemiddeld terrein oppervlak." @@ -7052,120 +7517,124 @@ #: src/settings_translation_file.cpp msgid "cURL timeout" -msgstr "cURL timeout" +msgstr "cURL time-out" + +#~ msgid "Toggle Cinematic" +#~ msgstr "Cinematic modus aan/uit" #, fuzzy -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Aangepaste gamma voor de licht-tabellen. Lagere waardes zijn helderder.\n" -#~ "Deze instelling wordt enkel gebruikt door de cliënt, en wordt genegeerd " -#~ "door de server." +#~ msgid "Select Package File:" +#~ msgstr "Selecteer Modbestand:" #, fuzzy -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Bepaalt de dichtheid van drijvende bergen.\n" -#~ "Dit wordt bijgevoegd bij de 'np_mountain' ruis waarde." +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Minimale diepte van grote semi-willekeurige grotten." -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgid "Waving Water" +#~ msgstr "Golvend water" + +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Y-niveau tot waar de schaduw van drijvend land reikt." + +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "Y-niveau van drijvend land middelpunt en vijver oppervlak." + +#~ msgid "Waving water" +#~ msgstr "Golvend water" + +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" -#~ "Bepaalt breedte van tunnels, een kleinere waarde maakt bredere tunnels." +#~ "Variatie van de heuvel hoogte en vijver diepte op drijvend egaal terrein." #, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "Steilheid Van de meren" - #~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ "Typical maximum height, above and below midpoint, of floatland mountains." #~ msgstr "" -#~ "Bepaalt gebieden van drijvend glijdend terrein.\n" -#~ "Drijvend glijdend terrein ontstaat wanneer ruis > 0." - -#~ msgid "Enable VBO" -#~ msgstr "VBO aanzetten" +#~ "Typisch maximum hoogte, boven en onder het middelpunt van drijvend berg " +#~ "terrein." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Schakelt filmisch tone-mapping in" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Dit font wordt gebruikt voor bepaalde talen." -#~ msgid "Floatland base height noise" -#~ msgstr "Drijvend land basis hoogte ruis" +#~ msgid "Shadow limit" +#~ msgstr "Schaduw limiet" -#~ msgid "Floatland base noise" -#~ msgstr "Drijvend land basis ruis" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Pad van TrueType font of bitmap." #, fuzzy -#~ msgid "Floatland level" -#~ msgstr "Waterniveau" +#~ msgid "Lava depth" +#~ msgstr "Diepte van grote grotten" -#~ msgid "Floatland mountain density" -#~ msgstr "Drijvend gebergte dichtheid" +#~ msgid "IPv6 support." +#~ msgstr "IPv6 ondersteuning." #, fuzzy -#~ msgid "Floatland mountain exponent" -#~ msgstr "Drijvend gebergte dichtheid" - -#~ msgid "Floatland mountain height" -#~ msgstr "Drijvend gebergte hoogte" +#~ msgid "Gamma" +#~ msgstr "Gamma" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "Fontschaduw alphawaarde (ondoorzichtigheid, tussen 0 en 255)." -#, fuzzy -#~ msgid "Gamma" -#~ msgstr "Gamma" +#~ msgid "Floatland mountain height" +#~ msgstr "Drijvend gebergte hoogte" -#~ msgid "IPv6 support." -#~ msgstr "IPv6 ondersteuning." +#~ msgid "Floatland base height noise" +#~ msgstr "Drijvend land basis hoogte ruis" -#, fuzzy -#~ msgid "Lava depth" -#~ msgstr "Diepte van grote grotten" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Schakelt filmisch tone-mapping in" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Pad van TrueType font of bitmap." +#~ msgid "Enable VBO" +#~ msgstr "VBO aanzetten" -#~ msgid "Shadow limit" -#~ msgstr "Schaduw limiet" +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "Bepaalt gebieden van drijvend glijdend terrein.\n" +#~ "Drijvend glijdend terrein ontstaat wanneer ruis > 0." -#~ msgid "This font will be used for certain languages." -#~ msgstr "Dit font wordt gebruikt voor bepaalde talen." +#, fuzzy +#~ msgid "Darkness sharpness" +#~ msgstr "Steilheid Van de meren" + +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "" +#~ "Bepaalt breedte van tunnels, een kleinere waarde maakt bredere tunnels." #, fuzzy #~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." #~ msgstr "" -#~ "Typisch maximum hoogte, boven en onder het middelpunt van drijvend berg " -#~ "terrein." +#~ "Bepaalt de dichtheid van drijvende bergen.\n" +#~ "Dit wordt bijgevoegd bij de 'np_mountain' ruis waarde." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#, fuzzy +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." #~ msgstr "" -#~ "Variatie van de heuvel hoogte en vijver diepte op drijvend egaal terrein." - -#~ msgid "Waving water" -#~ msgstr "Golvend water" +#~ "Aangepaste gamma voor de licht-tabellen. Lagere waardes zijn helderder.\n" +#~ "Deze instelling wordt enkel gebruikt door de cliënt, en wordt genegeerd " +#~ "door de server." -#~ msgid "Y-level of floatland midpoint and lake surface." -#~ msgstr "Y-niveau van drijvend land middelpunt en vijver oppervlak." +#~ msgid "Path to save screenshots at." +#~ msgstr "Pad waar screenshots bewaard worden." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Y-niveau tot waar de schaduw van drijvend land reikt." +#~ msgid "Parallax occlusion strength" +#~ msgstr "Parallax occlusie sterkte" -#~ msgid "Waving Water" -#~ msgstr "Golvend water" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Emerge-wachtrij voor lezen" -#, fuzzy -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Minimale diepte van grote semi-willekeurige grotten." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "$1 wordt gedownload, een ogenblik geduld alstublieft..." -#, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "Selecteer Modbestand:" +#~ msgid "Back" +#~ msgstr "Terug" -#~ msgid "Toggle Cinematic" -#~ msgstr "Cinematic modus aan/uit" +#~ msgid "Ok" +#~ msgstr "Oké" diff -Nru minetest-5.2.0/po/nn/minetest.po minetest-5.3.0/po/nn/minetest.po --- minetest-5.2.0/po/nn/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/nn/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Norwegian Nynorsk (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-03-31 10:14+0000\n" "Last-Translator: sfan5 \n" "Language-Team: Norwegian Nynorsk 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 "FPS in pause menu" msgstr "" @@ -2898,6 +3112,34 @@ 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 "Fly key" msgstr "" @@ -2951,6 +3193,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4246,14 +4494,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4317,6 +4557,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4383,7 +4627,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4471,10 +4717,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4542,13 +4784,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4633,6 +4875,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4791,9 +5037,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4870,10 +5113,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4883,7 +5122,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4917,6 +5158,14 @@ 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 "" @@ -4985,6 +5234,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5423,6 +5684,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5445,6 +5713,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5456,15 +5728,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5581,7 +5863,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5734,6 +6016,10 @@ 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 "" @@ -6057,6 +6343,14 @@ 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 "" @@ -6088,8 +6382,17 @@ msgid "cURL timeout" msgstr "" +#~ msgid "Toggle Cinematic" +#~ msgstr "Slå på/av kameramodus" + #~ msgid "Select Package File:" #~ msgstr "Velje eit pakke dokument:" -#~ msgid "Toggle Cinematic" -#~ msgstr "Slå på/av kameramodus" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Henter og installerer $1, ver vennleg og vent..." + +#~ msgid "Back" +#~ msgstr "Attende" + +#~ msgid "Ok" +#~ msgstr "OK" diff -Nru minetest-5.2.0/po/pl/minetest.po minetest-5.3.0/po/pl/minetest.po --- minetest-5.2.0/po/pl/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/pl/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Polish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-03-31 10:14+0000\n" -"Last-Translator: sfan5 \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-09 12:14+0000\n" +"Last-Translator: Mikołaj Zaremba \n" "Language-Team: Polish \n" "Language: pl\n" @@ -13,7 +13,7 @@ "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 4.0-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -23,10 +23,13 @@ msgid "You died" msgstr "Umarłeś" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred in a Lua script:" -msgstr "Wystąpił błąd w skrypcie Lua, na przykład w modyfikacji:" +msgstr "Wystąpił błąd w skrypcie Lua:" #: builtin/fstk/ui.lua msgid "An error occurred:" @@ -37,10 +40,6 @@ msgstr "Menu główne" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "OK" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Połącz ponownie" @@ -68,7 +67,7 @@ msgid "Try reenabling public serverlist and check your internet connection." msgstr "" "Spróbuj ponownie włączyć publiczną listę serwerów i sprawdź swoje połączenie " -"internetowe." +"z siecią Internet." #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." @@ -117,31 +116,32 @@ "znaki. Tylko znaki od [a-z, 0-9 i _] są dozwolone." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No (optional) dependencies" -msgstr "Dodatkowe zależności:" +msgstr "Brak (dodatkowych) zależności" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." msgstr "Brak dostępnych informacji o grze." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No hard dependencies" -msgstr "Brak wymaganych zależności." +msgstr "Brak wymaganych zależności" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." msgstr "Brak dostępnych informacji o modzie." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No optional dependencies" -msgstr "Dodatkowe zależności:" +msgstr "Brak dodatkowych zależności." #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" @@ -165,16 +165,17 @@ msgstr "Wszystkie zasoby" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Backspace" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Powrót do menu głównego" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Pobieranie i instalowanie $1, proszę czekaj..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Downloading..." +msgstr "Ładowanie..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -196,7 +197,7 @@ #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "Nie można pobrać żadnych pakietów" +msgstr "Nie można pobrać pakietów" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" @@ -219,15 +220,58 @@ msgid "Update" msgstr "Aktualizacja" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Istnieje już świat o nazwie \"$1\"" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +#, fuzzy +msgid "Altitude chill" +msgstr "Wysokość mrozu" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Altitude dry" +msgstr "Wysokość mrozu" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biome blending" +msgstr "Szum biomu" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biomes" +msgstr "Szum biomu" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caverns" +msgstr "Szum jaskini #1" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caves" +msgstr "Oktawy" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Utwórz" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "Iteracje" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Pobierz tryb gry, taki jak Minetest Game, z minetest.net" @@ -235,25 +279,153 @@ msgid "Download one from minetest.net" msgstr "Ściągnij taką z minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Dungeons" +msgstr "Minimalna wartość Y lochu" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Floating landmasses in the sky" +msgstr "Gęstość gór na latających wyspach" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Floatlands (experimental)" +msgstr "Poziom wznoszonego terenu" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Gra" +#: 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 +#, fuzzy +msgid "Humid rivers" +msgstr "Sterownik graficzny" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +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 "Generator mapy" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Flagi generatora mapy" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Mapgen-specific flags" +msgstr "Generator mapy flat flagi" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Mountains" +msgstr "Szum góry" + +#: 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 "Nie wybrano gry" #: 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 +#, fuzzy +msgid "Rivers" +msgstr "Rozmiar rzeki" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Ziarno losowości" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Terrain surface erosion" +msgstr "Szum podłoża" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Vary river depth" +msgstr "Głębokość rzeki" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "" "Uwaga: Minimal development test jest przeznaczony tylko dla developerów." @@ -568,6 +740,10 @@ msgstr "Udostępnij serwer" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Nazwa gracza/Hasło" @@ -797,9 +973,8 @@ msgstr "Falujące liście" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Waving Liquids" -msgstr "Falujące bloki" +msgstr "Fale (Ciecze)" #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" @@ -1224,6 +1399,14 @@ msgstr "Głośność wyciszona" #: 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 "Głośność włączona ponownie" @@ -1255,7 +1438,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "Powiększenie jest obecnie wyłączone przez grę lub mod" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "ok" @@ -1556,7 +1739,7 @@ msgstr "Zarejestruj się i dołącz" #: src/gui/guiConfirmRegistration.cpp -#, fuzzy, c-format +#, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" "If you proceed, a new account using your credentials will be created on this " @@ -1564,10 +1747,11 @@ "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" -"Próbujesz po raz pierwszy wejść na serwer %1$s1 o nazwie \"%2$s2\" . Jeśli " -"kontynuujesz na serwerze zostanie utworzone nowe konto z Twoim danymi.\n" -"Wpisz ponownie hasło i wciśnij Zarejestruj oraz Dołącz, aby potwierdzić " -"utworzenie konta lub wciśnij Anuluj, aby przerwać ten proces." +"Próbujesz wejść na serwer \"%s\" o nazwie \"%2$s2\" po raz pierwszy . Jeśli " +"zdecydujesz się kontynuować na serwerze zostanie utworzone nowe konto z " +"Twoim danymi.\n" +"Wpisz ponownie hasło i wciśnij \"Zarejestruj się i Dołącz\" aby potwierdzić " +"utworzenie konta lub wciśnij \"Anuluj\" aby przerwać ten proces." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" @@ -1681,7 +1865,7 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Special" -msgstr "Specjalny" +msgstr "Specialne" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle HUD" @@ -1801,7 +1985,6 @@ "węzłech." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(X,Y,Z) scale of fractal in nodes.\n" "Actual fractal size will be 2 to 3 times larger.\n" @@ -1811,7 +1994,7 @@ "Default is for a vertically-squashed shape suitable for\n" "an island, set all 3 numbers equal for the raw shape." msgstr "" -"Skala (X.Y.Z) fraktali w blokach.\n" +"Skala (X.Y.Z) fraktali w węzłach.\n" "Rzeczywisty rozmiar fraktali będzie 2, 3 raz większy.\n" "Te wartości mogą być bardzo wysokie, \n" "fraktal nie musi mieścić się wewnątrz świata.\n" @@ -1866,6 +2049,11 @@ msgstr "Modele 3D" #: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode parallax strength" +msgstr "Siła map normlanych" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "Szum 3d określający olbrzymie jaskinie." @@ -1878,6 +2066,14 @@ "Określa również strukturę wznoszącego się terenu górzystego." #: 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 "Szum 3d określający strukturę kanionów rzecznych." @@ -1943,7 +2139,8 @@ msgstr "Interwał zapisu mapy" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +#, fuzzy +msgid "Absolute limit of queued blocks to emerge" msgstr "Bezwzględny limit kolejki" #: src/settings_translation_file.cpp @@ -1994,6 +2191,16 @@ "ekranów 4k." #: 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 "Advanced" msgstr "Zaawansowane" @@ -2005,11 +2212,11 @@ "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 -#, fuzzy -msgid "Altitude chill" -msgstr "Wysokość mrozu" +"Modyfikuje krzywą światła przez nałożenie na nią 'korekcji gamma'.\n" +"Im wyższa wartość, tym jaśniejsze światło ze średniego i niskiego zakresu.\n" +"Wartość '1.0' oznacza brak zmian.\n" +"Tylko światło dnia i sztuczne światło są znacząco zmieniane, \n" +"światło nocne podlega zmianie w minimalnym stopniu." #: src/settings_translation_file.cpp msgid "Always fly and fast" @@ -2293,11 +2500,21 @@ "Może być konieczny dla mniejszych ekranów." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "Rozmiar czcionki" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Klawisz czatu" #: src/settings_translation_file.cpp #, fuzzy +msgid "Chat log level" +msgstr "Poziom logowania debugowania" + +#: src/settings_translation_file.cpp +#, fuzzy msgid "Chat message count limit" msgstr "Komunikat o stanie połączenia" @@ -2585,6 +2802,11 @@ msgstr "Domyślny format raportu" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Domyślna gra" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2944,6 +3166,16 @@ "pomiędzy blokami kiedy ustawiona powyżej 0." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "FPS podczas pauzy w menu" @@ -3066,6 +3298,41 @@ msgstr "Ustaw wirtualny joystick" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Gęstość gór na latających wyspach" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Maksymalna wartość Y lochu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Minimalna wartość Y lochu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Podstawowy szum wznoszącego się terenu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Gęstość gór na latających wyspach" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Podstawowy szum wznoszącego się terenu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Poziom wznoszonego terenu" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Klawisz latania" @@ -3119,6 +3386,12 @@ 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 #, fuzzy msgid "" "Format of player chat messages. The following strings are valid " @@ -3353,7 +3626,7 @@ #: src/settings_translation_file.cpp msgid "Height select noise" -msgstr "Szum wyboru wysokości" +msgstr "Rożnorodność wysokości" #: src/settings_translation_file.cpp msgid "High-precision FPU" @@ -3763,7 +4036,7 @@ #: src/settings_translation_file.cpp msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." -msgstr "Wysokość konsoli w grze, od 0.1 (10%) do 1.0 (100%)." +msgstr "Przeźroczystość konsoli w grze (od 0.0 do 1.0)." #: src/settings_translation_file.cpp msgid "Inc. volume key" @@ -4834,14 +5107,6 @@ msgstr "Centrum środkowego przyśpieszenia krzywej światła" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Limit oczekiwań na dysku" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Limit kolejek oczekujących do wytworzenia" - -#: 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" @@ -4918,6 +5183,11 @@ 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." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Skrypt głównego menu" @@ -5007,7 +5277,9 @@ #, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "Właściwości generowania mapy określające Mapgen v7.\n" "\"grzbiety\" aktywują rzeki." @@ -5111,10 +5383,6 @@ msgstr "Generator mapy debugowanie" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Flagi generatora mapy" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Nazwa generatora mapy" @@ -5185,17 +5453,19 @@ "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" -"Set to blank for an appropriate amount to be chosen automatically." +"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." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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." @@ -5294,6 +5564,10 @@ msgstr "Metoda użyta do podświetlenia wybranego obiektu." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Minimapa" @@ -5465,9 +5739,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5552,10 +5823,6 @@ msgstr "Skala parallax occlusion" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Siła zamknięcia paralaksy" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5565,8 +5832,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Ścieżka, pod którą zapisywane są zrzuty ekranu." +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 "" @@ -5603,6 +5872,15 @@ msgstr "Pauza, gdy okno jest nieaktywne" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "Limit kolejek oczekujących do wytworzenia" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Fizyka" @@ -5688,6 +5966,18 @@ msgstr "Profilowanie modyfikacji" #: 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -6203,6 +6493,13 @@ "Pliki nieaktualne będą pobierane standardową metodą." #: 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 #, fuzzy msgid "" "Spread of light curve boost range.\n" @@ -6231,6 +6528,11 @@ msgstr "Szum góry" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "Siła paralaksy." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Siła generowanych zwykłych map." @@ -6242,10 +6544,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Siła paralaksy." - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "Sztywne sprawdzanie protokołu" @@ -6255,6 +6553,20 @@ msgstr "Usuń kody kolorów" #: 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 the 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 "Synchroniczny SQLite" @@ -6383,7 +6695,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6565,6 +6877,11 @@ 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." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Włącz chmury 3D zamiast płaskich." @@ -6948,6 +7265,14 @@ "rozmiarów." #: 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 "Wartość Y przeciętnego terenu." @@ -6979,132 +7304,137 @@ msgid "cURL timeout" msgstr "Limit czasu cURL" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Ustaw kodowanie gamma dla tablic świateł. Wyższe wartości to większa " -#~ "jasność.\n" -#~ "To ustawienie jest tylko dla klientów, ignorowane przez serwer." +#~ msgid "Toggle Cinematic" +#~ msgstr "Przełącz na tryb Cinematic" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Zmienia sposób w jaki podobne do gór latające wyspy zwężają się ku " -#~ "środkowi nad i pod punktem środkowym." +#~ msgid "Select Package File:" +#~ msgstr "Wybierz plik paczki:" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Centrum przyśpieszenia środkowego krzywej światła." +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Y górnej granicy lawy dużych jaskiń." -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Kontroluje gęstość wznoszącego się terenu górzystego.\n" -#~ "Jest to wartość dodana do wartość szumu 'np_mountain'." +#~ msgid "Waving Water" +#~ msgstr "Falująca woda" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgid "Whether dungeons occasionally project from the terrain." +#~ msgstr "Określa czy lochy mają być czasem przez generowane teren." + +#~ msgid "Projecting dungeons" +#~ msgstr "Projekcja lochów" + +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Wysokość do której rozciągają się cienie wznoszącego terenu." + +#~ msgid "Y-level of floatland midpoint and lake surface." #~ msgstr "" -#~ "Kontroluje szerokość tuneli, mniejsze wartości tworzą szersze tunele." +#~ "Wysokość średniego punktu wznoszącego się terenu oraz powierzchni jezior." -#~ msgid "Darkness sharpness" -#~ msgstr "Ostrość ciemności" +#~ msgid "Waving water" +#~ msgstr "Falująca woda" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" -#~ "Określa obszary wznoszącego się gładkiego terenu.\n" -#~ "Wygładzone powierzchnie pojawiają się gdy szum > 0." +#~ "Zmienność wysokości wzgórz oraz głębokości jezior na gładkim terenie " +#~ "wznoszącym się." -#~ msgid "Enable VBO" -#~ msgstr "Włącz VBO" +#~ msgid "" +#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgstr "" +#~ "Maksymalna, standardowa wysokość, powyżej lub poniżej średniego punktu " +#~ "górzystego terenu." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Włącz filmic tone mapping" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Ta czcionka zostanie użyta w niektórych językach." -#~ msgid "Floatland base height noise" -#~ msgstr "Podstawowy szum wysokości wznoszącego się terenu" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Siłą przyśpieszenia środkowego krzywej światła." -#~ msgid "Floatland base noise" -#~ msgstr "Podstawowy szum wznoszącego się terenu" +#~ msgid "Shadow limit" +#~ msgstr "Limit cieni" -#~ msgid "Floatland level" -#~ msgstr "Poziom wznoszonego terenu" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Ścieżka do pliku .ttf lub bitmapy." -#~ msgid "Floatland mountain density" -#~ msgstr "Gęstość gór na latających wyspach" +#~ msgid "Lightness sharpness" +#~ msgstr "Ostrość naświetlenia" #, fuzzy -#~ msgid "Floatland mountain exponent" -#~ msgstr "Gęstość gór na latających wyspach" - -#~ msgid "Floatland mountain height" -#~ msgstr "Wysokość gór latających wysp" +#~ msgid "Lava depth" +#~ msgstr "Głębia dużej jaskini" -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "Kanał alfa cienia czcionki (nieprzeźroczystość, od 0 do 255)." +#~ msgid "IPv6 support." +#~ msgstr "Wsparcie IPv6." #~ msgid "Gamma" #~ msgstr "Gamma" -#~ msgid "IPv6 support." -#~ msgstr "Wsparcie IPv6." +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "Kanał alfa cienia czcionki (nieprzeźroczystość, od 0 do 255)." -#, fuzzy -#~ msgid "Lava depth" -#~ msgstr "Głębia dużej jaskini" +#~ msgid "Floatland mountain height" +#~ msgstr "Wysokość gór latających wysp" -#~ msgid "Lightness sharpness" -#~ msgstr "Ostrość naświetlenia" +#~ msgid "Floatland base height noise" +#~ msgstr "Podstawowy szum wysokości wznoszącego się terenu" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Ścieżka do pliku .ttf lub bitmapy." +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Włącz filmic tone mapping" -#~ msgid "Shadow limit" -#~ msgstr "Limit cieni" +#~ msgid "Enable VBO" +#~ msgstr "Włącz VBO" -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Siłą przyśpieszenia środkowego krzywej światła." +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "Określa obszary wznoszącego się gładkiego terenu.\n" +#~ "Wygładzone powierzchnie pojawiają się gdy szum > 0." -#~ msgid "This font will be used for certain languages." -#~ msgstr "Ta czcionka zostanie użyta w niektórych językach." +#~ msgid "Darkness sharpness" +#~ msgstr "Ostrość ciemności" -#~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "" -#~ "Maksymalna, standardowa wysokość, powyżej lub poniżej średniego punktu " -#~ "górzystego terenu." +#~ "Kontroluje szerokość tuneli, mniejsze wartości tworzą szersze tunele." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." #~ msgstr "" -#~ "Zmienność wysokości wzgórz oraz głębokości jezior na gładkim terenie " -#~ "wznoszącym się." +#~ "Kontroluje gęstość wznoszącego się terenu górzystego.\n" +#~ "Jest to wartość dodana do wartość szumu 'np_mountain'." -#~ msgid "Waving water" -#~ msgstr "Falująca woda" +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Centrum przyśpieszenia środkowego krzywej światła." -#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." #~ msgstr "" -#~ "Wysokość średniego punktu wznoszącego się terenu oraz powierzchni jezior." +#~ "Zmienia sposób w jaki podobne do gór latające wyspy zwężają się ku " +#~ "środkowi nad i pod punktem środkowym." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Wysokość do której rozciągają się cienie wznoszącego terenu." +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Ustaw kodowanie gamma dla tablic świateł. Wyższe wartości to większa " +#~ "jasność.\n" +#~ "To ustawienie jest tylko dla klientów, ignorowane przez serwer." -#~ msgid "Projecting dungeons" -#~ msgstr "Projekcja lochów" +#~ msgid "Path to save screenshots at." +#~ msgstr "Ścieżka, pod którą zapisywane są zrzuty ekranu." -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "Określa czy lochy mają być czasem przez generowane teren." +#~ msgid "Parallax occlusion strength" +#~ msgstr "Siła zamknięcia paralaksy" -#~ msgid "Waving Water" -#~ msgstr "Falująca woda" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Limit oczekiwań na dysku" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Y górnej granicy lawy dużych jaskiń." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Pobieranie i instalowanie $1, proszę czekaj..." -#~ msgid "Select Package File:" -#~ msgstr "Wybierz plik paczki:" +#~ msgid "Back" +#~ msgstr "Backspace" -#~ msgid "Toggle Cinematic" -#~ msgstr "Przełącz na tryb Cinematic" +#~ msgid "Ok" +#~ msgstr "OK" diff -Nru minetest-5.2.0/po/pt/minetest.po minetest-5.3.0/po/pt/minetest.po --- minetest-5.2.0/po/pt/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/pt/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Portuguese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-03-31 10:14+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese 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 "FPS in pause menu" msgstr "FPS em menu de pausa" @@ -3075,6 +3307,41 @@ msgstr "Joystick virtual fixo" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Densidade da terra flutuante montanhosa" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Y máximo da dungeon" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Y mínimo da dungeon" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Ruído base de terra flutuante" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Expoente de terras flutuantes montanhosas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Ruído base de terra flutuante" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Nível de água" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Tecla de voar" @@ -3128,6 +3395,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4762,14 +5035,6 @@ msgstr "Centro do aumento leve da curva de luz" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Limite de filas emerge no disco" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Limite de filas emerge para gerar" - -#: 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" @@ -4845,6 +5110,11 @@ msgstr "Menor limite Y de dungeons." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Menor limite Y de dungeons." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Menu principal de scripts" @@ -4929,9 +5199,12 @@ "a marcação 'selvas' é ignorada." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "Atributos de geração de mapa específicos ao gerador V7.\n" "'ridges' habilitam os rios." @@ -5023,10 +5296,6 @@ msgstr "Depuração do gerador de mapa" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Flags do mapgen" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Nome do gerador de mapa" @@ -5100,18 +5369,20 @@ "Número máximo de blocos que podem ser enfileirados para o carregamento." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Número máximo de blocos para serem enfileirados que estão a ser gerados.\n" "Definido em branco para uma quantidade apropriada ser escolhida " "automaticamente." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Número máximo de blocos para ser enfileirado que serão carregados do " "ficheiro.\n" @@ -5212,6 +5483,10 @@ msgstr "Método usado para destacar o objeto selecionado." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Mini-mapa" @@ -5384,11 +5659,9 @@ msgstr "Número de seguimentos de emersão" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5487,10 +5760,6 @@ msgstr "Escala de Oclusão de paralaxe" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Força da oclusão paralaxe" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5500,8 +5769,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Caminho para onde salvar screenshots." +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 "" @@ -5538,6 +5809,15 @@ msgstr "Pausa quando o foco da janela é perdido" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "Limite de filas emerge para gerar" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Física" @@ -5616,6 +5896,18 @@ msgstr "Analizando" #: 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -6135,6 +6427,13 @@ "Arquivos que não estão presentes serão obtidos da maneira usual por UDP." #: 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 #, fuzzy msgid "" "Spread of light curve boost range.\n" @@ -6161,6 +6460,11 @@ msgstr "Extensão do ruído da montanha de passo" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "Intensidade de paralaxe." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Intensidade de normalmaps gerados." @@ -6172,10 +6476,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Intensidade de paralaxe." - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "Verificação rígida de protocolo" @@ -6184,6 +6484,20 @@ msgstr "Códigos de faixa de cor" #: 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 the 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 "SQLite síncrono" @@ -6311,6 +6625,7 @@ "servidor e dos modificadores." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The radius of the volume of blocks around every player that is subject to " "the\n" @@ -6318,7 +6633,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" "O raio do volume de blocos em volta de cada jogador que é sujeito a coisas " "de bloco ativo, em mapblocks (16 nós).\n" @@ -6519,6 +6834,11 @@ msgstr "Limite topo Y de dungeons." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Limite topo Y de dungeons." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Usar nuvens 3D em vez de planas." @@ -6906,6 +7226,14 @@ "Distância em Y sobre a qual as cavernas se expandem até o tamanho total." #: 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 "Nível em Y da superfície média do terreno." @@ -6937,138 +7265,144 @@ msgid "cURL timeout" msgstr "Tempo limite de cURL" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Ajustar a gama de codificação para a tabela de claridade. Os números mais " -#~ "elevados são mais brilhantes.\n" -#~ "Esta configuração é somente para o cliente e é ignorada pelo servidor." +#~ msgid "Toggle Cinematic" +#~ msgstr "Ativar/Desativar câmera cinemática" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Altera como terras flutuantes montanhosas afunilam acima e abaixo do " -#~ "ponto médio." +#~ msgid "Select Package File:" +#~ msgstr "Selecionar o ficheiro do pacote:" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Centro do aumento da curva de luz." +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Limite Y máximo de lava em grandes cavernas." -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Controla a densidade do terreno montanhoso nas ilhas flutuantes.\n" -#~ "É um parâmetro adicionado ao valor de ruído 'mgv7_np_mountain'." +#~ msgid "Waving Water" +#~ msgstr "Água ondulante" -#~ 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." +#~ msgid "Whether dungeons occasionally project from the terrain." +#~ msgstr "Se dungeons ocasionalmente se projetam do terreno." -#~ msgid "Darkness sharpness" -#~ msgstr "Nitidez da escuridão" +#~ msgid "Projecting dungeons" +#~ msgstr "Projetando dungeons" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Nível Y para o qual as sombras de ilhas flutuantes se estendem." + +#~ msgid "Y-level of floatland midpoint and lake surface." #~ msgstr "" -#~ "Define áreas de terra flutuante em terreno suavizado.\n" -#~ "Terrenos suavizados ocorrem quando o ruído é menor que zero." +#~ "Nível em Y do ponto médio da montanha flutuante e da superfície do lago." + +#~ msgid "Waving water" +#~ msgstr "Balançar das Ondas" + +#~ 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 " +#~ "Terra Flutuante." #~ msgid "" -#~ "Deprecated, define and locate cave liquids using biome definitions " -#~ "instead.\n" -#~ "Y of upper limit of lava in large caves." +#~ "Typical maximum height, above and below midpoint, of floatland mountains." #~ msgstr "" -#~ "Depreciar, definir e localizar líquidos de cavernas usando definições de " -#~ "biomas.\n" -#~ "Y do limite superior de lava em grandes cavernas." +#~ "Altura máxima típica, acima e abaixo do ponto médio, do terreno da " +#~ "montanha flutuante." -#~ msgid "Enable VBO" -#~ msgstr "Ativar VBO" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Esta fonte será usada para determinados idiomas." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Ativa mapeamento de tons fílmico" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Força do aumento médio da curva de luz." -#~ msgid "Floatland base height noise" -#~ msgstr "Altura base de ruído de terra flutuante" +#~ msgid "Shadow limit" +#~ msgstr "Limite de mapblock" -#~ msgid "Floatland base noise" -#~ msgstr "Ruído base de terra flutuante" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Caminho para TrueTypeFont ou bitmap." -#~ msgid "Floatland level" -#~ msgstr "Nível de água" +#~ msgid "Lightness sharpness" +#~ msgstr "Nitidez da iluminação" -#~ msgid "Floatland mountain density" -#~ msgstr "Densidade da terra flutuante montanhosa" +#~ msgid "Lava depth" +#~ msgstr "Profundidade da lava" -#~ msgid "Floatland mountain exponent" -#~ msgstr "Expoente de terras flutuantes montanhosas" +#~ msgid "IPv6 support." +#~ msgstr "Suporte IPv6." -#~ msgid "Floatland mountain height" -#~ msgstr "Altura da terra flutuante montanhosa" +#~ msgid "Gamma" +#~ msgstr "Gama" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "Opacidade da sombra da fonte (entre 0 e 255)." -#~ msgid "Gamma" -#~ msgstr "Gama" +#~ msgid "Floatland mountain height" +#~ msgstr "Altura da terra flutuante montanhosa" -#~ msgid "IPv6 support." -#~ msgstr "Suporte IPv6." +#~ msgid "Floatland base height noise" +#~ msgstr "Altura base de ruído de terra flutuante" -#~ msgid "Lava depth" -#~ msgstr "Profundidade da lava" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Ativa mapeamento de tons fílmico" -#~ msgid "Lightness sharpness" -#~ msgstr "Nitidez da iluminação" +#~ msgid "Enable VBO" +#~ msgstr "Ativar VBO" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Caminho para TrueTypeFont ou bitmap." +#~ msgid "" +#~ "Deprecated, define and locate cave liquids using biome definitions " +#~ "instead.\n" +#~ "Y of upper limit of lava in large caves." +#~ msgstr "" +#~ "Depreciar, definir e localizar líquidos de cavernas usando definições de " +#~ "biomas.\n" +#~ "Y do limite superior de lava em grandes cavernas." -#~ msgid "Shadow limit" -#~ msgstr "Limite de mapblock" +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "Define áreas de terra flutuante em terreno suavizado.\n" +#~ "Terrenos suavizados ocorrem quando o ruído é menor que zero." -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Força do aumento médio da curva de luz." +#~ msgid "Darkness sharpness" +#~ msgstr "Nitidez da escuridão" -#~ msgid "This font will be used for certain languages." -#~ msgstr "Esta fonte será usada para determinados idiomas." +#~ 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." #~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." -#~ msgstr "" -#~ "Altura máxima típica, acima e abaixo do ponto médio, do terreno da " -#~ "montanha flutuante." - -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." #~ msgstr "" -#~ "Variação da altura da colina e profundidade do lago no terreno liso da " -#~ "Terra Flutuante." +#~ "Controla a densidade do terreno montanhoso nas ilhas flutuantes.\n" +#~ "É um parâmetro adicionado ao valor de ruído 'mgv7_np_mountain'." -#~ msgid "Waving water" -#~ msgstr "Balançar das Ondas" +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Centro do aumento da curva de luz." -#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." #~ msgstr "" -#~ "Nível em Y do ponto médio da montanha flutuante e da superfície do lago." +#~ "Altera como terras flutuantes montanhosas afunilam acima e abaixo do " +#~ "ponto médio." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Nível Y para o qual as sombras de ilhas flutuantes se estendem." +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Ajustar a gama de codificação para a tabela de claridade. Os números mais " +#~ "elevados são mais brilhantes.\n" +#~ "Esta configuração é somente para o cliente e é ignorada pelo servidor." -#~ msgid "Projecting dungeons" -#~ msgstr "Projetando dungeons" +#~ msgid "Path to save screenshots at." +#~ msgstr "Caminho para onde salvar screenshots." -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "Se dungeons ocasionalmente se projetam do terreno." +#~ msgid "Parallax occlusion strength" +#~ msgstr "Força da oclusão paralaxe" -#~ msgid "Waving Water" -#~ msgstr "Água ondulante" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Limite de filas emerge no disco" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Limite Y máximo de lava em grandes cavernas." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Descarregando e instalando $1, por favor aguarde..." -#~ msgid "Select Package File:" -#~ msgstr "Selecionar o ficheiro do pacote:" +#~ msgid "Back" +#~ msgstr "Voltar" -#~ msgid "Toggle Cinematic" -#~ msgstr "Ativar/Desativar câmera cinemática" +#~ msgid "Ok" +#~ msgstr "Ok" diff -Nru minetest-5.2.0/po/pt_BR/minetest.po minetest-5.3.0/po/pt_BR/minetest.po --- minetest-5.2.0/po/pt_BR/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/pt_BR/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Portuguese (Brazil) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2019-12-11 13:36+0000\n" "Last-Translator: ramon.venson \n" "Language-Team: Portuguese (Brazil) 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 "FPS in pause menu" msgstr "FPS no menu de pausa" @@ -3067,6 +3299,41 @@ msgstr "Joystick virtual fixo" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Densidade da Ilha Flutuante montanhosa" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Y máximo da dungeon" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Y mínimo da dungeon" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Ruído base de Ilha Flutuante" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Expoente de terras flutuantes montanhosas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Ruído base de Ilha Flutuante" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Nível de água" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Tecla de voar" @@ -3120,6 +3387,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4742,14 +5015,6 @@ msgstr "Centro do aumento leve da curva de luz" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Limite de filas emerge no disco" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Limite de filas emerge para gerar" - -#: 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" @@ -4826,6 +5091,11 @@ msgstr "Menor limite Y de dungeons." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Menor limite Y de dungeons." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Menu principal do script" @@ -4909,9 +5179,12 @@ "automaticamente habilitadas e a flag 'jungles' é ignorada." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "Atributos de geração de mapa específicos ao gerador V7.\n" "'ridges' habilitam os rios." @@ -5004,10 +5277,6 @@ msgstr "Debug do mapgen" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Flags do gerador de mundo" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Nome do gerador de mundo" @@ -5077,18 +5346,20 @@ "Número máximo de blocos que podem ser enfileirados para o carregamento." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Número máximo de blocos para serem enfileirados que estão a ser gerados.\n" "Definido em branco para uma quantidade apropriada ser escolhida " "automaticamente." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Número máximo de blocos para ser enfileirado que serão carregados do " "arquivo.\n" @@ -5189,6 +5460,10 @@ msgstr "Método usado para destacar o objeto selecionado." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Minimapa" @@ -5367,9 +5642,6 @@ #, fuzzy msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5463,10 +5735,6 @@ msgstr "Escala de Oclusão de paralaxe" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Insinsidade de oclusão de paralaxe" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5476,8 +5744,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Caminho para onde salvar screenshots." +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 "" @@ -5514,6 +5784,15 @@ msgstr "Pausa quando o foco da janela é perdido" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "Limite de filas emerge para gerar" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Física" @@ -5592,6 +5871,18 @@ msgstr "Analizando" #: 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -6115,6 +6406,13 @@ "Arquivos que não estão presentes serão obtidos da maneira usual por UDP." #: 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 #, fuzzy msgid "" "Spread of light curve boost range.\n" @@ -6141,6 +6439,11 @@ msgstr "Extensão do ruído da montanha de passo" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "Intensidade de paralaxe." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Intensidade de normalmaps gerados." @@ -6152,10 +6455,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Intensidade de paralaxe." - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "Verificação rígida de protocolo" @@ -6164,6 +6463,20 @@ msgstr "Códigos de faixa de cor" #: 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 the 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 "SQLite síncrono" @@ -6291,6 +6604,7 @@ "servidor e dos modificadores." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The radius of the volume of blocks around every player that is subject to " "the\n" @@ -6298,7 +6612,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" "O raio do volume de blocos em volta de cada jogador que é sujeito a coisas " "de bloco ativo, em mapblocks (16 nós).\n" @@ -6499,6 +6813,11 @@ msgstr "Limite topo Y de dungeons." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Limite topo Y de dungeons." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Usar nuvens 3D em vez de planas." @@ -6886,6 +7205,14 @@ "Distância em Y sobre a qual as cavernas se expandem até o tamanho total." #: 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 "Nível em Y da superfície média do terreno." @@ -6917,130 +7244,136 @@ msgid "cURL timeout" msgstr "Tempo limite de cURL" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Ajustar a gama de codificação para a tabela de claridade. Os números mais " -#~ "elevados são mais brilhantes.\n" -#~ "Esta configuração é somente para o cliente e é ignorada pelo servidor." +#~ msgid "Toggle Cinematic" +#~ msgstr "Alternar modo de câmera cinemática" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Altera como terras flutuantes montanhosas afunilam acima e abaixo do " -#~ "ponto médio." +#~ msgid "Select Package File:" +#~ msgstr "Selecionar o arquivo do pacote:" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Centro do aumento da curva de luz." +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Limite Y máximo de lava em grandes cavernas." -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Controla a densidade do terreno montanhoso nas ilhas flutuantes.\n" -#~ "É um parâmetro adicionado ao valor de ruído 'mgv7_np_mountain'." +#~ msgid "Waving Water" +#~ msgstr "Ondas na água" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Controla a largura dos túneis, um valor menor cria túneis mais largos." +#~ msgid "Whether dungeons occasionally project from the terrain." +#~ msgstr "Se dungeons ocasionalmente se projetam do terreno." -#~ msgid "Darkness sharpness" -#~ msgstr "Nitidez da escuridão" +#~ msgid "Projecting dungeons" +#~ msgstr "Projetando dungeons" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." -#~ msgstr "" -#~ "Define áreas de Ilha Flutuante em terreno suavizado.\n" -#~ "Terrenos suavizados ocorrem quando o ruído é menor que zero." +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Nível Y para o qual as sombras de ilhas flutuantes se estendem." -#~ msgid "Enable VBO" -#~ msgstr "Habilitar VBO" +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "" +#~ "Nível em Y do ponto médio da montanha flutuante e da superfície do lago." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Habilitar efeito \"filmic tone mapping\"" +#~ msgid "Waving water" +#~ msgstr "Balanço da água" -#~ msgid "Floatland base height noise" -#~ msgstr "Altura base de ruído de Ilha Flutuante" +#~ 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 " +#~ "Terra Flutuante." -#~ msgid "Floatland base noise" -#~ msgstr "Ruído base de Ilha Flutuante" +#~ msgid "" +#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgstr "" +#~ "Altura máxima típica, acima e abaixo do ponto médio, do terreno da " +#~ "montanha flutuante." -#~ msgid "Floatland level" -#~ msgstr "Nível de água" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Esta fonte será usada para determinados idiomas." -#~ msgid "Floatland mountain density" -#~ msgstr "Densidade da Ilha Flutuante montanhosa" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Força do aumento médio da curva de luz." -#~ msgid "Floatland mountain exponent" -#~ msgstr "Expoente de terras flutuantes montanhosas" +#~ msgid "Shadow limit" +#~ msgstr "Limite de mapblock" -#~ msgid "Floatland mountain height" -#~ msgstr "Altura da Ilha Flutuante montanhosa" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Caminho para TrueTypeFont ou bitmap." -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "Fonte alpha de sombra (opacidade, entre 0 e 255)." +#~ msgid "Lightness sharpness" +#~ msgstr "Nitidez da iluminação" -#~ msgid "Gamma" -#~ msgstr "Gama" +#~ msgid "Lava depth" +#~ msgstr "Profundidade da lava" #~ msgid "IPv6 support." #~ msgstr "Suporte a IPv6." -#~ msgid "Lava depth" -#~ msgstr "Profundidade da lava" +#~ msgid "Gamma" +#~ msgstr "Gama" -#~ msgid "Lightness sharpness" -#~ msgstr "Nitidez da iluminação" +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "Fonte alpha de sombra (opacidade, entre 0 e 255)." -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Caminho para TrueTypeFont ou bitmap." +#~ msgid "Floatland mountain height" +#~ msgstr "Altura da Ilha Flutuante montanhosa" -#~ msgid "Shadow limit" -#~ msgstr "Limite de mapblock" +#~ msgid "Floatland base height noise" +#~ msgstr "Altura base de ruído de Ilha Flutuante" -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Força do aumento médio da curva de luz." +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Habilitar efeito \"filmic tone mapping\"" -#~ msgid "This font will be used for certain languages." -#~ msgstr "Esta fonte será usada para determinados idiomas." +#~ msgid "Enable VBO" +#~ msgstr "Habilitar VBO" #~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." #~ msgstr "" -#~ "Altura máxima típica, acima e abaixo do ponto médio, do terreno da " -#~ "montanha flutuante." +#~ "Define áreas de Ilha Flutuante em terreno suavizado.\n" +#~ "Terrenos suavizados ocorrem quando o ruído é menor que zero." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgid "Darkness sharpness" +#~ msgstr "Nitidez da escuridão" + +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "" -#~ "Variação da altura da colina e profundidade do lago no terreno liso da " -#~ "Terra Flutuante." +#~ "Controla a largura dos túneis, um valor menor cria túneis mais largos." -#~ msgid "Waving water" -#~ msgstr "Balanço da água" +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "Controla a densidade do terreno montanhoso nas ilhas flutuantes.\n" +#~ "É um parâmetro adicionado ao valor de ruído 'mgv7_np_mountain'." -#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Centro do aumento da curva de luz." + +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." #~ msgstr "" -#~ "Nível em Y do ponto médio da montanha flutuante e da superfície do lago." +#~ "Altera como terras flutuantes montanhosas afunilam acima e abaixo do " +#~ "ponto médio." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Nível Y para o qual as sombras de ilhas flutuantes se estendem." +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Ajustar a gama de codificação para a tabela de claridade. Os números mais " +#~ "elevados são mais brilhantes.\n" +#~ "Esta configuração é somente para o cliente e é ignorada pelo servidor." -#~ msgid "Projecting dungeons" -#~ msgstr "Projetando dungeons" +#~ msgid "Path to save screenshots at." +#~ msgstr "Caminho para onde salvar screenshots." -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "Se dungeons ocasionalmente se projetam do terreno." +#~ msgid "Parallax occlusion strength" +#~ msgstr "Insinsidade de oclusão de paralaxe" -#~ msgid "Waving Water" -#~ msgstr "Ondas na água" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Limite de filas emerge no disco" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Limite Y máximo de lava em grandes cavernas." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Baixando e instalando $1, por favor aguarde..." -#~ msgid "Select Package File:" -#~ msgstr "Selecionar o arquivo do pacote:" +#~ msgid "Back" +#~ msgstr "Backspace" -#~ msgid "Toggle Cinematic" -#~ msgstr "Alternar modo de câmera cinemática" +#~ msgid "Ok" +#~ msgstr "Ok" diff -Nru minetest-5.2.0/po/ro/minetest.po minetest-5.3.0/po/ro/minetest.po --- minetest-5.2.0/po/ro/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/ro/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Romanian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-03-14 10:32+0000\n" -"Last-Translator: Gmail a - 2 - a Boxa \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-04 16:41+0000\n" +"Last-Translator: f0roots \n" "Language-Team: Romanian \n" "Language: ro\n" @@ -13,24 +13,25 @@ "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 4.0-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" msgstr "Reînviere" #: builtin/client/death_formspec.lua src/client/game.cpp -#, fuzzy msgid "You died" -msgstr "Ai murit." +msgstr "Ai murit" + +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred in a Lua script:" -msgstr "A apărut o eroare într-un script Lua, de exemplu un mod:" +msgstr "A apărut o eroare într-un script Lua:" #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred:" msgstr "A apărut o eroare:" @@ -39,10 +40,6 @@ msgstr "Meniul principal" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Ok" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Reconectează-te" @@ -60,11 +57,11 @@ #: builtin/mainmenu/common.lua msgid "Server enforces protocol version $1. " -msgstr "Serverul forteaza versiunea protocolului $1. " +msgstr "Serverul forțează versiunea protocolului $1. " #: builtin/mainmenu/common.lua msgid "Server supports protocol versions between $1 and $2. " -msgstr "Server-ul suporta versiunile protocolului intre $1 si $2. " +msgstr "Acest Server suporta versiunile protocolului intre $1 si $2. " #: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." @@ -78,7 +75,7 @@ #: builtin/mainmenu/common.lua msgid "We support protocol versions between version $1 and $2." -msgstr "" +msgstr "Acceptăm versiuni de protocol între versiunea 1$ și 2$." #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_delete_content.lua @@ -119,6 +116,10 @@ "neautorizate. Doar caracterele [a-z0-9_] sunt permise." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" @@ -127,18 +128,16 @@ msgstr "Nu există dependențe (opționale)" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No game description provided." -msgstr "Nici o descriere de mod disponibilă" +msgstr "Nu este oferită nicio descriere a jocului." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" msgstr "Nu există dependențe dure" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No modpack description provided." -msgstr "Nici o descriere de mod disponibilă" +msgstr "Nici o descriere a pachetului de moduri nu este furnizată." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" @@ -166,22 +165,21 @@ msgstr "Toate pachetele" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Înapoi" - -#: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Back to Main Menu" -msgstr "Meniul Principal" +msgstr "Înapoi la meniul principal" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Se descarca si se instaleaza $ 1, vă rugăm să așteptați ..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" #: builtin/mainmenu/dlg_contentstore.lua #, fuzzy +msgid "Downloading..." +msgstr "Se încarcă..." + +#: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" -msgstr "Eșuare la instalarea $1 în $2" +msgstr "Nu a putut descărca $1" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -211,7 +209,6 @@ msgstr "Caută" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Texture packs" msgstr "Pachete de textură" @@ -223,15 +220,57 @@ msgid "Update" msgstr "Actualizare" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "O lume cu numele \"$1\" deja există" #: 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 "Altitudine de frisoane" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Altitude dry" +msgstr "Altitudine de frisoane" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biome blending" +msgstr "Biome zgomot" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biomes" +msgstr "Biome zgomot" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caverns" +msgstr "Pragul cavernei" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caves" +msgstr "Octava" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Creează" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "Informații:" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Descărcați un joc, cum ar fi Minetest Game, de pe minetest.net" @@ -239,25 +278,147 @@ msgid "Download one from minetest.net" msgstr "Descărcați unul de pe minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Dungeons" +msgstr "Zgomotul temnițelor" + +#: 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 src/settings_translation_file.cpp msgid "Game" msgstr "Joc" +#: 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 "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 "Mapgen" +msgstr "Gen de hartă" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Steagurile Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Mapgen-specific flags" +msgstr "Steaguri specifice Mapgen V5" + +#: 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 "Nici un joc selectat" #: 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 +#, fuzzy +msgid "Rivers" +msgstr "Zgomotul râului" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Seminţe" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "" "Avertisment: Testul de dezvoltare minimă este destinat dezvoltatorilor." @@ -280,9 +441,8 @@ msgstr "Șterge" #: builtin/mainmenu/dlg_delete_content.lua -#, fuzzy msgid "pkgmgr: failed to delete \"$1\"" -msgstr "Modmgr: Eroare la ștergerea \"$1\"" +msgstr "pkgmgr: nu a reușit să ștergeți \"$1\"" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" @@ -338,7 +498,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Lacunarity" -msgstr "Lacunarity" +msgstr "Lacunaritate" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Octaves" @@ -346,7 +506,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" -msgstr "" +msgstr "Decalaj" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Persistance" @@ -390,15 +550,15 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X" -msgstr "" +msgstr "X" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X spread" -msgstr "X răspândit" +msgstr "expansiunea X" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y" -msgstr "" +msgstr "Y" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y spread" @@ -406,7 +566,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z" -msgstr "" +msgstr "Z" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z spread" @@ -418,7 +578,7 @@ #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "absvalue" -msgstr "" +msgstr "valoareabs" #. ~ "defaults" is a noise parameter flag. #. It describes the default processing options @@ -448,99 +608,82 @@ msgstr "Eșuare la instalarea $1 în $2" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install Mod: Unable to find real mod name for: $1" msgstr "Instalare mod: nu se poate găsi numele real pentru: $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Instalare Mod: nu se poate găsi nume de folder potrivit pentru pachetul de " -"mod $1" +"moduri $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install: Unsupported file type \"$1\" or broken archive" msgstr "Instalare: tipul de fișier neacceptat „$ 1” sau arhiva ruptă" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install: file: \"$1\"" -msgstr "Instalare Mod: fișier: \"$1\"" +msgstr "Instalare: fișier: \"$1\"" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to find a valid mod or modpack" -msgstr "" -"Instalare Mod: nu se poate găsi nume de folder potrivit pentru pachetul de " -"mod $1" +msgstr "Nu se poate găsi un mod sau un pachet de moduri valid" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a $1 as a texture pack" -msgstr "Eșuare la instalarea $1 în $2" +msgstr "Imposibil de instalat un $1 ca pachet de textură" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a game as a $1" -msgstr "Eșuare la instalarea $1 în $2" +msgstr "Imposibil de instalat un joc ca $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a mod as a $1" -msgstr "Eșuare la instalarea $1 în $2" +msgstr "Imposibil de instalat un mod ca $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a modpack as a $1" -msgstr "Eșuare la instalarea $1 în $2" +msgstr "Imposibil de instalat un pachet de moduri ca $ 1" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "" +msgstr "Căutați conținut online" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content" -msgstr "Continuă" +msgstr "Conţinut" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Disable Texture Pack" -msgstr "Selectează pachetul de textură:" +msgstr "Dezactivați pachetul de textură" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Information:" -msgstr "Informații mod:" +msgstr "Informații:" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Installed Packages:" -msgstr "Moduri Instalate:" +msgstr "Pachete instalate:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." -msgstr "" +msgstr "Fără dependențe." #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "No package description available" -msgstr "Nici o descriere de mod disponibilă" +msgstr "Nu există descriere a pachetului disponibilă" #: builtin/mainmenu/tab_content.lua msgid "Rename" msgstr "Redenumiți" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Uninstall Package" -msgstr "Dezinstalaţi modul selectat" +msgstr "Dezinstalați pachetul" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Use Texture Pack" -msgstr "Pachete de textură" +msgstr "Folosiți pachetul de textură" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" @@ -552,24 +695,23 @@ #: builtin/mainmenu/tab_credits.lua msgid "Credits" -msgstr "Credits" +msgstr "Credite" #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Foști contribuitori" #: builtin/mainmenu/tab_credits.lua -#, fuzzy msgid "Previous Core Developers" -msgstr "Dezvoltatori de bază" +msgstr "Dezvoltatori de bază precedenți" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" -msgstr "" +msgstr "Anunțare server" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" -msgstr "" +msgstr "Adresa legată" #: builtin/mainmenu/tab_local.lua msgid "Configure" @@ -584,14 +726,16 @@ msgstr "Activează Daune" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Host Game" -msgstr "Ascunde Joc" +msgstr "Găzduiește joc" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Host Server" -msgstr "Server" +msgstr "Găzduiește Server" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" #: builtin/mainmenu/tab_local.lua msgid "Name/Password" @@ -602,18 +746,16 @@ msgstr "Nou" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "No world created or selected!" -msgstr "Jocul nu are nume, sau nu ai selectat un joc" +msgstr "Nicio lume creată sau selectată!" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Play Game" -msgstr "Începe jocul" +msgstr "Joacă jocul" #: builtin/mainmenu/tab_local.lua msgid "Port" -msgstr "" +msgstr "Port" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -624,21 +766,18 @@ msgstr "Port server" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Start Game" -msgstr "Ascunde Joc" +msgstr "Începe Jocul" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address / Port" -msgstr "Adresă/Port" +msgstr "Adresă / Port" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Conectează" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua -#, fuzzy msgid "Creative mode" msgstr "Modul Creativ" @@ -652,12 +791,11 @@ #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Favorite" -msgstr "Favorite" +msgstr "Favorit" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Join Game" -msgstr "Ascunde Joc" +msgstr "Alatură-te jocului" #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Name / Password" @@ -665,7 +803,7 @@ #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua msgid "Ping" -msgstr "" +msgstr "Ping" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua @@ -677,7 +815,6 @@ msgstr "2x" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "3D Clouds" msgstr "Nori 3D" @@ -690,35 +827,30 @@ msgstr "8x" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "All Settings" -msgstr "Setări" +msgstr "Toate setările" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" -msgstr "" +msgstr "Antialiasing:" #: builtin/mainmenu/tab_settings.lua msgid "Are you sure to reset your singleplayer world?" msgstr "Eşti sigur că vrei să resetezi lumea proprie ?" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Autosave Screen Size" msgstr "Salvează automat dimensiunea ecranului" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Bilinear Filter" msgstr "Filtrare Biliniară" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Bump Mapping" -msgstr "Mip Mapping" +msgstr "Cartografiere cu denivelări" #: builtin/mainmenu/tab_settings.lua src/client/game.cpp -#, fuzzy msgid "Change Keys" msgstr "Modifică tastele" @@ -732,16 +864,15 @@ #: builtin/mainmenu/tab_settings.lua msgid "Generate Normal Maps" -msgstr "" +msgstr "Generați Hărți Normale" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Mipmap" -msgstr "Mip Mapping" +msgstr "Hartă mip" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "Hartă mip + filtru aniso." #: builtin/mainmenu/tab_settings.lua msgid "No" @@ -752,9 +883,8 @@ msgstr "Fără Filtru" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "No Mipmap" -msgstr "Mip Mapping" +msgstr "Fără hartă mip" #: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" @@ -778,7 +908,7 @@ #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Parallax Occlusion" -msgstr "" +msgstr "Ocluzie Parallax" #: builtin/mainmenu/tab_settings.lua msgid "Particles" @@ -802,7 +932,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" -msgstr "" +msgstr "Shaders (indisponibil)" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" @@ -821,16 +951,14 @@ msgstr "Pentru a permite shadere OpenGL trebuie să fie folosite." #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Tone Mapping" -msgstr "Mip Mapping" +msgstr "Mapare ton" #: builtin/mainmenu/tab_settings.lua msgid "Touchthreshold: (px)" -msgstr "" +msgstr "PragulAtingerii: (px)" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Trilinear Filter" msgstr "Filtrare Triliniară" @@ -839,9 +967,8 @@ msgstr "Frunze legănătoare" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Waving Liquids" -msgstr "Frunze legănătoare" +msgstr "Fluturarea lichidelor" #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" @@ -852,19 +979,16 @@ msgstr "Da" #: builtin/mainmenu/tab_simple_main.lua -#, fuzzy msgid "Config mods" -msgstr "Configurează" +msgstr "Configurează moduri" #: builtin/mainmenu/tab_simple_main.lua -#, fuzzy msgid "Main" -msgstr "Meniul Principal" +msgstr "Principal" #: builtin/mainmenu/tab_simple_main.lua -#, fuzzy msgid "Start Singleplayer" -msgstr "Singleplayer" +msgstr "Începeți Jucător singur" #: src/client/client.cpp msgid "Connection timed out." @@ -876,21 +1000,19 @@ #: src/client/client.cpp msgid "Initializing nodes" -msgstr "" +msgstr "Inițializarea nodurilor" #: src/client/client.cpp msgid "Initializing nodes..." -msgstr "" +msgstr "Se inițializează nodurile..." #: src/client/client.cpp -#, fuzzy msgid "Loading textures..." -msgstr "Se încarcă..." +msgstr "Se încarcă texturi ..." #: src/client/client.cpp -#, fuzzy msgid "Rebuilding shaders..." -msgstr "Se rezolvă adresa..." +msgstr "Reconstruirea shaderelor..." #: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" @@ -902,7 +1024,7 @@ #: src/client/clientlauncher.cpp msgid "Invalid gamespec." -msgstr "Specificare invalidă" +msgstr "Jocul este nevalid." #: src/client/clientlauncher.cpp msgid "Main Menu" @@ -914,19 +1036,19 @@ #: src/client/clientlauncher.cpp msgid "Player name too long." -msgstr "" +msgstr "Numele jucătorului prea lung." #: src/client/clientlauncher.cpp msgid "Please choose a name!" -msgstr "" +msgstr "Vă rugăm să alegeți un nume!" #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " -msgstr "" +msgstr "Fișierul cu parolă nu a putut fi deschis: " #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " -msgstr "" +msgstr "Calea aprovizionată a lumii nu există: " #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string. Put either "no" or "yes" @@ -949,79 +1071,69 @@ "Verifică deug.txt pentru detalii." #: src/client/game.cpp -#, fuzzy msgid "- Address: " -msgstr "Adresă/Port" +msgstr "- Adresa: " #: src/client/game.cpp -#, fuzzy msgid "- Creative Mode: " -msgstr "Modul Creativ" +msgstr "- Modul creativ: " #: src/client/game.cpp -#, fuzzy msgid "- Damage: " -msgstr "Activează Daune" +msgstr "- Daune: " #: src/client/game.cpp msgid "- Mode: " -msgstr "" +msgstr "- Modul: " #: src/client/game.cpp msgid "- Port: " -msgstr "" +msgstr "- Port: " #: src/client/game.cpp -#, fuzzy msgid "- Public: " -msgstr "Public" +msgstr "- Public: " #. ~ PvP = Player versus Player #: src/client/game.cpp msgid "- PvP: " -msgstr "" +msgstr "- Jucător vs jucător: " #: src/client/game.cpp -#, fuzzy msgid "- Server Name: " -msgstr "Server" +msgstr "- Numele serverului: " #: src/client/game.cpp -#, fuzzy msgid "Automatic forward disabled" -msgstr "Înainte" +msgstr "Redirecționare automată dezactivată" #: src/client/game.cpp -#, fuzzy msgid "Automatic forward enabled" -msgstr "Înainte" +msgstr "Redirecționare automată activată" #: src/client/game.cpp msgid "Camera update disabled" -msgstr "" +msgstr "Actualizarea camerei este dezactivată" #: src/client/game.cpp -#, fuzzy msgid "Camera update enabled" -msgstr "Daune activate" +msgstr "Actualizarea camerei este activată" #: src/client/game.cpp msgid "Change Password" msgstr "Schimbă Parola" #: src/client/game.cpp -#, fuzzy msgid "Cinematic mode disabled" -msgstr "Modul Creativ" +msgstr "Modul cinematografic este dezactivat" #: src/client/game.cpp -#, fuzzy msgid "Cinematic mode enabled" -msgstr "Modul Creativ" +msgstr "Modul cinematografic activat" #: src/client/game.cpp msgid "Client side scripting is disabled" -msgstr "" +msgstr "Scripturile din partea clientului sunt dezactivate" #: src/client/game.cpp msgid "Connecting to server..." @@ -1032,7 +1144,7 @@ msgstr "Continuă" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1049,38 +1161,40 @@ "- Mouse wheel: select item\n" "- %s: chat\n" msgstr "" -"Controale prestabilite:\n" -"- WASD: mișcare\n" -"- Spațiu: sărire/urcare\n" -"- Shift: furișare/coborâre\n" -"- Q: aruncă obiect\n" -"- I: inventar\n" -"- Mouse: întoarcere/vedere\n" -"- Click stânga: săpare/lovire\n" -"- Click dreapta: pune/folosește\n" -"- Rotiță mouse: selectează obiect\n" -"- T: chat\n" +"Controale:\n" +"-%s: deplasați înainte\n" +"-%s: deplasați înapoi\n" +"-%s: deplasați spre stânga\n" +"-%s: deplasați spre dreapta\n" +"-%s: salt / urcare\n" +"-%s: strecurați / coborâți\n" +"-%s: aruncați element\n" +"-%s: inventar\n" +"- Mouse: rotiți / priviți\n" +"- Mouse stânga: săpați / pocniți\n" +"- Mouse dreapta: plasați / utilizare\n" +"- Roată mousului: selectează elementul\n" +"-%s: chat\n" #: src/client/game.cpp msgid "Creating client..." msgstr "Se creează clientul..." #: src/client/game.cpp -#, fuzzy msgid "Creating server..." msgstr "Se crează serverul..." #: src/client/game.cpp msgid "Debug info and profiler graph hidden" -msgstr "" +msgstr "Informațiile de depanare și graficul profilului sunt ascunse" #: src/client/game.cpp msgid "Debug info shown" -msgstr "" +msgstr "Informații de depanare afișate" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "" +msgstr "Informații de depanare, grafic de profil și ascuns" #: src/client/game.cpp msgid "" @@ -1097,14 +1211,26 @@ "- 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" #: src/client/game.cpp msgid "Disabled unlimited viewing range" -msgstr "" +msgstr "Interval de vizualizare nelimitat dezactivat" #: src/client/game.cpp msgid "Enabled unlimited viewing range" -msgstr "" +msgstr "Interval de vizualizare nelimitat activat" #: src/client/game.cpp msgid "Exit to Menu" @@ -1115,18 +1241,16 @@ msgstr "Ieși din joc" #: src/client/game.cpp -#, fuzzy msgid "Fast mode disabled" -msgstr "Dezactivează MP" +msgstr "Modul rapid este dezactivat" #: src/client/game.cpp -#, fuzzy msgid "Fast mode enabled" -msgstr "Daune activate" +msgstr "Modul rapid activat" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "" +msgstr "Modul rapid activat (notă: niciun privilegiu „rapid”)" #: src/client/game.cpp msgid "Fly mode disabled" @@ -1138,31 +1262,27 @@ #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "" +msgstr "Modul de zbor este activat (notă: niciun privilegiu „zboară”)" #: src/client/game.cpp -#, fuzzy msgid "Fog disabled" -msgstr "Dezactivează MP" +msgstr "Ceață dezactivată" #: src/client/game.cpp -#, fuzzy msgid "Fog enabled" -msgstr "activat" +msgstr "Ceață activată" #: src/client/game.cpp msgid "Game info:" -msgstr "" +msgstr "Informatii despre joc:" #: src/client/game.cpp -#, fuzzy msgid "Game paused" -msgstr "Numele jocului" +msgstr "Joc întrerupt" #: src/client/game.cpp -#, fuzzy msgid "Hosting server" -msgstr "Se crează serverul..." +msgstr "Găzduind un server" #: src/client/game.cpp msgid "Item definitions..." @@ -1170,7 +1290,7 @@ #: src/client/game.cpp msgid "KiB/s" -msgstr "" +msgstr "KiB / s" #: src/client/game.cpp msgid "Media..." @@ -1178,52 +1298,51 @@ #: src/client/game.cpp msgid "MiB/s" -msgstr "" +msgstr "MiB / s" #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" -msgstr "" +msgstr "Hartă mip dezactivată de joc sau mod" #: src/client/game.cpp msgid "Minimap hidden" -msgstr "" +msgstr "Hartă mip ascunsă" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x1" -msgstr "" +msgstr "Hartă mip în modul radar, Zoom x1" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x2" -msgstr "" +msgstr "Hartă mip în modul radar, Zoom x2" #: src/client/game.cpp msgid "Minimap in radar mode, Zoom x4" -msgstr "" +msgstr "Hartă mip în modul radar, Zoom x4" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x1" -msgstr "" +msgstr "Hartă mip în modul de suprafață, Zoom x1" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x2" -msgstr "" +msgstr "Hartă mip în modul de suprafață, Zoom x2" #: src/client/game.cpp msgid "Minimap in surface mode, Zoom x4" -msgstr "" +msgstr "Hartă mip în modul de suprafață, Zoom x4" #: src/client/game.cpp msgid "Noclip mode disabled" -msgstr "" +msgstr "Modul Noclip este dezactivat" #: src/client/game.cpp -#, fuzzy msgid "Noclip mode enabled" -msgstr "Daune activate" +msgstr "Modul Noclip activat" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "" +msgstr "Modul Noclip activat (notă: nu este privilegiat „noclip”)" #: src/client/game.cpp msgid "Node definitions..." @@ -1231,125 +1350,128 @@ #: src/client/game.cpp msgid "Off" -msgstr "" +msgstr "Oprit" #: src/client/game.cpp msgid "On" -msgstr "" +msgstr "Pornit" #: src/client/game.cpp msgid "Pitch move mode disabled" -msgstr "" +msgstr "Mod mutare pitch dezactivat" #: src/client/game.cpp msgid "Pitch move mode enabled" -msgstr "" +msgstr "Mod de mutare pitch activat" #: src/client/game.cpp msgid "Profiler graph shown" -msgstr "" +msgstr "Graficul profilului este afișat" #: src/client/game.cpp msgid "Remote server" -msgstr "" +msgstr "Server de la distanță" #: src/client/game.cpp msgid "Resolving address..." msgstr "Se rezolvă adresa..." #: src/client/game.cpp -#, fuzzy msgid "Shutting down..." msgstr "Se închide..." #: src/client/game.cpp msgid "Singleplayer" -msgstr "Singleplayer" +msgstr "Jucător singur" #: src/client/game.cpp msgid "Sound Volume" msgstr "Volum Sunet" #: src/client/game.cpp -#, fuzzy msgid "Sound muted" -msgstr "Volum Sunet" +msgstr "Sunet dezactivat" + +#: 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 -#, fuzzy msgid "Sound unmuted" -msgstr "Volum Sunet" +msgstr "Sunet activat" #: src/client/game.cpp #, c-format msgid "Viewing range changed to %d" -msgstr "" +msgstr "Intervalul de vizualizare s-a modificat la %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at maximum: %d" -msgstr "" +msgstr "Intervalul de vizualizare este maxim: %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at minimum: %d" -msgstr "" +msgstr "Intervalul de vizualizare este cel puțin: %d" #: src/client/game.cpp #, c-format msgid "Volume changed to %d%%" -msgstr "" +msgstr "Volum modificat la %d%%" #: src/client/game.cpp msgid "Wireframe shown" -msgstr "" +msgstr "Cadru de sârmă afișat" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" -msgstr "" +msgstr "Zoom dezactivat în prezent de joc sau mod" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" -msgstr "" +msgstr "O.K" #: src/client/gameui.cpp -#, fuzzy msgid "Chat hidden" -msgstr "Modifică tastele" +msgstr "Chat ascuns" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "" +msgstr "Chat afișat" #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "" +msgstr "HUD ascuns" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "" +msgstr "HUD afișat" #: src/client/gameui.cpp msgid "Profiler hidden" -msgstr "" +msgstr "Profiler ascuns" #: src/client/gameui.cpp #, c-format msgid "Profiler shown (page %d of %d)" -msgstr "" +msgstr "Profiler afișat (pagina %d din %d)" #: src/client/keycode.cpp msgid "Apps" msgstr "Aplicații" #: src/client/keycode.cpp -#, fuzzy msgid "Backspace" msgstr "Înapoi" #: src/client/keycode.cpp msgid "Caps Lock" -msgstr "" +msgstr "Majuscule" #: src/client/keycode.cpp msgid "Clear" @@ -1365,12 +1487,11 @@ #: src/client/keycode.cpp msgid "End" -msgstr "End" +msgstr "Sfârșit" #: src/client/keycode.cpp -#, fuzzy msgid "Erase EOF" -msgstr "Ștergere OEF" +msgstr "Ștergere EOF" #: src/client/keycode.cpp msgid "Execute" @@ -1385,29 +1506,24 @@ msgstr "Home" #: src/client/keycode.cpp -#, fuzzy msgid "IME Accept" -msgstr "Acceptă" +msgstr "Acceptare IME" #: src/client/keycode.cpp -#, fuzzy msgid "IME Convert" -msgstr "Convert" +msgstr "Conversie IME" #: src/client/keycode.cpp -#, fuzzy msgid "IME Escape" -msgstr "Escape" +msgstr "IME de Evacuare" #: src/client/keycode.cpp -#, fuzzy msgid "IME Mode Change" -msgstr "Schimbă modul" +msgstr "Schimbare mod IME" #: src/client/keycode.cpp -#, fuzzy msgid "IME Nonconvert" -msgstr "Nonconvert" +msgstr "IME Nonconvertit" #: src/client/keycode.cpp msgid "Insert" @@ -1452,64 +1568,63 @@ #: src/client/keycode.cpp msgid "Numpad *" -msgstr "Numpad *" +msgstr "Num pad *" #: src/client/keycode.cpp msgid "Numpad +" -msgstr "Numpad +" +msgstr "Num pad +" #: src/client/keycode.cpp msgid "Numpad -" -msgstr "Numpad -" +msgstr "Num pad -" #: src/client/keycode.cpp -#, fuzzy msgid "Numpad ." -msgstr "Numpad *" +msgstr "Numpad." #: src/client/keycode.cpp msgid "Numpad /" -msgstr "Numpad /" +msgstr "Num pad /" #: src/client/keycode.cpp msgid "Numpad 0" -msgstr "Numpad 0" +msgstr "Num pad 0" #: src/client/keycode.cpp msgid "Numpad 1" -msgstr "Numpad 1" +msgstr "Num pad 1" #: src/client/keycode.cpp msgid "Numpad 2" -msgstr "Numpad 2" +msgstr "Num pad 2" #: src/client/keycode.cpp msgid "Numpad 3" -msgstr "Numpad 3" +msgstr "Num pad 3" #: src/client/keycode.cpp msgid "Numpad 4" -msgstr "Numpad 4" +msgstr "Num pad 4" #: src/client/keycode.cpp msgid "Numpad 5" -msgstr "Numpad 5" +msgstr "Num pad 5" #: src/client/keycode.cpp msgid "Numpad 6" -msgstr "Numpad 6" +msgstr "Num pad 6" #: src/client/keycode.cpp msgid "Numpad 7" -msgstr "Numpad 7" +msgstr "Num pad 7" #: src/client/keycode.cpp msgid "Numpad 8" -msgstr "Numpad 8" +msgstr "Num pad 8" #: src/client/keycode.cpp msgid "Numpad 9" -msgstr "Numpad 9" +msgstr "Num pad 9" #: src/client/keycode.cpp msgid "OEM Clear" @@ -1517,11 +1632,11 @@ #: src/client/keycode.cpp msgid "Page down" -msgstr "" +msgstr "Pagină în jos" #: src/client/keycode.cpp msgid "Page up" -msgstr "" +msgstr "Pagină sus" #: src/client/keycode.cpp msgid "Pause" @@ -1534,7 +1649,7 @@ #. ~ "Print screen" key #: src/client/keycode.cpp msgid "Print" -msgstr "Print" +msgstr "Imprimare" #: src/client/keycode.cpp msgid "Return" @@ -1579,7 +1694,7 @@ #: src/client/keycode.cpp msgid "Sleep" -msgstr "Sleep" +msgstr "Somn" #: src/client/keycode.cpp msgid "Snapshot" @@ -1615,7 +1730,7 @@ #: src/gui/guiConfirmRegistration.cpp msgid "Register and Join" -msgstr "" +msgstr "Înregistrează-te și Alătură-te" #: src/gui/guiConfirmRegistration.cpp #, c-format @@ -1626,33 +1741,36 @@ "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" +"Sunteți pe cale să vă asociați pentru prima dată la acest server cu numele " +"\"%s\".\n" +"Dacă continuați, se va crea un cont nou utilizând acreditările pe acest " +"server.\n" +"Reintroduceți parola și faceți clic pe \"Înregistrare și asociere\" pentru a " +"confirma crearea contului sau faceți clic pe \"Revocare\" pentru a abandona." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Continuă" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Special\" = climb down" -msgstr "\"Aleargă\" = coboară" +msgstr "\"Special\" = coborâți" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Autoforward" -msgstr "Înainte" +msgstr "Redirecționare înainte" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Automatic jumping" -msgstr "" +msgstr "Salt automat" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Înapoi" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Change camera" -msgstr "Modifică tastele" +msgstr "Schimba camera" #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" @@ -1668,11 +1786,11 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. range" -msgstr "" +msgstr "Interval dec" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. volume" -msgstr "" +msgstr "Dec. volum" #: src/gui/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" @@ -1688,12 +1806,11 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. range" -msgstr "" +msgstr "Interval Inc" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Inc. volume" -msgstr "Volum Sunet" +msgstr "Volumul inc" #: src/gui/guiKeyChangeMenu.cpp msgid "Inventory" @@ -1713,31 +1830,28 @@ "Keybindings. (Dacă acest meniu apare, șterge lucrurile din minetest.conf)" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Local command" -msgstr "Comandă" +msgstr "Comandă locală" #: src/gui/guiKeyChangeMenu.cpp msgid "Mute" -msgstr "" +msgstr "Mut" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Next item" -msgstr "Următorul" +msgstr "Următorul element" #: src/gui/guiKeyChangeMenu.cpp msgid "Prev. item" -msgstr "" +msgstr "Elementul anterior" #: src/gui/guiKeyChangeMenu.cpp msgid "Range select" msgstr "Selectare distanță" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp -#, fuzzy msgid "Screenshot" -msgstr "PrintScreen" +msgstr "Captură de ecran" #: src/gui/guiKeyChangeMenu.cpp msgid "Sneak" @@ -1745,17 +1859,15 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Special" -msgstr "" +msgstr "Special" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle HUD" -msgstr "Intră pe zbor" +msgstr "Comutați HUD" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle chat log" -msgstr "Intră pe rapid" +msgstr "Comutați jurnalul de chat" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fast" @@ -1766,23 +1878,20 @@ msgstr "Intră pe zbor" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle fog" -msgstr "Intră pe zbor" +msgstr "Comutați ceața" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle minimap" -msgstr "Intră pe noclip" +msgstr "Comutați minimap" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Intră pe noclip" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle pitchmove" -msgstr "Intră pe rapid" +msgstr "Comutați pitchmove" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" @@ -1809,9 +1918,8 @@ msgstr "Ieșire" #: src/gui/guiVolumeChange.cpp -#, fuzzy msgid "Muted" -msgstr "apasă o tastă" +msgstr "Amuțit" #: src/gui/guiVolumeChange.cpp msgid "Sound Volume: " @@ -1821,7 +1929,7 @@ #. Don't forget the space. #: src/gui/modalMenu.cpp msgid "Enter " -msgstr "" +msgstr "Introduceţi " #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's @@ -1835,6 +1943,9 @@ "(Android) Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" +"(Android) Fixează poziția joystick-ului virtual.\n" +"Dacă este dezactivat, joystick-ul virtual se va orienta către poziția la " +"prima atingere." #: src/settings_translation_file.cpp msgid "" @@ -1842,6 +1953,9 @@ "If enabled, virtual joystick will also tap \"aux\" button when out of main " "circle." msgstr "" +"(Android) Utilizați joystick-ul virtual pentru a declanșa butonul \"aux\".\n" +"Dacă este activat, joystick-ul virtual va atinge, de asemenea, butonul \"aux" +"\" atunci când este în afara cercului principal." #: src/settings_translation_file.cpp msgid "" @@ -1854,6 +1968,17 @@ "situations.\n" "Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" +"(X, Y, Z) compensarea fractalului din centrul lumii în unități de „scară”.\n" +"Poate fi folosit pentru a muta un punct dorit la (0, 0) pentru a crea o\n" +"punct de reproducere adecvat sau pentru a permite „mărirea” pe un dorit\n" +"punct prin creșterea „scară”.\n" +"Valoarea implicită este reglată pentru un punct de reproducere adecvat " +"pentru Mandelbrot\n" +"setează cu parametrii prestabili, este posibil să fie nevoie de modificări " +"în alte\n" +"situații.\n" +"Intervalul aproximativ -2 până la 2. Înmulțiți cu „scala” pentru compensarea " +"în noduri." #: src/settings_translation_file.cpp msgid "" @@ -1865,75 +1990,99 @@ "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) scara fractalului în noduri.\n" +"Mărimea efectivă a fractalului va fi de 2 până la 3 ori mai mare.\n" +"Aceste numere pot fi făcute foarte mari, fractal\n" +"nu trebuie să se încadreze în interiorul lumii.\n" +"Măriți acestea pentru a „mări” detaliile fractalei.\n" +"Valoarea implicită este pentru o formă ghemuită vertical, potrivită pentru\n" +"o insulă, setați toate cele 3 numere egale pentru forma brută." #: src/settings_translation_file.cpp msgid "" "0 = parallax occlusion with slope information (faster).\n" "1 = relief mapping (slower, more accurate)." msgstr "" +"0 = ocluzia de paralax cu informații despre panta (mai rapid).\n" +"1 = mapare în relief (mai lentă, mai exactă)." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of ridged mountains." -msgstr "" +msgstr "Zgomot 2D care controlează forma/dimensiunea munților crestați." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of rolling hills." -msgstr "" +msgstr "Zgomot 2D care controlează forma/dimensiune de dealuri." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of step mountains." -msgstr "" +msgstr "Zgomot 2D care controlează forma / dimensiunea munților pas." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of ridged mountain ranges." -msgstr "" +msgstr "Zgomot 2D care controlează mărimea / apariția lanțurilor montate." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of rolling hills." -msgstr "" +msgstr "Zgomot 2D care controlează dimensiunea / apariția de dealuri rulate." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of step mountain ranges." msgstr "" +"Zgomot 2D care controlează mărimea/apariția intervalelor de munți de pas." #: src/settings_translation_file.cpp msgid "2D noise that locates the river valleys and channels." -msgstr "" +msgstr "Zgomot 2D, care localizează văile râurilor și canalelor." #: src/settings_translation_file.cpp -#, fuzzy msgid "3D clouds" msgstr "Nori 3D" #: src/settings_translation_file.cpp msgid "3D mode" +msgstr "Mod 3D" + +#: src/settings_translation_file.cpp +msgid "3D mode parallax strength" msgstr "" #: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." -msgstr "" +msgstr "Zgomot 3D care definește caverne gigantice." #: src/settings_translation_file.cpp msgid "" "3D noise defining mountain structure and height.\n" "Also defines structure of floatland mountain terrain." msgstr "" +"Zgomot 3D care definește structura și înălțimea muntelui.\n" +"De asemenea, definește structura terenului montan floatland." #: src/settings_translation_file.cpp -msgid "3D noise defining structure of river canyon walls." +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 "Zgomot 3D care definește structura pereților canionului cu râu." + +#: src/settings_translation_file.cpp msgid "3D noise defining terrain." -msgstr "" +msgstr "Zgomot 3D care definește terenul." #: src/settings_translation_file.cpp msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." msgstr "" +"Zgomot 3D pentru hangare de munte, stânci, etc. De obicei, mici variante." #: src/settings_translation_file.cpp msgid "3D noise that determines number of dungeons per mapchunk." -msgstr "" +msgstr "Zgomot 3D care determină numărul de temnițe pe bucată de hartă." #: src/settings_translation_file.cpp msgid "" @@ -1948,52 +2097,69 @@ "- pageflip: quadbuffer based 3d.\n" "Note that the interlaced mode requires shaders to be enabled." msgstr "" +"Suport 3D.\n" +"În prezent, suportate:\n" +"- Nici unul: nici o ieșire 3d.\n" +"- anaglyph: cyan / magenta culoare 3d.\n" +"- întrețesut: ciudat / par linie pe bază de suport ecran de polarizare.\n" +"- partea de sus: split screen sus / jos.\n" +"- sidebyside: split ecran unul lângă altul.\n" +"- crossview: Cross-eyed 3d\n" +"- pageflip: quadbuffer pe bază de 3d.\n" +"Rețineți că modul între țesutnecesită umbrire pentru a fi activat." #: 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 "" +"Un seed de hartă aleasă pentru o hartă nouă, lăsa goală pentru a fii " +"întâmplătoare.\n" +"Va fi înlocuit atunci când se creează o lume nouă în meniul principal." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." msgstr "" +"Un mesaj care va fi afișat tuturor clienților în momentul blocării " +"serverului." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server shuts down." msgstr "" +"Un mesaj care va fi afișat tuturor clienților la închiderea serverului." #: src/settings_translation_file.cpp msgid "ABM interval" -msgstr "" +msgstr "Interval ABM" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" -msgstr "" +#, fuzzy +msgid "Absolute limit of queued blocks to emerge" +msgstr "Limita absolută a cozilor emergente" #: src/settings_translation_file.cpp msgid "Acceleration in air" -msgstr "" +msgstr "Accelerare în aer" #: src/settings_translation_file.cpp msgid "Acceleration of gravity, in nodes per second per second." -msgstr "" +msgstr "Accelerarea gravitației, în noduri pe secundă pe secundă." #: src/settings_translation_file.cpp msgid "Active Block Modifiers" -msgstr "" +msgstr "Modificatori de bloc activi" #: src/settings_translation_file.cpp msgid "Active block management interval" -msgstr "" +msgstr "Interval de gestionare a blocurilor activ" #: src/settings_translation_file.cpp msgid "Active block range" -msgstr "" +msgstr "Interval de bloc activ" #: src/settings_translation_file.cpp msgid "Active object send range" -msgstr "" +msgstr "Interval de trimitere obiect e activ" #: src/settings_translation_file.cpp msgid "" @@ -2001,22 +2167,37 @@ "Leave this blank to start a local server.\n" "Note that the address field in the main menu overrides this setting." msgstr "" +"Adresa la care să vă conectați.\n" +"Lăsați necompletat pentru a porni un server local.\n" +"Rețineți că, câmpul de adresă din meniul principal suprascrie această setare." #: src/settings_translation_file.cpp msgid "Adds particles when digging a node." -msgstr "" +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 "Advanced" +#, 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 "Advanced" +msgstr "Avansat" + +#: 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" @@ -2024,65 +2205,69 @@ "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 "Altitude chill" -msgstr "" +"Modifică curba luminii prin aplicarea 'corecția gamma' la ea.\n" +"Valori mai mari de a face de mijloc și de jos niveluri de lumină " +"strălucitoare.\n" +"Valoarea '1.0' lasă lumina curba nealterată.\n" +"Aceasta are doar un efect semnificativ asupra lumină naturală și " +"artificială\n" +"lumina, are un efect foarte mic asupra naturală lumina de noapte." #: src/settings_translation_file.cpp msgid "Always fly and fast" -msgstr "" +msgstr "Întotdeauna zboară și rapid" #: src/settings_translation_file.cpp msgid "Ambient occlusion gamma" -msgstr "" +msgstr "Gamma ocluziei ambientală" #: src/settings_translation_file.cpp msgid "Amount of messages a player may send per 10 seconds." -msgstr "" +msgstr "Cantitatea de mesaje pe care un jucător poate trimite la 10 secunde." #: src/settings_translation_file.cpp msgid "Amplifies the valleys." -msgstr "" +msgstr "Amplifică văile." #: src/settings_translation_file.cpp -#, fuzzy msgid "Anisotropic filtering" msgstr "Filtru Anizotropic" #: src/settings_translation_file.cpp msgid "Announce server" -msgstr "" +msgstr "Anunță serverul" #: src/settings_translation_file.cpp msgid "Announce to this serverlist." -msgstr "" +msgstr "Anunțați pe această listă de servere." #: src/settings_translation_file.cpp msgid "Append item name" -msgstr "" +msgstr "Adăugare nume element" #: src/settings_translation_file.cpp msgid "Append item name to tooltip." -msgstr "" +msgstr "Adăugați numele articolului la sugestia de instrumente." #: src/settings_translation_file.cpp msgid "Apple trees noise" -msgstr "" +msgstr "Zgomotul merilor" #: src/settings_translation_file.cpp msgid "Arm inertia" -msgstr "" +msgstr "Inerție braț" #: src/settings_translation_file.cpp msgid "" "Arm inertia, gives a more realistic movement of\n" "the arm when the camera moves." msgstr "" +"Inerția brațului, oferă o mișcare mai realistă a\n" +"brațul când camera se mișcă." #: src/settings_translation_file.cpp msgid "Ask to reconnect after crash" -msgstr "" +msgstr "Solicitați să vă reconectați după cădere" #: src/settings_translation_file.cpp msgid "" @@ -2098,19 +2283,28 @@ "optimization.\n" "Stated in mapblocks (16 nodes)." msgstr "" +"La această distanță serverul va optimiza agresiv care blocuri sunt trimise " +"la\n" +"Clientii.\n" +"Valorile mici pot îmbunătăți performanța foarte mult, în detrimentul\n" +"glitches de redare (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" +"În scrise în mapblocks (16 noduri)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Automatic forward key" -msgstr "Înainte" +msgstr "Tasta de avans automată" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." -msgstr "" +msgstr "Săriți automat obstacolele cu un singur nod." #: src/settings_translation_file.cpp msgid "Automatically report to the serverlist." -msgstr "" +msgstr "Raportați automat la lista de server." #: src/settings_translation_file.cpp msgid "Autosave screen size" @@ -2118,92 +2312,87 @@ #: src/settings_translation_file.cpp msgid "Autoscaling mode" -msgstr "" +msgstr "Mod scalare automată" #: src/settings_translation_file.cpp -#, fuzzy msgid "Backward key" -msgstr "Înapoi" +msgstr "Tastă înapoi" #: src/settings_translation_file.cpp -#, fuzzy msgid "Base ground level" -msgstr "Mapgen" +msgstr "Nivelul solului de bază" #: src/settings_translation_file.cpp msgid "Base terrain height." -msgstr "" +msgstr "Înălțimea terenului de bază." #: src/settings_translation_file.cpp msgid "Basic" -msgstr "" +msgstr "De bază" #: src/settings_translation_file.cpp msgid "Basic privileges" -msgstr "" +msgstr "Privilegii de bază" #: src/settings_translation_file.cpp msgid "Beach noise" -msgstr "" +msgstr "Zgomot de plajă" #: src/settings_translation_file.cpp msgid "Beach noise threshold" -msgstr "" +msgstr "Pragul de zgomot de plajă" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bilinear filtering" msgstr "Filtrare Biliniară" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bind address" -msgstr "Se rezolvă adresa..." +msgstr "Adresa de legare" #: src/settings_translation_file.cpp msgid "Biome API temperature and humidity noise parameters" -msgstr "" +msgstr "Parametrii de zgomot de temperatură și umiditate Biome API" #: src/settings_translation_file.cpp msgid "Biome noise" -msgstr "" +msgstr "Biome zgomot" #: src/settings_translation_file.cpp msgid "Bits per pixel (aka color depth) in fullscreen mode." -msgstr "" +msgstr "Biți per pixel (aka adâncime de culoare) în modul ecran complet." #: src/settings_translation_file.cpp msgid "Block send optimize distance" -msgstr "" +msgstr "Distanță de optimizare trimitere bloc" #: src/settings_translation_file.cpp msgid "Bold and italic font path" -msgstr "" +msgstr "Cale font aldin și cursiv" #: src/settings_translation_file.cpp msgid "Bold and italic monospace font path" -msgstr "" +msgstr "Cale de font monospațiu aldin și cursiv" #: src/settings_translation_file.cpp msgid "Bold font path" -msgstr "" +msgstr "Calea cu caractere îngroșate" #: src/settings_translation_file.cpp msgid "Bold monospace font path" -msgstr "" +msgstr "Calea cu caractere monospațiale îngroșate" #: src/settings_translation_file.cpp msgid "Build inside player" -msgstr "" +msgstr "Construiți în interiorul jucătorului" #: src/settings_translation_file.cpp msgid "Builtin" -msgstr "" +msgstr "Incorporat" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bumpmapping" -msgstr "Mip Mapping" +msgstr "Hartă pentru Denivelări" #: src/settings_translation_file.cpp msgid "" @@ -2212,10 +2401,15 @@ "Increasing can reduce artifacting on weaker GPUs.\n" "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" +"Camera \"aproape de tăiere plan\" distanta în noduri, între 0 și 0.25\n" +"Funcționează numai pe platforme LeS. Majoritatea utilizatorilor nu vor " +"trebui să schimbe acest lucru.\n" +"Creșterea poate reduce artefacte pe gpu-uri mai slabe.\n" +"0.1 = Implicit, 0,25 = Valoare bună pentru tabletele mai slabe." #: src/settings_translation_file.cpp msgid "Camera smoothing" -msgstr "" +msgstr "Netezirea camerei" #: src/settings_translation_file.cpp msgid "Camera smoothing in cinematic mode" @@ -2262,9 +2456,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cavern threshold" -msgstr "Mapgen" +msgstr "Pragul cavernei" #: src/settings_translation_file.cpp msgid "Cavern upper limit" @@ -2287,51 +2480,53 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Chat key" -msgstr "Modifică tastele" +msgstr "Tasta de chat" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "Cheia de comutare a chatului" #: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message format" -msgstr "Mapgen" +msgstr "Formatul mesajului de chat" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message kick threshold" -msgstr "Mapgen" +msgstr "Pragul de lansare a mesajului de chat" #: src/settings_translation_file.cpp msgid "Chat message max length" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat toggle key" -msgstr "Modifică tastele" +msgstr "Cheia de comutare a chatului" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chatcommands" -msgstr "Comandă" +msgstr "Comenzi de chat" #: src/settings_translation_file.cpp msgid "Chunk size" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cinematic mode" -msgstr "Modul Creativ" +msgstr "Modul cinematografic" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cinematic mode key" -msgstr "Modul Creativ" +msgstr "Tasta modului cinematografic" #: src/settings_translation_file.cpp msgid "Clean transparent textures" @@ -2346,14 +2541,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client modding" -msgstr "Client" +msgstr "Modare la client" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client side modding restrictions" -msgstr "Client" +msgstr "Restricții de modificare de partea clientului" #: src/settings_translation_file.cpp msgid "Client side node lookup range restriction" @@ -2423,9 +2616,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Console alpha" -msgstr "Consloă" +msgstr "Consola alfa" #: src/settings_translation_file.cpp msgid "Console color" @@ -2440,9 +2632,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "ContentDB URL" -msgstr "Continuă" +msgstr "URL-ul ContentDB" #: src/settings_translation_file.cpp msgid "Continuous forward" @@ -2489,9 +2680,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Creative" -msgstr "Creează" +msgstr "Creativ" #: src/settings_translation_file.cpp msgid "Crosshair alpha" @@ -2514,9 +2704,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Damage" -msgstr "Activează Daune" +msgstr "Daune" #: src/settings_translation_file.cpp msgid "Debug info toggle key" @@ -2547,9 +2736,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Default game" -msgstr "modifică jocul" +msgstr "Jocul implicit" #: src/settings_translation_file.cpp msgid "" @@ -2558,9 +2746,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Default password" -msgstr "Noua parolă" +msgstr "Parolă implicită" #: src/settings_translation_file.cpp msgid "Default privileges" @@ -2571,6 +2758,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Jocul implicit" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2681,14 +2873,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Digging particles" -msgstr "Activează tot" +msgstr "Particule pentru săpare" #: src/settings_translation_file.cpp -#, fuzzy msgid "Disable anticheat" -msgstr "Activează particulele" +msgstr "Dezactivează anticheatul" #: src/settings_translation_file.cpp msgid "Disallow empty passwords" @@ -2699,14 +2889,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Double tap jump for fly" msgstr "Apasă de 2 ori \"sari\" pentru a zbura" #: src/settings_translation_file.cpp -#, fuzzy msgid "Double-tapping the jump key toggles fly mode." -msgstr "Apasă de 2 ori \"sari\" pentru a zbura" +msgstr "Apăsând de 2 ori tasta Salt pentru a comuta modul de zburat." #: src/settings_translation_file.cpp msgid "Drop item key" @@ -2725,9 +2913,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dungeon noise" -msgstr "Mapgen" +msgstr "Zgomotul temnițelor" #: src/settings_translation_file.cpp msgid "" @@ -2754,14 +2941,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable mod channels support." -msgstr "Repozitoriu Online de moduri" +msgstr "Activați suportul pentru canale mod." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable mod security" -msgstr "Repozitoriu Online de moduri" +msgstr "Activați securitatea modului" #: src/settings_translation_file.cpp msgid "Enable players getting damage and dying." @@ -2848,9 +3033,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enables minimap." -msgstr "Activează Daune" +msgstr "Activează minimap." #: src/settings_translation_file.cpp msgid "" @@ -2887,6 +3071,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "" @@ -2903,9 +3097,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "lipsă_tip_font" +msgstr "Cale font de rezervă" #: src/settings_translation_file.cpp msgid "Fallback font shadow" @@ -2977,9 +3170,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Filtering" -msgstr "Filtru Anizotropic" +msgstr "Filtrarea" #: src/settings_translation_file.cpp msgid "First of 4 2D noises that together define hill/mountain range height." @@ -2998,6 +3190,35 @@ 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 +#, fuzzy +msgid "Floatland noise" +msgstr "Zgomotul solului" + +#: 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 "Fly key" msgstr "" @@ -3051,6 +3272,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -3093,9 +3320,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Forward key" -msgstr "Înainte" +msgstr "Tasta înainte" #: src/settings_translation_file.cpp msgid "Fourth of 4 2D noises that together define hill/mountain range height." @@ -3193,19 +3419,16 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Ground level" -msgstr "Mapgen" +msgstr "Nivelul solului" #: src/settings_translation_file.cpp -#, fuzzy msgid "Ground noise" -msgstr "Mapgen" +msgstr "Zgomotul solului" #: src/settings_translation_file.cpp -#, fuzzy msgid "HTTP mods" -msgstr "Moduri" +msgstr "Moduri HTTP" #: src/settings_translation_file.cpp msgid "HUD scale factor" @@ -3245,9 +3468,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Height noise" -msgstr "Windows Dreapta" +msgstr "Zgomot de înălțime" #: src/settings_translation_file.cpp msgid "Height select noise" @@ -3258,14 +3480,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hill steepness" -msgstr "Mapgen" +msgstr "Abruptul dealului" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hill threshold" -msgstr "Mapgen" +msgstr "Pragul dealului" #: src/settings_translation_file.cpp msgid "Hilliness1 noise" @@ -3575,9 +3795,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "In-Game" -msgstr "Joc" +msgstr "În joc" #: src/settings_translation_file.cpp msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." @@ -3592,9 +3811,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Inc. volume key" -msgstr "Consloă" +msgstr "Inc. tastă de volum" #: src/settings_translation_file.cpp msgid "Initial vertical speed when jumping, in nodes per second." @@ -3647,9 +3865,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Inventory key" -msgstr "Inventar" +msgstr "Tasta pentru inventar" #: src/settings_translation_file.cpp msgid "Invert mouse" @@ -3749,9 +3966,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Jump key" -msgstr "Sari" +msgstr "Tasta de salt" #: src/settings_translation_file.cpp msgid "Jumping speed" @@ -4248,14 +4464,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Lake steepness" -msgstr "Mapgen" +msgstr "Abruptitatea lacului" #: src/settings_translation_file.cpp -#, fuzzy msgid "Lake threshold" -msgstr "Mapgen" +msgstr "Pragul lacului" #: src/settings_translation_file.cpp msgid "Language" @@ -4278,9 +4492,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Large chat console key" -msgstr "Consloă" +msgstr "Tasta de consolă de chat mare" #: src/settings_translation_file.cpp msgid "Leaves style" @@ -4295,9 +4508,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Left key" -msgstr "Meniu Stânga" +msgstr "Tasta stângă" #: src/settings_translation_file.cpp msgid "" @@ -4361,14 +4573,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4432,14 +4636,16 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" -msgstr "Meniul Principal" +msgstr "Scriptul meniului principal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Main menu style" -msgstr "Meniul Principal" +msgstr "Stilul meniului principal" #: src/settings_translation_file.cpp msgid "" @@ -4500,7 +4706,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4528,89 +4736,68 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Carpathian" -msgstr "Mapgen" +msgstr "Gen de mapă carpatin" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Carpathian specific flags" -msgstr "Mapgen" +msgstr "Mapgen Drapele specifice carpatin" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat" -msgstr "Mapgen" +msgstr "Mapgen Plat" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat specific flags" -msgstr "Mapgen" +msgstr "Mapgen Plat steaguri specifice" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal" -msgstr "Mapgen" +msgstr "Fractal Mapgen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal specific flags" -msgstr "Mapgen" +msgstr "Steaguri specifice Mapgen Fractal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5" -msgstr "Mapgen" +msgstr "Genul de mapă V5" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5 specific flags" -msgstr "Mapgen" +msgstr "Steaguri specifice Mapgen V5" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6" -msgstr "Mapgen" +msgstr "Gen de mapă V6" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6 specific flags" -msgstr "Mapgen" +msgstr "Steaguri specifice Mapgen V6" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7" -msgstr "Mapgen" +msgstr "Gen de mapă V7" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7 specific flags" -msgstr "Mapgen" +msgstr "Steaguri specifice Mapgen V7" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Valleys" -msgstr "Mapgen" +msgstr "Mapgen Văi" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Valleys specific flags" -msgstr "Mapgen" +msgstr "Mapgen Văi specifice steaguri" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen debug" -msgstr "Mapgen" - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Mapgen flags" -msgstr "Mapgen" +msgstr "Debug Mapgen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen name" -msgstr "Mapgen" +msgstr "Numele Mapgen" #: src/settings_translation_file.cpp msgid "Max block generate distance" @@ -4676,13 +4863,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4747,9 +4934,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Menus" -msgstr "Meniu" +msgstr "Meniuri" #: src/settings_translation_file.cpp msgid "Mesh cache" @@ -4768,6 +4954,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4792,9 +4982,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mipmapping" -msgstr "Mip Mapping" +msgstr "Cartografierea mip" #: src/settings_translation_file.cpp msgid "Mod channels" @@ -4847,9 +5036,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mute key" -msgstr "apasă o tastă" +msgstr "Tasta pentru mut" #: src/settings_translation_file.cpp msgid "Mute sound" @@ -4928,9 +5116,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5007,10 +5192,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5020,7 +5201,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -5054,13 +5237,20 @@ 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 -#, fuzzy msgid "Pitch move key" -msgstr "Modul Creativ" +msgstr "Tasta de mutare a pitch" #: src/settings_translation_file.cpp msgid "Pitch move mode" @@ -5123,6 +5313,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5142,18 +5344,16 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Range select key" -msgstr "Selectare distanță" +msgstr "Tasta de selectare a intervalului" #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Regular font path" -msgstr "Selectează" +msgstr "Calea regulată a fontului" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5174,9 +5374,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Report path" -msgstr "Selectează" +msgstr "Calea raportului" #: src/settings_translation_file.cpp msgid "" @@ -5209,9 +5408,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Right key" -msgstr "Meniu Drepata" +msgstr "Tasta dreapta" #: src/settings_translation_file.cpp msgid "Rightclick repetition interval" @@ -5230,9 +5428,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "River noise" -msgstr "Windows Dreapta" +msgstr "Zgomotul râului" #: src/settings_translation_file.cpp msgid "River size" @@ -5300,14 +5497,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshot format" -msgstr "PrintScreen" +msgstr "Formatul de captură de ecran" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshot quality" -msgstr "PrintScreen" +msgstr "Calitatea capturii de ecran" #: src/settings_translation_file.cpp msgid "" @@ -5372,32 +5567,26 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server / Singleplayer" -msgstr "Singleplayer" +msgstr "Server / Jucător singur" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server URL" -msgstr "Server" +msgstr "URL-ul serverului" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server address" -msgstr "Port server" +msgstr "Adresa serverului" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server description" -msgstr "Port server" +msgstr "Descrierea serverului" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server name" -msgstr "Server" +msgstr "Numele serverului" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server port" msgstr "Port server" @@ -5406,14 +5595,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Serverlist URL" -msgstr "Listă de servere publică" +msgstr "URL listă server" #: src/settings_translation_file.cpp -#, fuzzy msgid "Serverlist file" -msgstr "Listă de servere publică" +msgstr "Fișier listă pentru servere" #: src/settings_translation_file.cpp msgid "" @@ -5444,9 +5631,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shader path" -msgstr "Umbră" +msgstr "Calea shaderului" #: src/settings_translation_file.cpp msgid "" @@ -5526,9 +5712,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Smooth lighting" -msgstr "Lumină mai bună" +msgstr "Lumină fină" #: src/settings_translation_file.cpp msgid "" @@ -5545,14 +5730,12 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Sneak key" -msgstr "Furișează" +msgstr "Cheie pentru furiș" #: src/settings_translation_file.cpp -#, fuzzy msgid "Sneaking speed" -msgstr "Furișează" +msgstr "Viteza de furișare" #: src/settings_translation_file.cpp msgid "Sneaking speed, in nodes per second." @@ -5563,9 +5746,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Special key" -msgstr "Furișează" +msgstr "Cheie specială" #: src/settings_translation_file.cpp msgid "Special key for climbing/descending" @@ -5581,6 +5763,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5603,6 +5792,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5614,15 +5807,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5672,9 +5875,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Texture path" -msgstr "Pachete de tetură" +msgstr "Calea texturii" #: src/settings_translation_file.cpp msgid "" @@ -5740,7 +5942,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5841,16 +6043,14 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touch screen threshold" -msgstr "Mapgen" +msgstr "Prag ecran tactil" #: src/settings_translation_file.cpp msgid "Trees noise" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Trilinear filtering" msgstr "Filtrare Triliniară" @@ -5895,6 +6095,10 @@ 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 "" @@ -6018,9 +6222,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Volume" -msgstr "Volum Sunet" +msgstr "Volum" #: src/settings_translation_file.cpp msgid "" @@ -6062,29 +6265,24 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving leaves" -msgstr "Copaci fantezici" +msgstr "Frunze legănătoare" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids" -msgstr "Frunze legănătoare" +msgstr "Fluturarea lichidelor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wave height" -msgstr "Apă ondulatoare" +msgstr "Ridicând înălțimea valurilor lichidelor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wave speed" -msgstr "Frunze legănătoare" +msgstr "Viteza undelor lichide" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wavelength" -msgstr "Apă ondulatoare" +msgstr "Lungirea undei lichide" #: src/settings_translation_file.cpp msgid "Waving plants" @@ -6184,9 +6382,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "World start time" -msgstr "Numele lumii" +msgstr "Ora de începere a lumii" #: src/settings_translation_file.cpp msgid "" @@ -6221,6 +6418,14 @@ 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 "" @@ -6253,21 +6458,30 @@ msgstr "" #, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "Mapgen" +#~ msgid "Toggle Cinematic" +#~ msgstr "Intră pe rapid" #, fuzzy -#~ msgid "Enable VBO" -#~ msgstr "Activează MP" +#~ msgid "Select Package File:" +#~ msgstr "Selectează Fișierul Modului:" #, fuzzy #~ msgid "Enables filmic tone mapping" #~ msgstr "Activează Daune" #, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "Selectează Fișierul Modului:" +#~ msgid "Enable VBO" +#~ msgstr "Activează MP" #, fuzzy -#~ msgid "Toggle Cinematic" -#~ msgstr "Intră pe rapid" +#~ msgid "Darkness sharpness" +#~ msgstr "Mapgen" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Se descarca si se instaleaza $ 1, vă rugăm să așteptați ..." + +#~ msgid "Back" +#~ msgstr "Înapoi" + +#~ msgid "Ok" +#~ msgstr "Ok" diff -Nru minetest-5.2.0/po/ru/minetest.po minetest-5.3.0/po/ru/minetest.po --- minetest-5.2.0/po/ru/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/ru/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-04-02 14:09+0000\n" -"Last-Translator: Tiller Luna \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-18 13:41+0000\n" +"Last-Translator: Maksim Gamarnik \n" "Language-Team: Russian \n" "Language: ru\n" @@ -13,7 +13,7 @@ "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 4.0-dev\n" +"X-Generator: Weblate 4.1.1-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -23,6 +23,10 @@ msgid "You died" msgstr "Вы умерли" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "ОК" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Произошла ошибка в скрипте Lua:" @@ -36,10 +40,6 @@ msgstr "Главное меню" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Oк" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Переподключиться" @@ -115,6 +115,10 @@ "Разрешены только следующие символы: [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Больше Модов" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Мод:" @@ -152,27 +156,25 @@ msgstr "Мир:" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "enabled" -msgstr "включить" +msgstr "включен" #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Все дополнения" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Назад" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Назад в главное меню" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "" -"Загружается и устанавливается $1.\n" -"Пожалуйста, подождите..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB недоступен, когда Minetest скомпилирован без cURL" + +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Downloading..." +msgstr "Загрузка..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -217,15 +219,57 @@ msgid "Update" msgstr "Обновить" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +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 +#, fuzzy +msgid "Altitude dry" +msgstr "Высота нивального пояса" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biome blending" +msgstr "Шум биомов" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biomes" +msgstr "Шум биомов" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caverns" +msgstr "Шум пещеры" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caves" +msgstr "Октавы" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Создать" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "Итерации" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Скачивайте игры, такие как Minetest Game, на minetest.net" @@ -233,25 +277,153 @@ msgid "Download one from minetest.net" msgstr "Вы можете скачать их на minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Dungeons" +msgstr "Шум подземелья" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Плоская местность" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Floating landmasses in the sky" +msgstr "Плотность гор на парящих островах" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Floatlands (experimental)" +msgstr "Уровень парящих островов" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" 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 +#, fuzzy +msgid "Humid rivers" +msgstr "Видеодрайвер" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +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 +#, fuzzy +msgid "Mapgen-specific flags" +msgstr "Специальные флаги картогенератора V5" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +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 +#, fuzzy +msgid "Rivers" +msgstr "Размер рек" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Зерно" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Terrain surface erosion" +msgstr "Базовый шум поверхности" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Деревья и Джунгли-трава" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +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 +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "" "Внимание: «Minimal development test» предназначен только для разработчиков." @@ -294,13 +466,12 @@ msgstr "Переименовать пакет модов:" #: builtin/mainmenu/dlg_rename_modpack.lua -#, fuzzy msgid "" "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." msgstr "" -"Этот пакет модов имеет имя, явно указанное в modpack.conf, которое не " -"изменится от переименования здесь." +"Этот модпак имеет явное имя, указанное в modpack.conf, который переопределит " +"любое переименование здесь." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" @@ -355,9 +526,8 @@ msgstr "Пожалуйста, введите допустимое число." #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "Restore Default" -msgstr "Сбросить значение" +msgstr "Сброс настроек" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Scale" @@ -439,9 +609,8 @@ msgstr "$1 модов" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Failed to install $1 to $2" -msgstr "Невозможно установить $1 в $2" +msgstr "Не удалось установить $1 в $2" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" @@ -572,6 +741,10 @@ msgstr "Запустить сервер" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Установите игры из ContentDB" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Имя/Пароль" @@ -1230,6 +1403,14 @@ 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 "Звук включён" @@ -1261,7 +1442,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "Приближение в настоящее время отключено игрой или модом" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "OK" @@ -1788,7 +1969,6 @@ "когда будет находиться за пределами основного колеса." #: 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" @@ -1873,6 +2053,11 @@ msgstr "3D-режим" #: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode parallax strength" +msgstr "Сила карт нормалей" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "3D-шум, определяющий огромные пещеры." @@ -1885,6 +2070,14 @@ "Также определяет структуру гор на парящих островах." #: 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 "3D-шум, определяющий структуру стен речного каньона." @@ -1946,7 +2139,8 @@ msgstr "Интервал сохранения карты" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +#, fuzzy +msgid "Absolute limit of queued blocks to emerge" msgstr "Абсолютный лимит появляющихся запросов" #: src/settings_translation_file.cpp @@ -1996,6 +2190,16 @@ "только для Android). Например для мониторов с разрешением в 4k." #: 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 "Advanced" msgstr "Дополнительно" @@ -2007,10 +2211,13 @@ "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 "Altitude chill" -msgstr "Высота нивального пояса" +"Изменяет кривую блеска, применяя к ней «гамма-\n" +"коррекцию». Более высокие значения делают средний \n" +"и нижний уровни света ярче. Значение «1.0» оставляет\n" +"кривую блеска без изменений. Это оказывает \n" +"существенное влияние только на дневной и \n" +"искусственный свет, он очень мало влияет на \n" +"естественный ночной свет." #: src/settings_translation_file.cpp msgid "Always fly and fast" @@ -2164,24 +2371,20 @@ msgstr "Оптимизированное расстояние отправки блока" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic font path" -msgstr "Путь к моноширинному шрифту" +msgstr "Путь к жирному и курсивному шрифту" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic monospace font path" -msgstr "Путь к моноширинному шрифту" +msgstr "Путь к жирному и курсиву моноширинного шрифта" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold font path" -msgstr "Путь к шрифту" +msgstr "Путь к жирному шрифту" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold monospace font path" -msgstr "Путь к моноширинному шрифту" +msgstr "Путь к жирному моноширинному шрифту" #: src/settings_translation_file.cpp msgid "Build inside player" @@ -2196,7 +2399,6 @@ msgstr "Бампмаппинг" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -2204,7 +2406,8 @@ "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" "Расстояние между камерой и плоскостью отсечения в нодах от 0 до 0.5.\n" -"Большинству пользователей не потребуется менять этот параметр.\n" +"Работает только на платформах с GLES. Большинству пользователей не требуется " +"менять его.\n" "Его увеличение может уменьшить количество артефактов на слабых графических " "процессорах.\n" "0.1 — по умолчанию; 0.25 — хорошее значение для слабых планшетов." @@ -2270,6 +2473,8 @@ "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 "" @@ -2287,10 +2492,20 @@ "быть полезно для небольших экранов." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "Размер шрифта" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Кнопка чата" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "Отладочный уровень" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "Максимальное количество сообщений в чате" @@ -2489,6 +2704,11 @@ "Value >= 10.0 completely disables generation of tunnels and avoids the\n" "intensive noise calculations." msgstr "" +"Контролирует ширину туннелей, меньшее значение создаёт более широкие " +"туннели.\n" +"Значение >= 10.0 полностью отключает генерацию туннелей и позволяют " +"избежать\n" +"интенсивного расчёта шумов." #: src/settings_translation_file.cpp msgid "Crash message" @@ -2539,7 +2759,6 @@ msgstr "Клавиша уменьшения громкости" #: src/settings_translation_file.cpp -#, fuzzy msgid "Decrease this to increase liquid resistance to movement." msgstr "Уменьшите значение, чтобы увеличить сопротивление жидкости движению." @@ -2576,6 +2795,11 @@ msgstr "Формат отчёта по умолчанию" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Стандартная игра" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2751,6 +2975,8 @@ "Enable IPv6 support (for both client and server).\n" "Required for IPv6 connections to work at all." msgstr "" +"Включить поддержку IPv6 (для клиента и сервера).\n" +"Необходимо для работы IPv6-соединений." #: src/settings_translation_file.cpp msgid "" @@ -2840,6 +3066,8 @@ "Enable vertex buffer objects.\n" "This should greatly improve graphics performance." msgstr "" +"Включить объекты буфера вершин.\n" +"Это должно значительно улучшить графическую производительность." #: src/settings_translation_file.cpp msgid "" @@ -2850,14 +3078,14 @@ "Например: 0 отключает покачивание, 1.0 для обычного, 2.0 для двойного." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enable/disable running an IPv6 server.\n" "Ignored if bind_address is set.\n" "Needs enable_ipv6 to be enabled." msgstr "" "Включить/отключить запуск IPv6-сервера.\n" -"Игнорируется, если задан «bind_address»." +"Игнорируется, если задан «bind_address».\n" +"Для включения необходим «enable_ipv6»." #: src/settings_translation_file.cpp msgid "" @@ -2913,6 +3141,10 @@ "sound controls will be non-functional.\n" "Changing this setting requires a restart." msgstr "" +"Включает звуковую систему.\n" +"Если её отключить, то это полностью уберёт все звуки, а внутриигровые\n" +"настройки звука не будут работать.\n" +"Изменение этого параметра требует перезапуска." #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" @@ -2931,6 +3163,16 @@ "между блоками, когда значение больше, чем 0." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "Кадровая частота во время паузы" @@ -2947,9 +3189,8 @@ msgstr "Коэффициент покачивания при падении" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "Резервный шрифт" +msgstr "Путь к резервному шрифту" #: src/settings_translation_file.cpp msgid "Fallback font shadow" @@ -3049,6 +3290,41 @@ msgstr "Фиксация виртуального джойстика" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Плотность гор на парящих островах" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "Максимальная Y подземелья" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "Минимальная Y подземелья" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "Базовый шум парящих островов" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Экспонента гор на парящих островах" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Базовый шум парящих островов" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Уровень парящих островов" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Клавиша полёта" @@ -3070,11 +3346,11 @@ #: 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" @@ -3090,14 +3366,20 @@ #: src/settings_translation_file.cpp msgid "Font size of the default font in point (pt)." -msgstr "" +msgstr "Размер стандартного шрифта в пунктах (pt)." #: src/settings_translation_file.cpp msgid "Font size of the fallback font in point (pt)." -msgstr "" +msgstr "Размер резервного шрифта в пунктах (pt)." #: src/settings_translation_file.cpp msgid "Font size of the monospace font in point (pt)." +msgstr "Размер моноширинного шрифта в пунктах (pt)." + +#: 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 @@ -3771,14 +4053,12 @@ 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" @@ -4611,11 +4891,11 @@ #: 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" @@ -4727,14 +5007,6 @@ msgstr "Центр среднего подъёма кривой света" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Ограничение очередей emerge на диске" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Ограничение очередей emerge для генерации" - -#: 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" @@ -4811,6 +5083,11 @@ msgstr "Нижний лимит Y для подземелий." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Нижний лимит Y для подземелий." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Скрипт главного меню" @@ -4894,9 +5171,12 @@ "активируются джунгли, а флаг «jungles» игнорируется." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "Атрибуты генерации карт для Mapgen v7.\n" "«хребты» включают реки." @@ -4986,10 +5266,6 @@ msgstr "Отладка картогенератора" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Флаги картогенератора" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Название картогенератора" @@ -5031,7 +5307,7 @@ #: 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." @@ -5063,17 +5339,19 @@ "загрузки." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Максимальное количество блоков в очереди на генерацию. Оставьте пустым для " "автоматического выбора подходящего значения." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Максимальное количество блоков в очереди на загрузку из файла. Оставьте " "пустым для автоматического выбора подходящего значения." @@ -5172,6 +5450,10 @@ msgstr "Метод подсветки выделенного объекта." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Миникарта" @@ -5342,11 +5624,9 @@ msgstr "Количество emerge-потоков" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5444,10 +5724,6 @@ msgstr "Масштаб параллаксной окклюзии" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Сила параллакса" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5457,8 +5733,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Путь для сохранения скриншотов." +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 "" @@ -5494,6 +5772,15 @@ msgstr "Пауза при потере фокуса" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "Ограничение очередей emerge для генерации" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Физика" @@ -5574,6 +5861,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -6096,6 +6395,13 @@ "Файлы, которых не будет, будут скачены обычным путём." #: 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 #, fuzzy msgid "" "Spread of light curve boost range.\n" @@ -6122,6 +6428,11 @@ msgstr "Шаг шума распространения гор" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "Сила параллакса." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Сила сгенерированных карт нормалей." @@ -6133,10 +6444,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Сила параллакса." - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "Строгая проверка протокола" @@ -6145,6 +6452,20 @@ 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 the 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 "Синхронный SQLite" @@ -6274,6 +6595,7 @@ "настройке мода." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The radius of the volume of blocks around every player that is subject to " "the\n" @@ -6281,7 +6603,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" "Радиус объёма блоков вокруг каждого игрока, в котором действуют\n" "активные блоки, определённые в блоках карты (16 нод).\n" @@ -6481,6 +6803,11 @@ msgstr "Верхний лимит Y для подземелий." #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Верхний лимит Y для подземелий." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Объёмные облака вместо плоских." @@ -6865,6 +7192,14 @@ msgstr "Y-расстояние, над которым пещеры расширяются до полного размера." #: 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 "Y-уровень средней поверхности рельефа." @@ -6896,135 +7231,143 @@ msgid "cURL timeout" msgstr "cURL тайм-аут" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Регулирует гамма-кодировку таблиц освещения. Более высокие значения " -#~ "ярче.\n" -#~ "Этот параметр предназначен только для клиента и игнорируется сервером." +#~ msgid "Toggle Cinematic" +#~ msgstr "Кино" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "Управляет сужением островов горного типа ниже средней точки." +#~ msgid "Select Package File:" +#~ msgstr "Выберите файл дополнения:" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Центр среднего подъёма кривой света." +#, fuzzy +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Верхний предел по Y для больших псевдослучайных пещер." -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Контролирует плотность горной местности парящих островов.\n" -#~ "Является смещением, добавляемым к значению шума 'mgv7_np_mountain'." +#~ msgid "Waving Water" +#~ msgstr "Волны на воде" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Контролирует ширину тоннелей. Меньшие значения создают более широкие " -#~ "тоннели." +#~ msgid "Projecting dungeons" +#~ msgstr "Проступающие подземелья" -#~ msgid "Darkness sharpness" -#~ msgstr "Резкость темноты" +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Y-уровень, на который распространяются тени с плавающей точкой." -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "Y-уровень середины поплавка и поверхности озера." + +#~ msgid "Waving water" +#~ msgstr "Волны на воде" + +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" -#~ "Определяет области гладкой поверхности на парящих островах.\n" -#~ "Гладкие парящие острова появляются, когда шум больше ноля." +#~ "Вариация высоты холмов и глубин озёр на гладкой местности парящих " +#~ "островов." #~ msgid "" -#~ "Deprecated, define and locate cave liquids using biome definitions " -#~ "instead.\n" -#~ "Y of upper limit of lava in large caves." +#~ "Typical maximum height, above and below midpoint, of floatland mountains." #~ msgstr "" -#~ "Устарело, определяет и располагает жидкости в пещерах с использованием " -#~ "определений биома.\n" -#~ "Y верхней границы лавы в больших пещерах." +#~ "Типичная максимальная высота, выше и ниже средней точки гор парящих " +#~ "островов." -#~ msgid "Enable VBO" -#~ msgstr "Включить объекты буфера вершин (VBO)" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Этот шрифт будет использован для некоторых языков." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Включить кинематографическое тональное отображение" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Сила среднего подъёма кривой света." -#~ msgid "Floatland base height noise" -#~ msgstr "Шум базовой высоты парящих островов" +#~ msgid "Shadow limit" +#~ msgstr "Лимит теней" -#~ msgid "Floatland base noise" -#~ msgstr "Базовый шум парящих островов" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Путь к шрифту TrueType или картинке со шрифтом." -#~ msgid "Floatland level" -#~ msgstr "Уровень парящих островов" +#~ msgid "Lightness sharpness" +#~ msgstr "Резкость освещённости" -#~ msgid "Floatland mountain density" -#~ msgstr "Плотность гор на парящих островах" +#~ msgid "Lava depth" +#~ msgstr "Глубина лавы" -#~ msgid "Floatland mountain exponent" -#~ msgstr "Экспонента гор на парящих островах" +#~ msgid "IPv6 support." +#~ msgstr "Поддержка IPv6." -#~ msgid "Floatland mountain height" -#~ msgstr "Высота гор на парящих островах" +#~ msgid "Gamma" +#~ msgstr "Гамма" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "Прозрачность тени шрифта (непрозрачность от 0 до 255)." -#~ msgid "Gamma" -#~ msgstr "Гамма" +#~ msgid "Floatland mountain height" +#~ msgstr "Высота гор на парящих островах" -#~ msgid "IPv6 support." -#~ msgstr "Поддержка IPv6." +#~ msgid "Floatland base height noise" +#~ msgstr "Шум базовой высоты парящих островов" -#~ msgid "Lava depth" -#~ msgstr "Глубина лавы" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Включить кинематографическое тональное отображение" -#~ msgid "Lightness sharpness" -#~ msgstr "Резкость освещённости" +#~ msgid "Enable VBO" +#~ msgstr "Включить объекты буфера вершин (VBO)" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Путь к шрифту TrueType или картинке со шрифтом." +#~ msgid "" +#~ "Deprecated, define and locate cave liquids using biome definitions " +#~ "instead.\n" +#~ "Y of upper limit of lava in large caves." +#~ msgstr "" +#~ "Устарело, определяет и располагает жидкости в пещерах с использованием " +#~ "определений биома.\n" +#~ "Y верхней границы лавы в больших пещерах." -#~ msgid "Shadow limit" -#~ msgstr "Лимит теней" +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "Определяет области гладкой поверхности на парящих островах.\n" +#~ "Гладкие парящие острова появляются, когда шум больше ноля." -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Сила среднего подъёма кривой света." +#~ msgid "Darkness sharpness" +#~ msgstr "Резкость темноты" -#~ msgid "This font will be used for certain languages." -#~ msgstr "Этот шрифт будет использован для некоторых языков." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "" +#~ "Контролирует ширину тоннелей. Меньшие значения создают более широкие " +#~ "тоннели." #~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." #~ msgstr "" -#~ "Типичная максимальная высота, выше и ниже средней точки гор парящих " -#~ "островов." +#~ "Контролирует плотность горной местности парящих островов.\n" +#~ "Является смещением, добавляемым к значению шума 'mgv7_np_mountain'." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." -#~ msgstr "" -#~ "Вариация высоты холмов и глубин озёр на гладкой местности парящих " -#~ "островов." +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Центр среднего подъёма кривой света." -#~ msgid "Waving water" -#~ msgstr "Волны на воде" +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." +#~ msgstr "Управляет сужением островов горного типа ниже средней точки." -#~ msgid "Y-level of floatland midpoint and lake surface." -#~ msgstr "Y-уровень середины поплавка и поверхности озера." +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Регулирует гамма-кодировку таблиц освещения. Более высокие значения " +#~ "ярче.\n" +#~ "Этот параметр предназначен только для клиента и игнорируется сервером." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Y-уровень, на который распространяются тени с плавающей точкой." +#~ msgid "Path to save screenshots at." +#~ msgstr "Путь для сохранения скриншотов." -#~ msgid "Projecting dungeons" -#~ msgstr "Проступающие подземелья" +#~ msgid "Parallax occlusion strength" +#~ msgstr "Сила параллакса" -#~ msgid "Waving Water" -#~ msgstr "Волны на воде" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Ограничение очередей emerge на диске" -#, fuzzy -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Верхний предел по Y для больших псевдослучайных пещер." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "" +#~ "Загружается и устанавливается $1.\n" +#~ "Пожалуйста, подождите..." -#~ msgid "Select Package File:" -#~ msgstr "Выберите файл дополнения:" +#~ msgid "Back" +#~ msgstr "Назад" -#~ msgid "Toggle Cinematic" -#~ msgstr "Кино" +#~ msgid "Ok" +#~ msgstr "Oк" diff -Nru minetest-5.2.0/po/sk/minetest.po minetest-5.3.0/po/sk/minetest.po --- minetest-5.2.0/po/sk/minetest.po 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/po/sk/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,6341 @@ +# 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: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-08 20:47+0000\n" +"Last-Translator: rubenwardy \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 4.2-dev\n" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "You died" +msgstr "Zomrel si" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "Respawn" +msgstr "Oživiť" + +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "OK" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "Server požadoval obnovu spojenia:" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "Znova pripojiť" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Hlavné menu" + +#: builtin/fstk/ui.lua +msgid "An error occurred in a Lua script:" +msgstr "Chyba v lua skripte:" + +#: builtin/fstk/ui.lua +msgid "An error occurred:" +msgstr "Chyba:" + +#: builtin/mainmenu/common.lua src/client/game.cpp +msgid "Loading..." +msgstr "Nahrávam..." + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Skús znova povoliť verejný zoznam serverov a skontroluj internetové " +"pripojenie." + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "Server podporuje verzie protokolov: $1 - $2. " + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "Server vyžaduje protokol verzie $1. " + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "Podporujeme verzie protokolov: $1 - $2." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "Podporujeme len protokol verzie $1." + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "Nesúhlas verzií protokolov. " + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Svet:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No modpack description provided." +msgstr "Popis balíka rozšírení nie je k dispozícií." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No game description provided." +msgstr "Popis hry nie je k dispozícií." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Rozšírenie:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No (optional) dependencies" +msgstr "Bez (voliteľných) závislostí" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No hard dependencies" +msgstr "Bez povinných závislostí" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Optional dependencies:" +msgstr "Voliteľné závislosti:" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Dependencies:" +msgstr "Závislosti:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No optional dependencies" +msgstr "Bez voliteľných závislostí" + +#: builtin/mainmenu/dlg_config_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Ulož" + +#: 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_rename_modpack.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp +#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiPasswordChange.cpp +msgid "Cancel" +msgstr "Zruš" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Nájdi viac rozšírení" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable modpack" +msgstr "Deaktivuj rozšírenie" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable modpack" +msgstr "Povoľ rozšírenie" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "povolené" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable all" +msgstr "Deaktivuj všetko" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "Povoľ všetko" + +#: 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 "" +"Nepodarilo sa aktivovať rozšírenie \"$1\" lebo obsahuje nepovolené znaky. " +"Povolené sú len znaky [a-z0-9_]." + +#: builtin/mainmenu/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/dlg_contentstore.lua +msgid "All packages" +msgstr "Všetky balíčky" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Games" +msgstr "Hry" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Mods" +msgstr "Rozšírenia" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Texture packs" +msgstr "Balíčky textúr" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Failed to download $1" +msgstr "Nepodarilo sa stiahnuť $1" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "Hľadaj" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Back to Main Menu" +msgstr "Naspäť do hlavného menu" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No results" +msgstr "Bez výsledku" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No packages could be retrieved" +msgstr "Nepodarilo sa stiahnuť žiadne balíčky" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "Sťahujem..." + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install" +msgstr "Inštaluj" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Update" +msgstr "Aktualizuj" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Uninstall" +msgstr "Odinštaluj" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Zobraziť" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Jaskyne" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Obrovské jaskyne hlboko v podzemí" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Rieky na úrovni hladiny mora" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Rieky" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Hory" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Lietajúce krajiny (experimentálne)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Poletujúce pevniny na oblohe" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "Ochladenie s nadmorskou výškou" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "Znižuje teplotu s nadmorskou výškou" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "Sucho v nadmorskej výške" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "Znižuje vlhkosť s nadmorskou výškou" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Vlhkosť riek" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Zvyšuje vlhkosť v okolí riek" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Premenlivá hĺbka riek" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "" +"Nízka vlhkosť a vysoké teploty spôsobujú znižovanie hladín, alebo vysychanie " +"riek" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Kopce" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Jazerá" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "Dodatočný terén" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Generuj nefragmentovaný terén: oceány a podzemie" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Stromy a vysoká tráva" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Rovný terén" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Prúd bahna" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "Erózia terénu" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Mierne pásmo, Púšť, Džungľa, Tundra, Tajga" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Mierne pásmo, Púšť, Džungľa" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Mierne pásmo, Púšť" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no games installed." +msgstr "Nie je nainštalovaná žiadna hra." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Stiahni jednu z minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Jaskyne" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Kobky" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Dekorácie" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" +"Štruktúry objavujúce sa na povrchu (nemá vplyv na stromy a vysokú trávu " +"vytvorenú verziou v6)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "Štruktúry objavujúce sa na povrchu, typicky stromy a rastliny" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Sieť tunelov a jaskýň" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Ekosystémy" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Miešanie ekosystémov" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Smooth transition between biomes" +msgstr "Plynulý prechod medzi ekosystémami" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Príznaky generátora máp" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Špecifické príznaky generátora máp" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." +msgstr "Varovanie: Vývojarský Test je určený vývojárom." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a game, such as Minetest Game, from minetest.net" +msgstr "Stiahni si hru, ako napr. Minetest Game z minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Meno sveta" + +#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Seed" +msgstr "Semienko" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Generátor mapy" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Hra" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Vytvor" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "Svet menom \"$1\" už existuje" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No game selected" +msgstr "Nie je zvolená hra" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "Are you sure you want to delete \"$1\"?" +msgstr "Si si istý, že chceš zmazať \"$1\"?" + +#: builtin/mainmenu/dlg_delete_content.lua +#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua +#: src/client/keycode.cpp +msgid "Delete" +msgstr "Zmaž" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: failed to delete \"$1\"" +msgstr "pkgmgr: neúspech pri mazaní \"$1\"" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: invalid path \"$1\"" +msgstr "pkgmgr: nesprávna cesta \"$1\"" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "Delete World \"$1\"?" +msgstr "Zmazať svet \"$1\"?" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Accept" +msgstr "Prijať" + +#: 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 "" +"Tento balíček rozšírení má vo svojom modpack.conf explicitne zadané meno, " +"ktoré prepíše akékoľvek tunajšie premenovanie." + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Premenuj balíček rozšírení:" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Disabled" +msgstr "Zablokované" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Enabled" +msgstr "Povolené" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Browse" +msgstr "Prehliadaj" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Offset" +msgstr "Ofset" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Scale" +msgstr "Mierka" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X spread" +msgstr "Rozptyl X" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y spread" +msgstr "Rozptyl Y" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "2D Noise" +msgstr "2D šum" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z spread" +msgstr "Rozptyl Z" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Octaves" +msgstr "Oktávy" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Persistance" +msgstr "Vytrvalosť" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Lacunarity" +msgstr "Lakunarita" + +#. ~ "defaults" is a noise parameter flag. +#. It describes the default processing options +#. for noise settings in main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "defaults" +msgstr "štandardné hodnoty (defaults)" + +#. ~ "eased" is a noise parameter flag. +#. It is used to make the map smoother and +#. can be enabled in noise settings in +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "eased" +msgstr "zjemnené (eased)" + +#. ~ "absvalue" is a noise parameter flag. +#. It is short for "absolute value". +#. It can be enabled in noise settings in +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "absvalue" +msgstr "Absolútna hodnota (absvalue)" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X" +msgstr "X" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y" +msgstr "Y" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z" +msgstr "Z" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "(No description of setting given)" +msgstr "(Nie je zadaný popis nastavenia)" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid integer." +msgstr "Prosím zadaj platné celé číslo." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must be at least $1." +msgstr "Hodnota musí byť najmenej $1." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must not be larger than $1." +msgstr "Hodnota nesmie byť vyššia ako $1." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid number." +msgstr "Prosím vlož platné číslo." + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select directory" +msgstr "Zvoľ adresár" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select file" +msgstr "Zvoľ súbor" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "< Back to Settings page" +msgstr "< Späť na nastavenia" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Edit" +msgstr "Upraviť" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Restore Default" +msgstr "Obnov štandardné hodnoty" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Show technical names" +msgstr "Zobraz technické názvy" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 (Enabled)" +msgstr "$1 (povolený)" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a $1 as a texture pack" +msgstr "Nie je možné nainštalovať $1 ako balíček textúr" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Failed to install $1 to $2" +msgstr "Zlyhala inštalácia $1 na $2" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to find a valid mod or modpack" +msgstr "Nie je možné nájsť platné rozšírenie, alebo balíček rozšírení" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a modpack as a $1" +msgstr "Nie je možné nainštalovať balíček rozšírení $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find suitable folder name for modpack $1" +msgstr "" +"Inštalácia rozšírenia: Nie je možné nájsť vhodný adresár pre balíček " +"rozšírení $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a mod as a $1" +msgstr "Nie je možné nainštalovať rozšírenie $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find real mod name for: $1" +msgstr "" +"Inštalácia rozšírenia: Nie je možné nájsť skutočné meno rozšírenia pre: $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a game as a $1" +msgstr "Nie je možné nainštalovať hru $1" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: file: \"$1\"" +msgstr "Inštalácia: súbor: \"$1\"" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: Unsupported file type \"$1\" or broken archive" +msgstr "Inštalácia: Nepodporovaný typ súboru \"$1\", alebo poškodený archív" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 mods" +msgstr "$1 rozšírenia" + +#: builtin/mainmenu/tab_content.lua +msgid "Installed Packages:" +msgstr "Nainštalované balíčky:" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +msgstr "Prehliadaj online obsah" + +#: builtin/mainmenu/tab_content.lua +msgid "No package description available" +msgstr "Nie je k dispozícií popis balíčka" + +#: builtin/mainmenu/tab_content.lua +msgid "Rename" +msgstr "Premenuj" + +#: builtin/mainmenu/tab_content.lua +msgid "No dependencies." +msgstr "Bez závislostí." + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "Deaktivuj balíček textúr" + +#: builtin/mainmenu/tab_content.lua +msgid "Use Texture Pack" +msgstr "Použi balíček textúr" + +#: builtin/mainmenu/tab_content.lua +msgid "Information:" +msgstr "Informácie:" + +#: builtin/mainmenu/tab_content.lua +msgid "Uninstall Package" +msgstr "Odinštaluj balíček" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "Obsah" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Uznanie" + +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Hlavný vývojari" + +#: builtin/mainmenu/tab_credits.lua +msgid "Active Contributors" +msgstr "Aktívny prispievatelia" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Predchádzajúci hlavný vývojári" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "Predchádzajúci prispievatelia" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Inštaluj hru z ContentDB" + +#: builtin/mainmenu/tab_local.lua +msgid "Configure" +msgstr "Konfigurácia" + +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "Nový" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "Zvoľ si svet:" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative Mode" +msgstr "Kreatívny mód" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua +msgid "Enable Damage" +msgstr "Povoľ poškodenie" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Server" +msgstr "Hosťuj server" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Game" +msgstr "Hosťuj hru" + +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" +msgstr "Zverejni server" + +#: builtin/mainmenu/tab_local.lua +msgid "Name/Password" +msgstr "Meno/Heslo" + +#: builtin/mainmenu/tab_local.lua +msgid "Bind Address" +msgstr "Priraď adresu" + +#: builtin/mainmenu/tab_local.lua +msgid "Port" +msgstr "Port" + +#: builtin/mainmenu/tab_local.lua +msgid "Server Port" +msgstr "Port servera" + +#: builtin/mainmenu/tab_local.lua +msgid "Play Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Start Game" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Address / Port" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name / Password" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Del. Favorite" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Favorite" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Ping" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "" + +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "" + +#. ~ PvP = Player versus Player +#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Join Game" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Outlining" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Particles" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Screen:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Autosave Screen Size" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Shaders" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders (unavailable)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/client/game.cpp +msgid "Change Keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "All Settings" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold: (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bump Mapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Tone Mapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Generate Normal Maps" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Liquids" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Settings" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "" + +#: src/client/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client/client.cpp +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided password file failed to open: " +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Please choose a name!" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "" + +#. ~ DO NOT TRANSLATE THIS LITERALLY! +#. This is a special string. Put either "no" or "yes" +#. into the translation field (literally). +#. Choose "yes" if the language requires use of the fallback +#. font, "no" otherwise. +#. The fallback font is (normally) required for languages with +#. non-Latin script, like Chinese. +#. When in doubt, test your translation. +#: src/client/fontengine.cpp +msgid "needs_fallback_font" +msgstr "" + +#: src/client/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/client/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/client/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/client/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/client/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/client/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "Client side scripting is disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Sound muted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound unmuted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "" + +#: src/client/game.cpp +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 "" + +#: src/client/game.cpp +msgid "Fly mode enabled (note: no 'fly' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Pitch move mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Pitch move 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 "Fast 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 "Noclip mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Cinematic mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Cinematic mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x1" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x2" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in surface mode, Zoom x4" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x1" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x2" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap in radar mode, Zoom x4" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info shown" +msgstr "" + +#: src/client/game.cpp +msgid "Profiler graph shown" +msgstr "" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info, profiler graph, and wireframe hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info and profiler graph hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update enabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at maximum: %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at minimum: %d" +msgstr "" + +#: src/client/game.cpp +msgid "Enabled unlimited viewing range" +msgstr "" + +#: src/client/game.cpp +msgid "Disabled unlimited viewing range" +msgstr "" + +#: src/client/game.cpp +msgid "Zoom currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\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 "" +"Controls:\n" +"- %s: move forwards\n" +"- %s: move backwards\n" +"- %s: move left\n" +"- %s: move right\n" +"- %s: jump/climb\n" +"- %s: sneak/go down\n" +"- %s: drop item\n" +"- %s: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- %s: chat\n" +msgstr "" + +#: src/client/game.cpp +msgid "Continue" +msgstr "" + +#: src/client/game.cpp +msgid "Change Password" +msgstr "" + +#: src/client/game.cpp +msgid "Game paused" +msgstr "" + +#: src/client/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to OS" +msgstr "" + +#: src/client/game.cpp +msgid "Game info:" +msgstr "" + +#: src/client/game.cpp +msgid "- Mode: " +msgstr "" + +#: src/client/game.cpp +msgid "Remote server" +msgstr "" + +#: src/client/game.cpp +msgid "- Address: " +msgstr "" + +#: src/client/game.cpp +msgid "Hosting server" +msgstr "" + +#: src/client/game.cpp +msgid "- Port: " +msgstr "" + +#: src/client/game.cpp +msgid "Singleplayer" +msgstr "" + +#: src/client/game.cpp +msgid "On" +msgstr "" + +#: src/client/game.cpp +msgid "Off" +msgstr "" + +#: src/client/game.cpp +msgid "- Damage: " +msgstr "" + +#: src/client/game.cpp +msgid "- Creative Mode: " +msgstr "" + +#. ~ PvP = Player versus Player +#: src/client/game.cpp +msgid "- PvP: " +msgstr "" + +#: src/client/game.cpp +msgid "- Public: " +msgstr "" + +#: src/client/game.cpp +msgid "- Server Name: " +msgstr "" + +#: src/client/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat hidden" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD hidden" +msgstr "" + +#: src/client/gameui.cpp +#, c-format +msgid "Profiler shown (page %d of %d)" +msgstr "" + +#: src/client/gameui.cpp +msgid "Profiler hidden" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Backspace" +msgstr "" + +#: src/client/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/client/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/client/keycode.cpp +msgid "Return" +msgstr "" + +#: src/client/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Control" +msgstr "" + +#. ~ Key name, common on Windows keyboards +#: src/client/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/client/keycode.cpp +msgid "Caps Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Space" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page up" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page down" +msgstr "" + +#: src/client/keycode.cpp +msgid "End" +msgstr "" + +#: src/client/keycode.cpp +msgid "Home" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Left" +msgstr "" + +#: src/client/keycode.cpp +msgid "Up" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Right" +msgstr "" + +#: src/client/keycode.cpp +msgid "Down" +msgstr "" + +#. ~ Key name +#: src/client/keycode.cpp +msgid "Select" +msgstr "" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" +msgstr "" + +#: src/client/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/client/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/client/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/client/keycode.cpp +msgid "Help" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad ." +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/client/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Escape" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Convert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Nonconvert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Accept" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Mode Change" +msgstr "" + +#: src/client/keycode.cpp +msgid "Apps" +msgstr "" + +#: src/client/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/client/keycode.cpp +msgid "Erase EOF" +msgstr "" + +#: src/client/keycode.cpp +msgid "Play" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Zoom" +msgstr "" + +#: src/client/keycode.cpp +msgid "OEM Clear" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp +#, c-format +msgid "" +"You are about to join this server with the name \"%s\" for the first time.\n" +"If you proceed, a new account using your credentials will be created on this " +"server.\n" +"Please retype your password and click 'Register and Join' to confirm account " +"creation, or click 'Cancel' to abort." +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp +msgid "Register and Join" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "" + +#: src/gui/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "\"Special\" = climb down" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Automatic jumping" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Special" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Prev. item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Next item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Change camera" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle minimap" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle pitchmove" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Mute" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Autoforward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Local command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle HUD" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle chat log" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fog" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Change" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Exit" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Muted" +msgstr "" + +#. ~ Imperative, as in "Enter/type in text". +#. Don't forget the space. +#: src/gui/modalMenu.cpp +msgid "Enter " +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 +msgid "LANG_CODE" +msgstr "sk" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks 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 "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the \"fly\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pitch move mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, makes move directions relative to the player's pitch when flying " +"or swimming." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via the \"special\" key).\n" +"This requires the \"fast\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the \"noclip\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when looking around. Also called look or mouse smoothing.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Special key for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, \"special\" key instead of \"sneak\" key is used for climbing " +"down and\n" +"descending." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If disabled, \"special\" key is used to fly fast if both fly and fast mode " +"are\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right\n" +"mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically jump up single-node obstacles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Safe digging and placing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prevent digging and placing from repeating when holding the mouse buttons.\n" +"Enable this when you dig or place too often by accident." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Continuous forward movement, toggled by autoforward key.\n" +"Press the autoforward key again or the backwards movement to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touch screen threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The length in pixels it takes for touch screen interaction to start." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed virtual joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) Fixes the position of virtual joystick.\n" +"If disabled, virtual joystick will center to first-touch's position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers aux button" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) Use virtual joystick to trigger \"aux\" button.\n" +"If enabled, virtual joystick will also tap \"aux\" button when out of main " +"circle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable joysticks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick ID" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The identifier of the joystick to use" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The type of joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick button repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated events\n" +"when holding down a joystick button combination." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick frustum sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"ingame view frustum around." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"Will also disable autoforward, when active.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Right key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Special key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Command key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type local commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pitch move key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling pitch move mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar next key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the next item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar previous key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the previous item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for muting the game.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inc. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dec. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatic forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling autoforward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View zoom key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key to use view zoom when possible.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 1 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the first hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 2 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the second hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 3 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the third hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 4 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fourth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 5 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fifth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 6 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the sixth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 7 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the seventh hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 8 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the eighth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 9 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the ninth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 10 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the tenth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 11 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 11th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 12 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 12th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 13 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 13th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 14 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 14th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 15 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 15th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 16 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 16th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 17 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 17th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 18 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 18th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 19 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 19th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 20 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 20th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 21 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 21st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 22 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 22nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 23 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 23rd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 24 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 24th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 25 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 25th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 26 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 26th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 27 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 27th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 28 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 28th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 29 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 29th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 30 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 30th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 31 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 31st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 32 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 32nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large chat console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the large chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camera update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-Game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic" +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 "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Method used to highlight selected object." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Digging particles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adds particles when digging a node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use mip mapping to scale 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 "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"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 "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +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 "" +"Shaders allow advanced visual effects and may increase performance on some " +"video\n" +"cards.\n" +"This only works with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shader path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to shader directory. If no path is defined, default location will be " +"used." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filmic tone mapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables Hable's 'Uncharted 2' filmic tone mapping.\n" +"Simulates the tone curve of photographic film and how this approximates the\n" +"appearance of high dynamic range images. Mid-range contrast is slightly\n" +"enhanced, highlights and shadows are gradually compressed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving liquids (like water).\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The maximum height of the surface of waving liquids.\n" +"4.0 = Wave height is two nodes.\n" +"0.0 = Wave doesn't move at all.\n" +"Default is 1.0 (1/2 node).\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wavelength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of liquid waves.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How fast liquid waves will move. Higher = faster.\n" +"If negative, liquid waves will move backwards.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +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 "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pause on lost window focus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Open the pause menu when the window's focus is lost. Does not pause if a " +"formspec is\n" +"open." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View distance in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Near plane" +msgstr "" + +#: src/settings_translation_file.cpp +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" +"Increasing can reduce artifacting on weaker GPUs.\n" +"0.1 = Default, 0.25 = Good value for weaker tablets." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autosave screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save window size automatically when modified." +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 "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VSync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Alters the light curve by applying 'gamma correction' to it.\n" +"Higher values make middle and lower light levels brighter.\n" +"Value '1.0' leaves the light curve unaltered.\n" +"This only has significant effect on daylight and artificial\n" +"light, it has very little effect on natural night light." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve low gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at minimum light level.\n" +"Controls the contrast of the lowest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve high gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at maximum light level.\n" +"Controls the contrast of the highest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Strength of light curve boost.\n" +"The 3 'boost' parameters define a range of the light\n" +"curve that is boosted in brightness." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost center" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Center of light curve boost range.\n" +"Where 0.0 is minimum light level, 1.0 is maximum light level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost spread" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Spread of light curve boost range.\n" +"Controls the width of the range to be boosted.\n" +"Standard deviation of the light curve boost Gaussian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The rendering back-end for Irrlicht.\n" +"A restart is required after changing this.\n" +"Note: On Android, stick with OGLES1 if unsure! App may fail to start " +"otherwise.\n" +"On other platforms, OpenGL is recommended, and it’s the only driver with\n" +"shader support currently." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable view bobbing and amount of view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side.\n" +"- crossview: Cross-eyed 3d\n" +"- pageflip: quadbuffer based 3d.\n" +"Note that the interlaced mode requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selection box lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Recent Chat Messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of recent chat messages to show" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD scale factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the hudbar elements." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Delay between mesh updates on the client in ms. Increasing this will slow\n" +"down the rate of mesh updates, thus reducing jitter on slower clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh 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" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Usable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables animation of inventory items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog start" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fraction of the visible distance at which fog starts to be rendered" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Opaque liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes all liquids opaque" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World-aligned textures mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Textures on a node may be aligned either to the node or to the world.\n" +"The former mode suits better things like machines, furniture, etc., while\n" +"the latter makes stairs and microblocks fit surroundings better.\n" +"However, as this possibility is new, thus may not be used by older servers,\n" +"this option allows enforcing it for certain node types. Note though that\n" +"that is considered EXPERIMENTAL and may not work properly." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World-aligned textures may be scaled to span several nodes. However,\n" +"the server may not send the scale you want, especially if you use\n" +"a specially-designed texture pack; with this option, the client tries\n" +"to determine the scale automatically basing on the texture size.\n" +"See also texture_min_size.\n" +"Warning: This option is EXPERIMENTAL!" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show entity selection boxes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale GUI by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"properly support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name to tooltip." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FreeType fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether FreeType fonts are used, requires FreeType support to be compiled " +"in.\n" +"If disabled, bitmap and XML vectors fonts are used instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font bold by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font italic by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shadow offset (in pixels) of the default font. If 0, then shadow will not be " +"drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the default font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Regular font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the default font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"The fallback font will be used if the font cannot be loaded." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the monospace font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the monospace font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font is used for e.g. the console and profiler screen." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the fallback font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not " +"be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path of the fallback font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font will be used for certain languages or if the default font is " +"unavailable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Font size of the recent chat text and chat prompt in point (pt).\n" +"Value 0 will use the default font size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to save screenshots at. Can be an absolute or relative path.\n" +"The folder will be created if it doesn't already exist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Format of screenshots." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot quality" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Screenshot quality. Only used for JPEG format.\n" +"1 means worst quality; 100 means best quality.\n" +"Use 0 for default quality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "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 "Enable console window" +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 "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables the sound system.\n" +"If disabled, this completely disables all sounds everywhere and the in-game\n" +"sound controls will be non-functional.\n" +"Changing this setting requires a restart." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Volume of all sounds.\n" +"Requires the sound system to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to mute sounds. You can unmute sounds at any time, unless the\n" +"sound system is disabled (enable_sound=false).\n" +"In-game, you can toggle the mute state with the mute key or by using the\n" +"pause menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable Lua modding support on client.\n" +"This support is experimental and API can change." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the\n" +"Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum size of the out chat queue" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum size of the out chat queue.\n" +"0 to disable queueing and -1 to make the queue size unlimited." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable register confirmation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable register confirmation when connecting to server.\n" +"If disabled, new account will be registered automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server / Singleplayer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce to this serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strip color codes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Remove color codes from incoming chat messages\n" +"Use this to stop players from being able to use color in their messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server.\n" +"Ignored if bind_address is set.\n" +"Needs enable_ipv6 to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneous block sends per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks that are simultaneously sent per client.\n" +"The maximum total count is calculated dynamically:\n" +"max_total = ceil((#clients + max_users) * per_client / 4)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay in sending blocks after building" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, 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 "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can be connected simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Creative" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable creative mode for new created maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Privileges that players with basic_privs can grant" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod channels support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +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 "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Format of player chat messages. The following strings are valid " +"placeholders:\n" +"@name, @message, @timestamp (optional)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes).\n" +"\n" +"Setting this larger than active_block_range will also cause the server\n" +"to maintain active objects up to this distance in the direction the\n" +"player is looking. (This can avoid mobs suddenly disappearing from view)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The radius of the volume of blocks around every player that is subject to " +"the\n" +"active block stuff, stated in mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run.\n" +"This is also the minimum range in which active objects (mobs) are " +"maintained.\n" +"This should be configured together with active_object_send_range_blocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples:\n" +"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World start time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time of day when a new world is started, in millihours (0-23999)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message max length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set the maximum character length of a chat message sent by clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message count limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amount of messages a player may send per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message kick threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Kick players who sent more than X messages per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration on ground or when climbing,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal acceleration in air when jumping or falling,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration in fast mode,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking and flying speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking, flying and climbing speed in fast mode, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical climbing speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Initial vertical speed when jumping, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Decrease this to increase liquid resistance to movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum liquid resistance. Controls deceleration when entering liquid at\n" +"high speed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sinking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls sinking speed in liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration of gravity, in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated Lua API calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over\n" +"network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block management interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between active block management cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ABM interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between Active Block Modifier (ABM) execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "NodeTimer interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between NodeTimer execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block send optimize distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"At this distance the server will aggressively optimize which blocks are sent " +"to\n" +"clients.\n" +"Small values potentially improve performance a lot, at the expense of " +"visible\n" +"rendering glitches (some blocks will not be rendered under water and in " +"caves,\n" +"as well as sometimes on land).\n" +"Setting this to a value greater than max_block_send_distance disables this\n" +"optimization.\n" +"Stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server side occlusion culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled the server will perform map block occlusion culling based on\n" +"on the eye position of the player. This can reduce the number of blocks\n" +"sent to the client 50-80%. The client will not longer receive most " +"invisible\n" +"so that the utility of noclip mode is reduced." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side modding restrictions" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Restricts the access of certain client-side functions on servers.\n" +"Combine the byteflags below to restrict client-side features, or set to 0\n" +"for no restrictions:\n" +"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n" +"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n" +"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n" +"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n" +"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n" +"csm_restriction_noderange)\n" +"READ_PLAYERINFO: 32 (disable get_player_names call client-side)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side node lookup range restriction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the CSM restriction for node range is enabled, get_node calls are " +"limited\n" +"to this distance from the player to the node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HTTP mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of mods that are allowed to access HTTP APIs, which\n" +"allow them to upload and download data to/from the internet." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Load the game profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Load the game profiler to collect game profiling data.\n" +"Provides a /profiler command to access the compiled profile.\n" +"Useful for mod developers and server operators." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default report format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The default format in which profiles are being saved,\n" +"when calling `/profiler save [format]` without format." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Report path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The file path relative to your worldpath in which profiles will be saved to." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrumentation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Entity methods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument the methods of entities on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Active Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Loading Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Loading Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chatcommands" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument chatcommands on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Global callbacks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument global callback functions on registration.\n" +"(anything you pass to a minetest.register_*() function)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Builtin" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument builtin.\n" +"This is usually only needed by core/builtin contributors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Have the profiler instrument itself:\n" +"* Instrument an empty function.\n" +"This estimates the overhead, that instrumentation is adding (+1 function " +"call).\n" +"* Instrument the sampler being used to update the statistics." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +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 "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log file size threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the file size of debug.txt exceeds the number of megabytes specified in\n" +"this setting when it is opened, the file is moved to debug.txt.1,\n" +"deleting an older debug.txt.1 if it exists.\n" +"debug.txt is only moved if this setting is positive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable IPv6 support (for both client and server).\n" +"Required for IPv6 connections to work at all." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Changes the main menu UI:\n" +"- Full: Multiple singleplayer worlds, game choice, texture pack chooser, " +"etc.\n" +"- Simple: One singleplayer world, no game or texture pack choosers. May " +"be\n" +"necessary for smaller screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Engine profiling data print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Print the engine's profiling data in regular intervals (in seconds).\n" +"0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this.\n" +"Current mapgens in a highly unstable state:\n" +"- The optional floatlands of v7 (disabled by default)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n" +"Only mapchunks completely within the mapgen limit are generated.\n" +"Value is stored per-world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" +"and junglegrass, in all other mapgens this flag controls all decorations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome API temperature and humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Temperature variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale temperature variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale humidity variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen v5." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls width of tunnels, a smaller value creates wider tunnels.\n" +"Value >= 10.0 completely disables generation of tunnels and avoids the\n" +"intensive noise calculations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of upper limit of large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave proportion flooded" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of cavern upper limit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern taper" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-distance over which caverns expand to full size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines full size of caverns, smaller values create larger caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noises" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of biome filler depth." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Factor noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Variation of terrain vertical scale.\n" +"When noise is < -0.55 terrain is near-flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of average terrain surface." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise that determines number of dungeons per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v6.\n" +"The 'snowbiomes' flag enables the new 5 biome system.\n" +"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" +"the 'jungles' flag is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desert noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Deserts occur when np_biome exceeds this value.\n" +"When the 'snowbiomes' flag is enabled, this is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sandy beaches occur when np_beach exceeds this value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain base noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of lower terrain and seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain higher noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of higher terrain that creates cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Steepness noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height select noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mud noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies depth of biome surface nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas with sandy beaches." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of number of caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines tree areas and tree density." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Apple trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas where trees have apples." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v7.\n" +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain zero level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y of mountain density gradient zero level. Used to shift mountains " +"vertically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y-distance over which floatlands taper from full density to nothing.\n" +"Tapering starts at this distance from the Y limit.\n" +"For a solid floatland layer, this controls the height of hills/mountains.\n" +"Must be less than or equal to half the distance between the Y limits." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\n" +"Value = 1.0 creates a uniform, linear tapering.\n" +"Values > 1.0 create a smooth tapering suitable for the default separated\n" +"floatlands.\n" +"Values < 1.0 (for example 0.25) create a more defined surface level with\n" +"flatter lowlands, suitable for a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "" + +#: src/settings_translation_file.cpp +#, c-format +msgid "" +"Adjusts the density of the floatland layer.\n" +"Increase value to increase density. Can be positive or negative.\n" +"Value = 0.0: 50% of volume is floatland.\n" +"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" +"to be sure) creates a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Surface level of optional water placed on a solid floatland layer.\n" +"Water is disabled by default and will only be placed if this value is set\n" +"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n" +"upper tapering).\n" +"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n" +"When enabling water placement the floatlands must be configured and tested\n" +"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n" +"required value depending on 'mgv7_np_floatland'), to avoid\n" +"server-intensive extreme water flow and to avoid vast flooding of the\n" +"world surface below." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain alternative noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain persistence noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Varies roughness of terrain.\n" +"Defines the 'persistence' value for terrain_base and terrain_alt noises." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain and steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of maximum mountain height (in nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge underwater noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines large-scale river channel structure." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining mountain structure and height.\n" +"Also defines structure of floatland mountain terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining structure of river canyon walls." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining structure of floatlands.\n" +"If altered from the default, the noise 'scale' (0.7 by default) may need\n" +"to be adjusted, as floatland tapering functions best when this noise has\n" +"a value range of approximately -2.0 to 2.0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen Carpathian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the base ground level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the depth of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River valley width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river valley." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness3 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Third of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness4 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fourth of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hills spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of ridged mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of step mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hill size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridged mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of ridged mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of step mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that locates the river valleys and channels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain variation noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Flat.\n" +"Occasional lakes and hills can be added to the flat world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of flat ground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for lakes.\n" +"Controls proportion of world area covered by lakes.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/depth of lake depressions." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for hills.\n" +"Controls proportion of world area covered by hills.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/height of hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines location and terrain of optional hills and lakes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Fractal.\n" +"'terrain' enables the generation of non-fractal terrain:\n" +"ocean, islands and underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fractal type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Selects one of 18 fractal types.\n" +"1 = 4D \"Roundy\" Mandelbrot set.\n" +"2 = 4D \"Roundy\" Julia set.\n" +"3 = 4D \"Squarry\" Mandelbrot set.\n" +"4 = 4D \"Squarry\" Julia set.\n" +"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n" +"6 = 4D \"Mandy Cousin\" Julia set.\n" +"7 = 4D \"Variation\" Mandelbrot set.\n" +"8 = 4D \"Variation\" Julia set.\n" +"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n" +"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n" +"11 = 3D \"Christmas Tree\" Mandelbrot set.\n" +"12 = 3D \"Christmas Tree\" Julia set.\n" +"13 = 3D \"Mandelbulb\" Mandelbrot set.\n" +"14 = 3D \"Mandelbulb\" Julia set.\n" +"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n" +"16 = 3D \"Cosine Mandelbulb\" Julia set.\n" +"17 = 4D \"Mandelbulb\" Mandelbrot set.\n" +"18 = 4D \"Mandelbulb\" Julia set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Iterations of the recursive function.\n" +"Increasing this increases the amount of fine detail, but also\n" +"increases processing load.\n" +"At iterations = 20 this mapgen has a similar load to mapgen V7." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) scale of fractal in nodes.\n" +"Actual fractal size will be 2 to 3 times larger.\n" +"These numbers can be made very large, the fractal does\n" +"not have to fit inside the world.\n" +"Increase these to 'zoom' into the detail of the fractal.\n" +"Default is for a vertically-squashed shape suitable for\n" +"an island, set all 3 numbers equal for the raw shape." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n" +"Can be used to move a desired point to (0, 0) to create a\n" +"suitable spawn point, or to allow 'zooming in' on a desired\n" +"point by increasing 'scale'.\n" +"The default is tuned for a suitable spawn point for Mandelbrot\n" +"sets with default parameters, it may need altering in other\n" +"situations.\n" +"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slice w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"W coordinate of the generated 3D slice of a 4D fractal.\n" +"Determines which 3D slice of the 4D shape is generated.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia x" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"X component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Y component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia z" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Z component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"W component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Seabed noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Valleys.\n" +"'altitude_chill': Reduces heat with altitude.\n" +"'humid_rivers': Increases humidity around rivers.\n" +"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n" +"to become shallower and occasionally dry.\n" +"'altitude_dry': Reduces humidity with altitude." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n" +"enabled. Also the vertical distance over which humidity drops by 10 if\n" +"'altitude_dry' is enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern upper limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How deep to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How wide to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #1" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #2" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The depth of dirt or other biome filler node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base terrain height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Raises terrain to make valleys around the rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley fill" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slope and fill work together to modify the heights." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley profile" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amplifies the valleys." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley slope" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n" +"WARNING!: There is no benefit, and there are several dangers, in\n" +"increasing this value above 5.\n" +"Reducing this value increases cave and dungeon density.\n" +"Altering this value is for special usage, leaving it unchanged is\n" +"recommended." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug information." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of queued blocks to emerge" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use.\n" +"Value 0:\n" +"- Automatic selection. The number of emerge threads will be\n" +"- 'number of processors - 2', with a lower limit of 1.\n" +"Any other value:\n" +"- Specifies the number of emerge threads, with a lower limit of 1.\n" +"WARNING: Increasing the number of emerge threads increases engine mapgen\n" +"speed, but this may harm game performance by interfering with other\n" +"processes, especially in singleplayer and/or when running Lua code in\n" +"'on_generated'. For many users the optimum setting may be '1'." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Online Content Repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The URL for the content repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of flags to hide in the content repository.\n" +"\"nonfree\" can be used to hide packages which do not qualify as 'free " +"software',\n" +"as defined by the Free Software Foundation.\n" +"You can also specify content ratings.\n" +"These flags are independent from Minetest versions,\n" +"so see a full list at https://content.minetest.net/help/content_flags/" +msgstr "" diff -Nru minetest-5.2.0/po/sl/minetest.po minetest-5.3.0/po/sl/minetest.po --- minetest-5.2.0/po/sl/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/sl/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Slovenian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2019-11-29 23:04+0000\n" "Last-Translator: Matej Mlinar \n" "Language-Team: Slovenian 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 "FPS in pause menu" msgstr "" @@ -2926,6 +3147,34 @@ msgstr "Fiksen virtualni joystick" #: 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 "Fly key" msgstr "Tipka za letenje" @@ -2981,6 +3230,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4298,14 +4553,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4369,6 +4616,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4435,7 +4686,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4524,10 +4777,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4595,13 +4844,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4686,6 +4935,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4844,9 +5097,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4924,10 +5174,6 @@ msgstr "Lestvica okluzije paralakse" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4937,7 +5183,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4971,6 +5219,14 @@ 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 "" @@ -5041,6 +5297,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5486,6 +5754,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5508,6 +5783,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5519,15 +5798,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5644,7 +5933,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5797,6 +6086,10 @@ 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 "" @@ -6120,6 +6413,14 @@ 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 "" @@ -6151,18 +6452,27 @@ msgid "cURL timeout" msgstr "" -#~ msgid "Darkness sharpness" -#~ msgstr "Ostrina teme" +#~ msgid "Toggle Cinematic" +#~ msgstr "Preklopi gladek pogled" + +#~ msgid "Select Package File:" +#~ msgstr "Izberi datoteko paketa:" + +#~ msgid "IPv6 support." +#~ msgstr "IPv6 podpora." #, fuzzy #~ msgid "Enable VBO" #~ msgstr "Omogoči VBO" -#~ msgid "IPv6 support." -#~ msgstr "IPv6 podpora." +#~ msgid "Darkness sharpness" +#~ msgstr "Ostrina teme" -#~ msgid "Select Package File:" -#~ msgstr "Izberi datoteko paketa:" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Prenašanje in nameščanje $1, prosimo počakajte..." -#~ msgid "Toggle Cinematic" -#~ msgstr "Preklopi gladek pogled" +#~ msgid "Back" +#~ msgstr "Nazaj" + +#~ msgid "Ok" +#~ msgstr "V redu" diff -Nru minetest-5.2.0/po/sr_Cyrl/minetest.po minetest-5.3.0/po/sr_Cyrl/minetest.po --- minetest-5.2.0/po/sr_Cyrl/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/sr_Cyrl/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Serbian (cyrillic) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-08 20:47+0000\n" +"Last-Translator: sfan5 \n" "Language-Team: Serbian (cyrillic) \n" "Language: sr_Cyrl\n" @@ -13,7 +13,7 @@ "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 3.9-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -24,6 +24,10 @@ msgid "You died" msgstr "Умро/ла си." +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua #, fuzzy msgid "An error occurred in a Lua script:" @@ -39,10 +43,6 @@ msgstr "Главни мени" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Уреду" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Поновно повезивање" @@ -123,6 +123,10 @@ "симболи [a-z0-9_] су дозвољени." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Мод:" @@ -173,18 +177,18 @@ msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Назад" - -#: builtin/mainmenu/dlg_contentstore.lua #, fuzzy msgid "Back to Main Menu" msgstr "Главни мени" #: builtin/mainmenu/dlg_contentstore.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua #, fuzzy -msgid "Downloading and installing $1, please wait..." -msgstr "Преузима се $1, молим вас сачекајте..." +msgid "Downloading..." +msgstr "Учитавање..." #: builtin/mainmenu/dlg_contentstore.lua #, fuzzy @@ -232,16 +236,57 @@ msgid "Update" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +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 +#, fuzzy +msgid "Biome blending" +msgstr "Семе биома" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biomes" +msgstr "Семе биома" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caverns" +msgstr "Семе пећина" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caves" +msgstr "Семе пећина" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Направи" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy +msgid "Decorations" +msgstr "Информације о моду:" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Преузми подигру, као што је minetest_game, са minetest.net" @@ -249,26 +294,148 @@ msgid "Download one from minetest.net" msgstr "Преузми један са minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +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 src/settings_translation_file.cpp msgid "Game" 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 "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 +#, fuzzy +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 #, fuzzy 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 +#, fuzzy +msgid "Rivers" +msgstr "Семе пећина" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Семе" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "Упозорење: Минимални развојни тест је намењен развијачима." #: builtin/mainmenu/dlg_create_world.lua @@ -610,6 +777,10 @@ msgstr "Направи сервер" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Име/Шифра" @@ -940,7 +1111,7 @@ #. When in doubt, test your translation. #: src/client/fontengine.cpp msgid "needs_fallback_font" -msgstr "" +msgstr "no" #: src/client/game.cpp msgid "" @@ -1286,6 +1457,14 @@ 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 #, fuzzy msgid "Sound unmuted" msgstr "Јачина звука" @@ -1318,7 +1497,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "уреду" @@ -1920,6 +2099,10 @@ msgstr "Тродимензионални мод" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "" @@ -1930,6 +2113,14 @@ 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 "" @@ -1989,7 +2180,8 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +#, fuzzy +msgid "Absolute limit of queued blocks to emerge" msgstr "Абсолутни лимит emerge токова." #: src/settings_translation_file.cpp @@ -2040,6 +2232,16 @@ "нпр. за 4k екране." #: 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 "Advanced" msgstr "Напредно" @@ -2053,10 +2255,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "Увек летење и брзина" @@ -2321,10 +2519,20 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "Величина комада" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Кључ за чет" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "Ниво записивања у debug" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" @@ -2608,6 +2816,11 @@ msgstr "Уобичајен формат рапорта" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Уобичајена игра" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2918,6 +3131,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "" @@ -3030,6 +3253,35 @@ 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 +#, fuzzy +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 "Fly key" msgstr "" @@ -3083,6 +3335,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4382,14 +4640,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4453,6 +4703,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Абсолутни лимит emerge токова." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4520,7 +4775,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4614,10 +4871,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4685,13 +4938,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4776,6 +5029,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4934,9 +5191,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5014,10 +5268,6 @@ msgstr "Parallax Occlusion Мапирање" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5027,7 +5277,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -5061,6 +5313,14 @@ 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 "" @@ -5132,6 +5392,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5595,6 +5867,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5617,6 +5896,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5628,15 +5911,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5753,7 +6046,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5907,6 +6200,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Абсолутни лимит emerge токова." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "" @@ -6232,6 +6530,14 @@ 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 "" @@ -6263,13 +6569,15 @@ msgid "cURL timeout" msgstr "" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Подеси осветљење унутар игре. Веће вредности су светлије.\n" -#~ "Ово подешавање је само за клијента, сервер га игнорише." +#~ msgid "Toggle Cinematic" +#~ msgstr "Укључи/Искључи Cinematic мод" + +#, fuzzy +#~ msgid "Select Package File:" +#~ msgstr "Изаберите фајл мода:" + +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "Контролише ширину тунела, мања вредност ствара шире тунеле." #, fuzzy #~ msgid "" @@ -6279,12 +6587,20 @@ #~ "Контролише густину планинског терена на лебдећим острвима.\n" #~ "Као одступање се додаје на вредност 'np_mountain' семена." -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "Контролише ширину тунела, мања вредност ствара шире тунеле." +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Подеси осветљење унутар игре. Веће вредности су светлије.\n" +#~ "Ово подешавање је само за клијента, сервер га игнорише." #, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "Изаберите фајл мода:" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Преузима се $1, молим вас сачекајте..." -#~ msgid "Toggle Cinematic" -#~ msgstr "Укључи/Искључи Cinematic мод" +#~ msgid "Back" +#~ msgstr "Назад" + +#~ msgid "Ok" +#~ msgstr "Уреду" diff -Nru minetest-5.2.0/po/sv/minetest.po minetest-5.3.0/po/sv/minetest.po --- minetest-5.2.0/po/sv/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/sv/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Swedish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-03-31 10:14+0000\n" "Last-Translator: sfan5 \n" "Language-Team: Swedish 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 "FPS in pause menu" msgstr "" @@ -3032,6 +3257,35 @@ 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 +#, fuzzy +msgid "Floatland noise" +msgstr "Grottoljud" + +#: 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 "Fly key" msgstr "" @@ -3085,6 +3339,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4381,14 +4641,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4453,6 +4705,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Absolut gräns av emerge kö" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4520,7 +4777,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4614,10 +4873,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4685,13 +4940,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4776,6 +5031,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4934,9 +5193,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5014,10 +5270,6 @@ msgstr "Parrallax Ocklusion" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5027,7 +5279,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -5061,6 +5315,14 @@ 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 "" @@ -5130,6 +5392,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5592,6 +5866,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5614,6 +5895,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5625,15 +5910,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5751,7 +6046,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5905,6 +6200,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Absolut gräns av emerge kö" + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "" @@ -6230,6 +6530,14 @@ 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 "" @@ -6263,13 +6571,26 @@ msgid "cURL timeout" msgstr "cURL-timeout" +#~ msgid "Toggle Cinematic" +#~ msgstr "Slå av/på Filmisk Kamera" + +#, fuzzy +#~ msgid "Select Package File:" +#~ msgstr "Välj modfil:" + +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Y-nivå till vilket luftöars skuggor når." + #~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." #~ msgstr "" -#~ "Justera gammakodningen för ljustabeller. Högre tal är ljusare.\n" -#~ "Denna inställning påverkar endast klienten och ignoreras av servern." +#~ "Definierar områden för luftöars jämna terräng.\n" +#~ "Jämna luftöar förekommer när oljud > 0." + +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "" +#~ "Kontrollerar bredd av tunnlar, mindre värden skapar bredare tunnlar." #, fuzzy #~ msgid "" @@ -6279,23 +6600,19 @@ #~ "Kontrollerar densiteten av luftöars bergsterräng.\n" #~ "Är en förskjutning adderad till oljudsvärdet för 'np_mountain'." -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Kontrollerar bredd av tunnlar, mindre värden skapar bredare tunnlar." - #~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." #~ msgstr "" -#~ "Definierar områden för luftöars jämna terräng.\n" -#~ "Jämna luftöar förekommer när oljud > 0." +#~ "Justera gammakodningen för ljustabeller. Högre tal är ljusare.\n" +#~ "Denna inställning påverkar endast klienten och ignoreras av servern." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Y-nivå till vilket luftöars skuggor når." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Laddar ner och installerar $1, vänligen vänta..." -#, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "Välj modfil:" +#~ msgid "Back" +#~ msgstr "Tillbaka" -#~ msgid "Toggle Cinematic" -#~ msgstr "Slå av/på Filmisk Kamera" +#~ msgid "Ok" +#~ msgstr "Ok" diff -Nru minetest-5.2.0/po/sw/minetest.po minetest-5.3.0/po/sw/minetest.po --- minetest-5.2.0/po/sw/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/sw/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Swahili (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: Swahili 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 "FPS in pause menu" msgstr "Ramprogrammen katika Menyu ya mapumziko" @@ -3105,6 +3335,39 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "Kiwango cha maji" + +#: 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 +#, fuzzy +msgid "Floatland noise" +msgstr "Kiwango cha maji" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "Kiwango cha maji" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "Umbali wa uhamisho wa mchezaji" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "Kiwango cha maji" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Kuruka ufunguo" @@ -3158,6 +3421,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4818,14 +5087,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Kikomo ya foleni emerge kwenye diski" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Kikomo ya foleni emerge kuzalisha" - -#: 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" @@ -4898,6 +5159,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "Y ya upper kikomo ya kubwa pseudorandom cellars." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Hati ya Menyu kuu" @@ -4984,10 +5250,18 @@ "Bendera kuanzia na 'hapana' hutumiwa kidhahiri Lemaza yao." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" +"Ramani kizazi sifa maalum kwa Mwandishi ramani gorofa.\n" +"Maziwa mara kwa mara na vilima vinaweza kuongezwa kwa ulimwengu gorofa.\n" +"Bendera ambayo haijabainishwa katika Tungo ya bendera ni hayakubadilishwa " +"kutoka chaguo-msingi.\n" +"Bendera kuanzia na 'hapana' hutumiwa kidhahiri Lemaza yao." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5089,10 +5363,6 @@ msgstr "Utatuaji wa Mwandishi ramani" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Bendera ya Mwandishi ramani" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Mwandishi ramani jina" @@ -5159,17 +5429,19 @@ "Namba ya juu ya vitalu kwamba unaweza kwenye foleni kwa ajili ya kupakia." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Namba ya juu ya vitalu kwa kuwa kwenye foleni kwamba ni kutengenezwa.\n" "Seti kwa wazi kwa kiasi sahihi ili uweze kuchaguliwa moja kwa moja." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Namba ya juu ya vitalu kwa kuwa kwenye foleni kwamba ni kupakiwa kutoka " "faili.\n" @@ -5268,6 +5540,10 @@ msgstr "Mbinu inayotumiwa kuonyesha kipengee kilichoteuliwa." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Ramani" @@ -5440,9 +5716,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5523,10 +5796,6 @@ msgstr "Parallax occlusion wadogo" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Parallax occlusion nguvu" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5536,8 +5805,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Njia ya kuokoa viwambo katika." +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 "" @@ -5570,6 +5841,15 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "Kikomo ya foleni emerge kuzalisha" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Fizikia" @@ -5647,6 +5927,18 @@ msgstr "Ubainishaji wa" #: 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -6160,6 +6452,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -6184,6 +6483,11 @@ msgstr "Mwandishi ramani v7 mlima urefu kelele vigezo" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "Nguvu ya parallax." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Nguvu ya normalmaps inayozalishwa." @@ -6195,10 +6499,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Nguvu ya parallax." - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "Itifaki ya kali kukagua" @@ -6207,6 +6507,20 @@ 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 the 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 "SQLite Uvingirizi" @@ -6339,7 +6653,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6516,6 +6830,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "Y ya upper kikomo ya kubwa pseudorandom cellars." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Matumizi wingu 3D kuangalia badala ya gorofa." @@ -6885,6 +7204,14 @@ 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 "" @@ -6916,69 +7243,84 @@ msgid "cURL timeout" msgstr "muda wa kuisha wa cURL" -#, fuzzy -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Rekebisha simbiko gamma kwa majedwali mwanga. Idadi ya chini ni mkali.\n" -#~ "Kipimo hiki ni kwa ajili ya mteja tu na ni kupuuzwa na seva." +#~ msgid "Toggle Cinematic" +#~ msgstr "Togoa Cinematic" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Vidhibiti vya upana wa vichuguu, thamani ndogo huunda vichuguu pana." +#, fuzzy +#~ msgid "Select Package File:" +#~ msgstr "Teua faili ya Moduli:" #, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "Mwandishi ramani ziwa gorofa mwinuko" +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Y ya upper kikomo ya kubwa pseudorandom cellars." -#~ msgid "Enable VBO" -#~ msgstr "Wezesha VBO" +#~ msgid "Waving Water" +#~ msgstr "Waving maji" -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Huwezesha toni filmic ramani" +#~ msgid "Waving water" +#~ msgstr "Waving maji" + +#~ msgid "This font will be used for certain languages." +#~ msgstr "Fonti hii itatumika kwa lugha fulani." #, fuzzy -#~ msgid "Floatland level" -#~ msgstr "Kiwango cha maji" +#~ msgid "Shadow limit" +#~ msgstr "Kikomo cha Mapblock" -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "Fonti kivuli Alfa (opaqueness kati ya 0 na 255)." +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "Njia ya TrueTypeFont au vitone michoro." -#~ msgid "Gamma" -#~ msgstr "Gamma" +#, fuzzy +#~ msgid "Lava depth" +#~ msgstr "Kina ya pango kubwa" #~ msgid "IPv6 support." #~ msgstr "IPv6 msaada." +#~ msgid "Gamma" +#~ msgstr "Gamma" + +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "Fonti kivuli Alfa (opaqueness kati ya 0 na 255)." + +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Huwezesha toni filmic ramani" + +#~ msgid "Enable VBO" +#~ msgstr "Wezesha VBO" + #, fuzzy -#~ msgid "Lava depth" -#~ msgstr "Kina ya pango kubwa" +#~ msgid "Darkness sharpness" +#~ msgstr "Mwandishi ramani ziwa gorofa mwinuko" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "Njia ya TrueTypeFont au vitone michoro." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "" +#~ "Vidhibiti vya upana wa vichuguu, thamani ndogo huunda vichuguu pana." #, fuzzy -#~ msgid "Shadow limit" -#~ msgstr "Kikomo cha Mapblock" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Rekebisha simbiko gamma kwa majedwali mwanga. Idadi ya chini ni mkali.\n" +#~ "Kipimo hiki ni kwa ajili ya mteja tu na ni kupuuzwa na seva." -#~ msgid "This font will be used for certain languages." -#~ msgstr "Fonti hii itatumika kwa lugha fulani." +#~ msgid "Path to save screenshots at." +#~ msgstr "Njia ya kuokoa viwambo katika." -#~ msgid "Waving water" -#~ msgstr "Waving maji" +#~ msgid "Parallax occlusion strength" +#~ msgstr "Parallax occlusion nguvu" -#~ msgid "Waving Water" -#~ msgstr "Waving maji" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Kikomo ya foleni emerge kwenye diski" #, fuzzy -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Y ya upper kikomo ya kubwa pseudorandom cellars." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Inapakua $1, Tafadhali subiri..." -#, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "Teua faili ya Moduli:" +#~ msgid "Back" +#~ msgstr "Nyuma" -#~ msgid "Toggle Cinematic" -#~ msgstr "Togoa Cinematic" +#~ msgid "Ok" +#~ msgstr "Sawa kabisa" diff -Nru minetest-5.2.0/po/th/minetest.po minetest-5.3.0/po/th/minetest.po --- minetest-5.2.0/po/th/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/th/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Thai (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-01-11 18:26+0000\n" -"Last-Translator: rubenwardy \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-07-08 08:41+0000\n" +"Last-Translator: TZTarzan \n" "Language-Team: Thai \n" "Language: th\n" @@ -12,7 +12,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.10.1\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -20,7 +20,11 @@ #: builtin/client/death_formspec.lua src/client/game.cpp msgid "You died" -msgstr "คุณชนม์" +msgstr "คุณตายแล้ว" + +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" #: builtin/fstk/ui.lua #, fuzzy @@ -29,51 +33,49 @@ #: builtin/fstk/ui.lua msgid "An error occurred:" -msgstr "เกิดข้อผิดพลาด:" +msgstr "เกิดข้อผิดพลาดขึ้น:" #: builtin/fstk/ui.lua msgid "Main menu" msgstr "เมนูหลัก" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "ตกลง" - -#: builtin/fstk/ui.lua msgid "Reconnect" -msgstr "เชื่อมต่อ" +msgstr "เชื่อมต่อใหม่" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "เซิร์ฟเวอร์ ร้องขอ เชื่อมต่อ:" +msgstr "เซิร์ฟเวอร์ได้ร้องขอการเชื่อมต่อใหม่:" #: builtin/mainmenu/common.lua src/client/game.cpp msgid "Loading..." -msgstr "โหลด ..." +msgstr "กำลังโหลด..." #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " -msgstr "โพรโทคอลรุ่นไม่ตรงกัน. " +msgstr "เวอร์ชันโปรโทคอลไม่ตรงกัน " #: builtin/mainmenu/common.lua msgid "Server enforces protocol version $1. " -msgstr "เซิร์ฟเวอร์บังคับใช้โพรโทคอลรุ่น $1 " +msgstr "เซิร์ฟเวอร์บังคับใช้โปรโตคอลเวอร์ชัน $1 " #: builtin/mainmenu/common.lua msgid "Server supports protocol versions between $1 and $2. " -msgstr "เซิร์ฟเวอร์ที่สนับสนุนโพรโทคอลการระหว่าง $1 และ $2. " +msgstr "เซิร์ฟเวอร์ที่สนับสนุนเวอร์ชันโพรโทคอลระหว่าง $1 และ $2 " #: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." -msgstr "ลอง reenabling serverlist สาธารณะ และตรวจสอบการเชื่อมต่ออินเทอร์เน็ต." +msgstr "" +"ลองเปิดใช้งานเซิร์ฟเวอร์ลิสต์สาธารณะอีกครั้งและตรวจสอบการเชื่อมต่ออินเทอร์เน็" +"ต" #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." -msgstr "เราสนับสนุนโพรโทคอลรุ่น $1 เท่านั้น." +msgstr "เราสนับสนุนโพรโทคอลเวอร์ชัน $1 เท่านั้น" #: builtin/mainmenu/common.lua msgid "We support protocol versions between version $1 and $2." -msgstr "เราสนับสนุนโพรโทคอลการระหว่างรุ่น $1 และ $2." +msgstr "เราสนับสนุนโพรโทคอลระหว่างเวอร์ชัน $1 และ $2" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_delete_content.lua @@ -87,7 +89,7 @@ #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" -msgstr "อ้างอิง:" +msgstr "ไฟล์อ้างอิง:" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" @@ -95,7 +97,7 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "ปิดการใช้งาน modpack" +msgstr "ปิดใช้งานม็อดแพ็ค" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -103,19 +105,23 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "เปิดใช้งาน 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 "" -"ไม่สามารถเปิดใช้งาน mod (วัยรุ่น) '$1' ประกอบด้วยอักขระที่ไม่ได้รับอนุญาต " -"อนุญาตให้มีอักขระเท่านั้น [a-z0-9_]." +"ไม่สามารถเปิดใช้งานม็อด '$1' ซึ่งประกอบด้วยตัวอักษรที่ไม่ได้รับอนุญาต ตัวอั" +"กษร [a-z0-9_] เท่านั้นที่ได้รับอนุญาต" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" -msgstr "ปรับเปลี่ยน:" +msgstr "ม็อด:" #: builtin/mainmenu/dlg_config_world.lua #, fuzzy @@ -124,7 +130,7 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." -msgstr "ไม่มีคำอธิบายเกี่ยวกับเกมให้." +msgstr "ไม่มีคำอธิบายของเกมที่ให้มา" #: builtin/mainmenu/dlg_config_world.lua #, fuzzy @@ -133,7 +139,7 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "ไม่ modpack มีคำอธิบาย" +msgstr "ไม่มีคำอธิบายของม็อดแพ็คที่ให้มา" #: builtin/mainmenu/dlg_config_world.lua #, fuzzy @@ -142,7 +148,7 @@ #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" -msgstr "เสริม อ้างอิง:" +msgstr "ไฟล์อ้างอิงที่เลือกใช้ได้:" #: builtin/mainmenu/dlg_config_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp @@ -155,23 +161,24 @@ #: builtin/mainmenu/dlg_config_world.lua msgid "enabled" -msgstr "เปิดใช้งาน" +msgstr "เปิดใช้งานแล้ว" #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "แพคเกจทั้งหมด" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "หลัง" +msgid "Back to Main Menu" +msgstr "กลับไปยังเมนูหลัก" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back to Main Menu" -msgstr "กลับไปเมนูหลัก" +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "ดาวน์โหลด และติดตั้ง $1 กรุณารอสักครู่..." +#, fuzzy +msgid "Downloading..." +msgstr "โหลด ..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -180,7 +187,7 @@ #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Games" -msgstr "เกมส์" +msgstr "เกม" #: builtin/mainmenu/dlg_contentstore.lua msgid "Install" @@ -189,11 +196,11 @@ #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" -msgstr "วัยรุ่น" +msgstr "ม็อด" #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "ไม่อาจจะเรียก" +msgstr "ไม่สามารถเรียกแพคเกจได้" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" @@ -206,7 +213,7 @@ #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" -msgstr "แพ็คเนื้อ" +msgstr "เทกซ์เจอร์แพ็ค" #: builtin/mainmenu/dlg_contentstore.lua msgid "Uninstall" @@ -214,36 +221,151 @@ #: builtin/mainmenu/dlg_contentstore.lua msgid "Update" -msgstr "ปรับปรุง" +msgstr "อัปเดต" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" -msgstr "โลกชื่อว่า '$1' อยู่แล้วมีอยู่" +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 +#, fuzzy +msgid "Caves" +msgstr "ความละเอียดของการสุ่ม" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "สร้าง" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "ข้อมูล:" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" -msgstr "ดาวน์โหลดเกม เกม Minetest เช่นจาก minetest.net" +msgstr "ดาวน์โหลดเกม อย่างเช่น ไมน์เทสต์เกม ได้จาก minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" msgstr "ดาวน์โหลดจาก minetest.net" +#: 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 src/settings_translation_file.cpp msgid "Game" 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 +#, fuzzy +msgid "Humid rivers" +msgstr "ไดรเวอร์วิดีโอ" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +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 #, fuzzy msgid "Mapgen" msgstr "Mapgen" +#: 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 "ไม่มีเกมที่เลือก" +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/dlg_settings_advanced.lua @@ -251,7 +373,50 @@ msgstr "เมล็ดพันธุ์" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "คำเตือน: การทดสอบพัฒนาน้อยที่สุดมีความหมายสำหรับนักพัฒนา" #: builtin/mainmenu/dlg_create_world.lua @@ -260,11 +425,11 @@ #: builtin/mainmenu/dlg_create_world.lua msgid "You have no games installed." -msgstr "ไม่มีเกมส์ที่ติดตั้งคุณได้" +msgstr "คุณไม่มีเกมที่ติดตั้ง" #: builtin/mainmenu/dlg_delete_content.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "คุณต้องการลบ '$1' แน่ใจหรือไม่ ?" +msgstr "คุณแน่ใจหรือไม่ที่จะต้องการลบ '$1'" #: builtin/mainmenu/dlg_delete_content.lua #: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua @@ -274,37 +439,39 @@ #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: failed to delete \"$1\"" -msgstr "pkgmgr: ไม่สามารถลบ \"$1\"" +msgstr "pkgmgr: ไม่สามารถลบ \"$1\" ได้" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" -msgstr "pkgmgr: พาธไม่ถูกต้อง \"$1\"" +msgstr "pkgmgr: พาธของ \"$1\" ไม่ถูกต้อง" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" -msgstr "ลบโลก \"$1\"?" +msgstr "ลบโลก \"$1\" หรือไม่" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" -msgstr "รับ" +msgstr "ยอมรับ" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "เปลี่ยนชื่อ 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 "สามารถเปลี่ยนชื่อ modpack ได้ใน modpack.conf" +msgstr "" +"ม็อดแพ็คมีชื่อชื่อที่ถูกตั้งในไฟล์ modpack.conf " +"ซึ่งจะแทนที่ชื่อที่เปลี่ยนตรงนี้" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" -msgstr "(ไม่มีคำอธิบายของการตั้งค่าให้)" +msgstr "(ไม่มีคำอธิบายของการตั้งค่าที่ให้มา)" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "2D Noise" -msgstr "2D เสียง" +msgstr "2D นอยส์" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "< Back to Settings page" @@ -316,7 +483,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Disabled" -msgstr "ปิดการใช้งาน" +msgstr "ปิดการใช้งานแล้ว" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Edit" @@ -324,7 +491,7 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Enabled" -msgstr "เปิดใช้งาน" +msgstr "เปิดใช้งานแล้ว" #: builtin/mainmenu/dlg_settings_advanced.lua #, fuzzy @@ -338,15 +505,15 @@ #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" -msgstr "ตรงข้าม" +msgstr "ค่าชดเชย" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Persistance" -msgstr "มีอยู่" +msgstr "ความมีอยู่" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid integer." -msgstr "โปรดใส่ค่าเป็นตัวเลขในรูปแบบที่ถูกต้อง." +msgstr "โปรดใส่ค่าเป็นตัวเลขในรูปแบบที่ถูกต้อง" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid number." @@ -374,11 +541,11 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must be at least $1." -msgstr "ต้องมีค่าไม่น้อยกว่า $1." +msgstr "ต้องมีค่าอย่างน้อย $1" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must not be larger than $1." -msgstr "ค่าต้องไม่มากกว่า $1." +msgstr "ค่าต้องไม่มากกว่า $1" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X" @@ -564,6 +731,10 @@ msgstr "เซิร์ฟเวอร์" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "ชื่อ/รหัสผ่าน" @@ -1230,6 +1401,14 @@ 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 "เสียงไม่ปิดเสียง" @@ -1261,7 +1440,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "ซูมถูกปิดใช้งานในปัจจุบันโดยเกมหรือตัวดัดแปลง" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "ตกลง" @@ -1875,6 +2054,11 @@ msgstr "โหมด 3D" #: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode parallax strength" +msgstr "Normalmaps แข็งแรง" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "" @@ -1885,6 +2069,14 @@ 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 "" @@ -1945,7 +2137,7 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp @@ -1995,6 +2187,16 @@ "4k." #: 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 "Advanced" msgstr "สูง" @@ -2008,10 +2210,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "บินเสมอ และรวดเร็ว" @@ -2273,10 +2471,20 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "ขนาดตัวอักษร" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "รหัสแชท" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "ปุ่มสลับการแชท" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" @@ -2547,6 +2755,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "เกมเริ่มต้น" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2885,6 +3098,16 @@ "เมื่อตั้งค่าเป็นจำนวนที่สูงกว่า 0" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "FPS ในเมนูหยุดชั่วคราว" @@ -3004,6 +3227,35 @@ 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 +#, fuzzy +msgid "Floatland tapering distance" +msgstr "ระยะถ่ายโอนผู้เล่น" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp #, fuzzy msgid "Fly key" msgstr "ปุ่ม Fly" @@ -3058,6 +3310,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4589,14 +4847,6 @@ msgstr "ส่วนโค้งของแสงตรงกลางเพิ่ม" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4660,6 +4910,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4727,7 +4981,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4815,10 +5071,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4889,13 +5141,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4989,6 +5241,10 @@ msgstr "วิธีการใช้เพื่อเน้นวัตถุที่เลือก" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "แผนที่ขนาดเล็ก" @@ -5154,9 +5410,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5233,10 +5486,6 @@ msgstr "ขนาดการบดเคี้ยวของ Parallax" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "กำลังบดเคี้ยวของ Parallax" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5246,8 +5495,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "พา ธ เพื่อบันทึกภาพหน้าจอที่ ..." +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 "" @@ -5280,6 +5531,14 @@ 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 "" @@ -5354,6 +5613,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5827,6 +6098,13 @@ "ไฟล์ที่ไม่ปรากฏจะถูกดึงข้อมูลตามปกติ." #: 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 #, fuzzy msgid "" "Spread of light curve boost range.\n" @@ -5853,6 +6131,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "ความแข็งแกร่งของพารัลแลกซ์" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "ความแข็งแกร่งของแผนที่ปกติที่สร้างขึ้น" @@ -5864,10 +6147,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "ความแข็งแกร่งของพารัลแลกซ์" - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "การตรวจสอบโปรโตคอลที่เข้มงวด" @@ -5876,6 +6155,20 @@ 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 the 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 "" @@ -5997,7 +6290,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6139,7 +6432,7 @@ #: src/settings_translation_file.cpp msgid "Trusted mods" -msgstr "" +msgstr "ม็อดที่เชื่อถือได้" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6176,6 +6469,10 @@ 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 "ใช้รูปลักษณ์คลาวด์ 3D แทนที่จะเป็นแนวราบ" @@ -6339,11 +6636,11 @@ #: src/settings_translation_file.cpp msgid "Water level" -msgstr "" +msgstr "ระดับน้ำ" #: src/settings_translation_file.cpp msgid "Water surface level of the world." -msgstr "" +msgstr "ระดับผิวน้ำของโลก" #: src/settings_translation_file.cpp msgid "Waving Nodes" @@ -6422,16 +6719,18 @@ "การหมุนอัตโนมัติของพื้นผิว" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Whether FreeType fonts are used, requires FreeType support to be compiled " "in.\n" "If disabled, bitmap and XML vectors fonts are used instead." -msgstr "ไม่ว่าจะใช้ฟอนต์ FreeType ต้องมีการสนับสนุน FreeType เพื่อรวบรวม." +msgstr "" +"ไม่ว่าจะใช้ฟอนต์ FreeType ต้องมีการสนับสนุน FreeType เพื่อรวบรวม\n" +"หากปิดใช้งาน ฟอนต์บิตแมปและเอ็กซ์เอ็มแอลเวกเตอร์จะใช้แทน" #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." -msgstr "ระบุว่าควรสร้างการซิงโครไนซ์ภาพเคลื่อนไหวพื้นผิวของโหนดต่อ Mapblock หรือไม่." +msgstr "" +"ระบุว่าควรสร้างการซิงโครไนซ์ภาพเคลื่อนไหวพื้นผิวของโหนดต่อแม็ปบล็อกหรือไม่" #: src/settings_translation_file.cpp msgid "" @@ -6508,12 +6807,12 @@ "See also texture_min_size.\n" "Warning: This option is EXPERIMENTAL!" msgstr "" -"พื้นผิวที่จัดแนวโลกอาจถูกปรับสัดส่วนเพื่อขยายหลายโหนด อย่างไรก็ตาม\n" +"เทกซ์เจอร์ที่จัดแนวโลกอาจถูกปรับสัดส่วนเพื่อขยายหลายโหนด อย่างไรก็ตาม\n" "เซิร์ฟเวอร์อาจไม่ส่งสเกลที่คุณต้องการโดยเฉพาะถ้าคุณใช้\n" -"แพ็คพื้นผิวที่ออกแบบเป็นพิเศษ ด้วยตัวเลือกนี้ลูกค้าพยายาม\n" -"เพื่อกำหนดขนาดโดยอัตโนมัติตามขนาดพื้นผิว\n" -"ดูเพิ่มเติม texture_min_size\n" -"คำเตือน: ตัวเลือกนี้คือค่าประสบการณ์!" +"เทกซ์เจอร์แพ็คที่ออกแบบเป็นพิเศษ ด้วยตัวเลือกนี้ไคลเอนต์พยายาม\n" +"เพื่อกำหนดขนาดโดยอัตโนมัติตามขนาดเทกซ์เจอร์\n" +"ดูเพิ่มเติมที่ texture_min_size\n" +"คำเตือน: ตัวเลือกนี้เป็นการทดลอง" #: src/settings_translation_file.cpp msgid "World-aligned textures mode" @@ -6538,6 +6837,14 @@ 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 "" @@ -6569,52 +6876,67 @@ msgid "cURL timeout" msgstr "" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "ปรับการเข้ารหัสแกมม่าสำหรับตารางแสง ตัวเลขที่สูงกว่านั้นจะสว่างกว่า\n" -#~ "การตั้งค่านี้มีไว้สำหรับไคลเอ็นต์เท่านั้นและเซิร์ฟเวอร์จะเพิกเฉย" +#~ msgid "Toggle Cinematic" +#~ msgstr "สลับโรงภาพยนตร์" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "กึ่งกลางของเส้นโค้งแสง - กลางเพิ่ม" +#~ msgid "Select Package File:" +#~ msgstr "เลือกแฟ้มแพคเกจ:" -#~ msgid "Darkness sharpness" -#~ msgstr "ความมืดมิด" +#~ msgid "Waving Water" +#~ msgstr "น้ำโบก" -#~ msgid "Enable VBO" -#~ msgstr "ทำให้สามารถ VBO" +#~ msgid "Waving water" +#~ msgstr "โบกน้ำ" -#~ msgid "Enables filmic tone mapping" -#~ msgstr "เปิดใช้งานการจับคู่โทนภาพยนตร์" +#~ msgid "This font will be used for certain languages." +#~ msgstr "แบบอักษรนี้จะใช้สำหรับบางภาษา" -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "ตัวอักษรเงาอัลฟา (ความทึบระหว่าง 0 และ 255)." +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "ความแข็งแรงของแสงโค้งกลาง - เพิ่ม" -#~ msgid "Gamma" -#~ msgstr "แกมมา" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "เส้นทางแบบอักษร." #~ msgid "Lightness sharpness" #~ msgstr "ความคมชัดของแสง" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "เส้นทางแบบอักษร." +#~ msgid "Gamma" +#~ msgstr "แกมมา" -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "ความแข็งแรงของแสงโค้งกลาง - เพิ่ม" +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "ตัวอักษรเงาอัลฟา (ความทึบระหว่าง 0 และ 255)." -#~ msgid "This font will be used for certain languages." -#~ msgstr "แบบอักษรนี้จะใช้สำหรับบางภาษา" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "เปิดใช้งานการจับคู่โทนภาพยนตร์" -#~ msgid "Waving water" -#~ msgstr "โบกน้ำ" +#~ msgid "Enable VBO" +#~ msgstr "ทำให้สามารถ VBO" -#~ msgid "Waving Water" -#~ msgstr "น้ำโบก" +#~ msgid "Darkness sharpness" +#~ msgstr "ความมืดมิด" -#~ msgid "Select Package File:" -#~ msgstr "เลือกแฟ้มแพคเกจ:" +#~ msgid "Center of light curve mid-boost." +#~ msgstr "กึ่งกลางของเส้นโค้งแสง - กลางเพิ่ม" -#~ msgid "Toggle Cinematic" -#~ msgstr "สลับโรงภาพยนตร์" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "ปรับการเข้ารหัสแกมม่าสำหรับตารางแสง ตัวเลขที่สูงกว่านั้นจะสว่างกว่า\n" +#~ "การตั้งค่านี้มีไว้สำหรับไคลเอ็นต์เท่านั้นและเซิร์ฟเวอร์จะเพิกเฉย" + +#~ msgid "Path to save screenshots at." +#~ msgstr "พา ธ เพื่อบันทึกภาพหน้าจอที่ ..." + +#~ msgid "Parallax occlusion strength" +#~ msgstr "กำลังบดเคี้ยวของ Parallax" + +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "ดาวน์โหลด และติดตั้ง $1 กรุณารอสักครู่..." + +#~ msgid "Back" +#~ msgstr "หลัง" + +#~ msgid "Ok" +#~ msgstr "ตกลง" diff -Nru minetest-5.2.0/po/tr/minetest.po minetest-5.3.0/po/tr/minetest.po --- minetest-5.2.0/po/tr/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/tr/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Turkish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-04-04 06:53+0000\n" -"Last-Translator: Oğuz Ersen \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-15 22:41+0000\n" +"Last-Translator: monolifed \n" "Language-Team: Turkish \n" "Language: tr\n" @@ -12,7 +12,7 @@ "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.0-dev\n" +"X-Generator: Weblate 4.1\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,6 +22,10 @@ msgid "You died" msgstr "Öldün" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "Tamam" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua betiğinde bir hata oluştu:" @@ -35,10 +39,6 @@ msgstr "Ana menü" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Tamam" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Bağlan" @@ -70,7 +70,7 @@ #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." -msgstr "Yalnızca $1 protokol sürümü desteklenmektedir." +msgstr "Yalnızca $1 protokol sürümü desteklenmektedir." #: builtin/mainmenu/common.lua msgid "We support protocol versions between version $1 and $2." @@ -115,6 +115,10 @@ "Yalnızca [a-z0-9_] karakterlerine izin verilir." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Daha Çok Mod Bul" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" @@ -160,16 +164,16 @@ msgstr "Tüm paketler" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Geri" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Ana Menüye Dön" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "$1 indiriliyor ve kuruluyor, lütfen bekleyin..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "Minetest cURL'siz derlediğinde ContentDB kullanılamaz" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "İndiriliyor..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -214,15 +218,51 @@ msgid "Update" msgstr "Güncelle" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Görüntüle" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "\"$1\" adlı dünya zaten var" #: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "Ek arazi" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "Yükseklik soğukluğu" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "Yükseklik kuruluğu" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Biyom karıştırma" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Biyomlar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Oyuklar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Mağaralar" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Yarat" #: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Dekorasyonlar" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "minetest.net'den , Minetest Game gibi, bir oyun indirin" @@ -230,26 +270,146 @@ msgid "Download one from minetest.net" msgstr "minetest.net adresinden indirin" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Zindanlar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Düz arazi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Gökyüzünde yüzenkara kütleleri" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Yüzenkaralar (deneysel)" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "Oyun" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Fraktal olmayan arazi üret: Okyanuslar ve yeraltı" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Tepeler" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Nemli nehirler" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Nehirler etrafındaki nemi artırır" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Göller" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "Düşük nem ve yüksek ısı, sığ ve kuru nehirler oluşturur" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" msgstr "Mapgen" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Mapgen bayrakları" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Mapgen'e özgü bayraklar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Dağlar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Çamur akışı" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Tüneller ve mağaralar ağı" + #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" msgstr "Seçilen oyun yok" #: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "Yükseklikle ısıyı azaltır" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "Yükseklik ile nemi azaltır" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Nehirler" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Deniz seviyesi nehirleri" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "Tohum" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." -msgstr "Uyarı : Minimal geliştirici testi geliştiriciler içindir." +msgid "Smooth transition between biomes" +msgstr "Biyomlar arası yumuşak geçiş" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" +"Arazide görülen yapılar (v6 ile oluşturulan ağaçlar ve jangıl çimi üzerinde " +"etkisizdir)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "Arazide görülen yapılar, genellikle ağaçlar ve bitkiler" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Ilıman, Çöl" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Ilıman, Çöl, Jangıl" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Ilıman, Çöl, Jangıl, Tundra, Tayga" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "Arazi yüzey erozyonu" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Ağaçlar ve jangıl çimi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Nehir derinliğini değiştir" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Yerin derinliklerinde çok büyük oyuklar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." +msgstr "Uyarı : Geliştirici testi geliştiriciler içindir." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -561,6 +721,10 @@ msgstr "Sunucu Barındır" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "ContentDB'den oyunlar yükle" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Ad/Şifre" @@ -1216,6 +1380,14 @@ msgstr "Ses kısık" #: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "Ses sistemi devre dışı" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "Bu inşada ses sistemi desteklenmiyor" + +#: src/client/game.cpp msgid "Sound unmuted" msgstr "Ses açık" @@ -1247,7 +1419,7 @@ 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 src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "tamam" @@ -1852,6 +2024,10 @@ msgstr "3D kipi" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "3D kipi paralaks gücü" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "Dev oyukları belirleyen 3D gürültü." @@ -1864,6 +2040,18 @@ "Ayrıca yüzenkara dağ arazi yapısını da belirler." #: 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 "" +"Yüzenkaraların yapısını tanımlayan 3D gürültü.\n" +"Öntanımlıdan değiştirildiğinde, 'scale' (öntanımlı 0.7) gürültüsünün\n" +"ayarlanması gerekebilir. Gürültü yaklaşık -2.0 ve 2.0 aralığındayken\n" +"yüzenkara koniklik fonksiyonları en iyidir." + +#: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." msgstr "Nehir kanyon duvarlarının yapısını belirleyen 3D gürültü." @@ -1926,8 +2114,8 @@ msgstr "ABM aralığı" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" -msgstr "Emerge sıralarının mutlak sınırı" +msgid "Absolute limit of queued blocks to emerge" +msgstr "Emerge için sıralanmış blokların mutlak sınırı" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -1972,10 +2160,25 @@ "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 " +"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 +#, 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 "" +"Yüzenkara katmanının yoğunluğunu ayarlar\n" +"Yoğunluğu artırmak için değeri artırın. Pozitif ve negatif olabilir.\n" +"Değer = 0.0: hacmin %50'si yüzenkaradır\n" +"Değer = 2.0 ('mgv7_np_floatland' de daha yüksek olabilir, emin olmak\n" +"için her zaman test edin) katı yüzenkara katmanı yaratır." + +#: src/settings_translation_file.cpp msgid "Advanced" msgstr "Gelişmiş" @@ -1994,10 +2197,6 @@ "doğal gece ışığı üzerinde çok az etkisi vardır." #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "Yükseklik soğukluğu" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "Daima uçma ve hızlı" @@ -2272,10 +2471,18 @@ "Küçük ekranlar için gerekli olabilir." #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "Sohbet yazı tipi boyutu" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Sohbet tuşu" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "Sohbet günlük düzeyi" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "Sohbet ileti sayısı sınırı" @@ -2565,6 +2772,10 @@ msgstr "Öntanımlı rapor biçimi" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "Öntanımlı yığın boyutu" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2857,7 +3068,8 @@ "Hable'ın 'Uncharted 2' film ton eşlemesini etkinleştirir.\n" "Fotoğrafsal film ton eğrisini simüle eder ve bu\n" "yüksek dinamik aralıklı görüntülerin görünümü yakınlaştırır. Orta-aralık\n" -"kontrast biraz geliştirilir, vurgular ve gölgeler yavaş yavaş sıkıştırılır." +"kontrast biraz geliştirilir, vurgular ve gölgeler kademeli olarak " +"sıkıştırılır." #: src/settings_translation_file.cpp msgid "Enables animation of inventory items." @@ -2928,6 +3140,23 @@ "bloklar arasında görünür boşluklara neden olabilir." #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "" +"Yüzenkara konikliğinin eksponenti. Koniklik davranışını değiştirir.\n" +"Değer = 1.0 düzgün, doğrusal bir koniklik oluşturur.\n" +"Değerler > 1.0, öntanımlı ayrılmış yüzenkaralar için uygun pürüzsüz bir\n" +"koniklik oluşturur.\n" +"Değerler <1.0 (örneğin 0.25) Daha düz aşağı karalarla daha tanımlı bir " +"yüzey\n" +"seviyesi oluşturur: katı bir yüzenkara katmanı için uygundur." + +#: src/settings_translation_file.cpp msgid "FPS in pause menu" msgstr "Duraklat menüsünde FPS" @@ -3047,6 +3276,34 @@ msgstr "Sabit sanal joystick" #: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "Yüzenkara yoğunluğu" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "Yüzenkara maksimum Y" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "Yüzenkara minimum Y" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "Yüzenkara gürültüsü" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "Yüzenkara koniklik eksponenti" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "Yüzenkara koniklik uzaklığı" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "Yüzenkara su seviyesi" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "Uçma tuşu" @@ -3100,11 +3357,20 @@ #: 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 "" +"Son sohbet metninin ve sohbet isteminin nokta(pt) cinsinden yazı tipi boyutu." +"\n" +"0 değer öntanımlı yazı tipi boyutunu kullanır." + +#: src/settings_translation_file.cpp +msgid "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" msgstr "" -"Oyuncu sohbet ileti biçimi. Aşağıdaki dizeler geçerli yer tutuculardır:\n" +"Oyuncu sohbet ileti biçimi. Aşağıdaki dizgiler geçerli yer tutuculardır:\n" "@name, @message, @timestamp (isteğe bağlı)" #: src/settings_translation_file.cpp @@ -3530,8 +3796,8 @@ "If negative, liquid waves will move backwards.\n" "Requires waving liquids to be enabled." msgstr "" -"Sıvı dalgalarının ne kadar hızlı hareket edeceğini\n" -"belirler . Daha yüksek = daha hızlı.\n" +"Sıvı dalgalarının ne kadar hızlı hareket edeceğini belirler . Daha yüksek = " +"daha hızlı.\n" "Negatif ise, sıvı dalgalar geriye hareket edecektir.\n" "Dalgalanan sıvılar etkin kılınmalıdır." @@ -3573,8 +3839,8 @@ "If FPS would go higher than this, limit it by sleeping\n" "to not waste CPU power for no benefit." msgstr "" -"FPS bundan daha fazla yükselecekse, CPU gücünü boşa tüketmemek için, uykuya " -"dalarak sınırla ." +"FPS bundan daha fazla yükselecekse, CPU gücünü boşa\n" +"tüketmemek için, uykuya dalarak sınırla." #: src/settings_translation_file.cpp msgid "" @@ -4723,14 +4989,6 @@ msgstr "Işık eğrisi düşük gradyan" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "Diskte emerge sıralarının sınırı" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -msgstr "Üretilecek emerge sıralarının sınırı" - -#: 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" @@ -4805,6 +5063,10 @@ msgstr "Zindanların alt Y sınırı." #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "Yüzenkaraların alt Y sınırı." + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "Ana menü betiği" @@ -4891,10 +5153,14 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." -msgstr "" -"Mapgen v7'ye özgü harita üretim özellikleri.\n" -"'ridges' nehirleri etkinleştirir." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." +msgstr "" +"Mapgen v7'ye özgü harita oluşturma özellikleri.\n" +"'ridges': Nehirler.\n" +"'floatlands': Atmosferde yüzen kara kütleleri.\n" +"'caverns:' Dev derin yeraltı mağaraları." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -4981,10 +5247,6 @@ msgstr "Mapgen hata ayıklama" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Mapgen bayrakları" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Mapgen adı" @@ -5057,18 +5319,18 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Üretilmesi için sıralanacak maksimum blok sayısı.\n" -"Uygun miktarın kendiliğinden seçilmesi için boş olarak ayarlayın." +"Bu sınır her oyuncu için zorunlu kılınır." #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "Bir dosyadan yüklenmesi için sıraya koyulacak maksimum blok sayısı.\n" -"Uygun miktarın kendiliğinden seçilmesi için boş olarak ayarlayın." +"Bu sınır her oyuncu için zorunlu kılınır." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5164,6 +5426,10 @@ msgstr "Seçili nesneyi vurgulamak için kullanılan yöntem." #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "Sohbete yazılacak en az günlük düzeyi." + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Mini harita" @@ -5334,9 +5600,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5348,10 +5611,6 @@ "'on_generated'. For many users the optimum setting may be '1'." msgstr "" "Kullanılacak emerge iş parçacıklarının sayısı.\n" -"UYARI: Şu anda 'num_emerge_threads' 1'den büyük olduğunda çökmelere\n" -"neden olabilecek birden fazla hata var. Bu uyarı kaldırılıncaya kadar, bu " -"değerin\n" -"öntanımlı '1' olarak ayarlanması şiddetle önerilir.\n" "Değer 0:\n" "- Kendiliğinden seçim. Ortaya çıkan emerge iş parçacıklarının sayısı\n" "- alt limit 1 olmak üzere 'işlemci sayısı - 2' olacaktır.\n" @@ -5404,7 +5663,7 @@ "formspec is\n" "open." msgstr "" -"Pencere odağı kaybolduğunda duraklat menüsünü aç. Bir formspec açıksa " +"Pencere odağı kaybolduğunda duraklat menüsünü aç. Bir formspec açıksa\n" "duraklamaz." #: src/settings_translation_file.cpp @@ -5436,10 +5695,6 @@ msgstr "Paralaks oklüzyon boyutu" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "Paralaks oklüzyon gücü" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5454,8 +5709,12 @@ "kullanılır." #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "Ekran yakalamaların kaydedileceği konum." +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 "" +"Ekran görüntülerini kaydetme konumu. Mutlak veya göreli bir konum olabilir.\n" +"Klasör henüz yoksa oluşturulur." #: src/settings_translation_file.cpp msgid "" @@ -5498,6 +5757,14 @@ msgstr "Pencere odağı kaybolunca duraklat" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "Diskten yüklenen sıralanmış blokların oyuncu başına sınırı" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "Üretilecek sıralanmış blokların, oyuncu başına sınırı" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "Fizik" @@ -5576,6 +5843,22 @@ msgstr "Profilleme" #: src/settings_translation_file.cpp +msgid "Prometheus listener address" +msgstr "Prometheus dinleyici adresi" + +#: 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" +"Prometheus dinleyici adresi.\n" +"Minetest ENABLE_PROMETHEUS seçeneği etkin olarak derlenmişse,\n" +"bu adreste Prometheus için metrik dinleyicisini etkinleştirin.\n" +"Metrikler http://127.0.0.1:30000/metrics adresinden alınabilir" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "Sıvı içeren büyük mağaraların oranı." @@ -5751,9 +6034,8 @@ msgstr "" "Kullanıcı tanımlı bir değerle arayüzü boyutlandır.\n" "Arayüzü boyutlandırırken en-yakın-komşu-kenar-yumuşatma\n" -"filtresi kullan.\n" -"Bu bazı pürüzlü kenarları yumuşatır ve küçültürken pikselleri\n" -"kaynaştırır, görüntüler tam sayı olmayan boyutlarla\n" +"filtresi kullan. Bu bazı pürüzlü kenarları yumuşatır ve küçültürken\n" +"pikselleri kaynaştırır, görüntüler tam sayı olmayan boyutlarla\n" "ölçeklendiğinde bazı kenar piksellerde bulanıklığa neden olur." #: src/settings_translation_file.cpp @@ -6090,6 +6372,16 @@ #: 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 "" +"Nodların, ögelerin ve araçların öntanımlı yığın boyutunu belirtir.\n" +"Modların veya oyunların belirli (veya tüm) ögeler için açıkça bir yığın " +"ayarlayabileceğini unutmayın." + +#: 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." @@ -6115,6 +6407,10 @@ msgstr "Step dağ yayılma gürültüsü" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "3D kipi paralaksın gücü." + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "Üretilen normal eşlemelerin gücü." @@ -6129,10 +6425,6 @@ "bir ışık eğrisi aralığı tanımlar." #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "Paralaks gücü." - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "Katı protokol denetleme" @@ -6141,6 +6433,32 @@ msgstr "Renk kodlarını kaldır" #: 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 the 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 "" +"Katı yüzenkara katmanına yerleştirilmiş isteğe bağlı suyun yüzey seviyesi.\n" +"Su öntanımlı olarak devre dışıdır ve yalnızca bu değer,\n" +"'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (üst koniklik başlangıcı)\n" +"üstünde ayarlandığında yerleştirilir.\n" +"***UYARI, DÜNYA VE SUNUCU PERFORMANSI İÇİN POTANSİYEL TEHLİKE***:\n" +"Su yerleşimi etkinleştirilirken, sunucuyu yoracak aşırı su akışını ve " +"aşağıdaki\n" +"dünya yüzeyine büyük taşkınları önlemek için, yüzenkaralar katı bir katman\n" +"olması için, 'mgv7_floatland_density' 2.0'a (veya 'mgv7_np_floatland' e " +"bağlı\n" +"olarak başka zorunlu değere) ayarlanarak\n" +"yapılandırılmalı ve test edilmelidir." + +#: src/settings_translation_file.cpp msgid "Synchronous SQLite" msgstr "Eşzamanlı SQLite" @@ -6278,14 +6596,14 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" "Her oyuncu çevresinde, etkin blok işlemleri uygulanacak, bloklarının " "hacminin\n" "yarıçapı, harita blokları (16 nod) cinsinden.\n" "Etkin bloklarda neseneler yüklenir ve ABMler çalışır.\n" "Bu ayrıca etkin nesnelerin (moblar) korunacağı minimum uzaklıktır.\n" -"Bu active_object_range ile birlikte ayarlanmalıdır." +"Bu active_object_send_range_blocks ile birlikte ayarlanmalıdır." #: src/settings_translation_file.cpp msgid "" @@ -6363,7 +6681,8 @@ "'altitude_dry' is enabled." msgstr "" "'altitude_chill' etkinse, ısının 20 azalacağı dikey uzaklık.\n" -"Ayrıca, 'altitude_dry' etkinse, nemin 10 azalacağı dikey uzaklık." +"Ayrıca, 'altitude_dry' etkinse, nemin 10 azalacağı dikey\n" +"uzaklık." #: src/settings_translation_file.cpp msgid "Third of 4 2D noises that together define hill/mountain range height." @@ -6478,6 +6797,10 @@ msgstr "Zindanların üst Y sınırı." #: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "Yüzenkaraların üst Y sınırı." + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "Düz yerine 3D bulut görünümünü kullanın." @@ -6499,7 +6822,7 @@ "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" -"Dokuları boyutlandırmak için mip haritalama kullan. Özellikle yüksek\n" +"Dokuları boyutlandırmak için mip haritalama kullan. Özellikle yüksek\n" "çözünürlüklü bir doku paketi kullanırken, performans biraz artabilir.\n" "Gamma doğruluklu küçültme desteklenmez." @@ -6837,6 +7160,7 @@ "Ancak sunucu istediğiniz boyutu göndermeyebilir, özellikle de özel\n" "tasarlanmış bir doku paketi kullanıyorsanız; bu seçenekle, istemci\n" "doku boyutunu temel alarak boyutu kendiliğinden belirlemeye çalışır.\n" +"Ayrıca bakın: texture_min_size\n" "Uyarı: Bu seçenek DENEYSELdir!" #: src/settings_translation_file.cpp @@ -6864,6 +7188,18 @@ msgstr "Oyukların üstünden tam boyuta uzanacağı Y-uzaklığı." #: 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 "" +"Yüzenkaraların tam yoğunluktan hiçliğe konikleştiği Y-uzaklığı.\n" +"Konikleşme Y sınırından bu uzaklıkta başlar.\n" +"Katı bir yüzenkara katmanı için tepelerin/dağların yüksekliğini denetler.\n" +"Y sınırları arasındaki uzaklığın yarısına eşit veya az olmalıdır." + +#: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." msgstr "Ortalama arazi yüzeyinin Y-seviyesi." @@ -6895,138 +7231,144 @@ msgid "cURL timeout" msgstr "cURL zaman aşımı" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "Işık tabloları için gama kodlamayı ayarlayın. Daha yüksek sayılar daha " -#~ "aydınlıktır.\n" -#~ "Bu ayar yalnızca istemci içindir ve sunucu tarafından yok sayılır." +#~ msgid "Toggle Cinematic" +#~ msgstr "Sinematik Aç/Kapa" -#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." -#~ msgstr "" -#~ "Dağ-türü yüzerkaraların orta noktanın üstünde ve altında nasıl " -#~ "konikleştiğini değiştirir." +#~ msgid "Select Package File:" +#~ msgstr "Paket Dosyası Seç:" -#~ msgid "Center of light curve mid-boost." -#~ msgstr "Işık eğrisi orta-artırmanın merkezi." +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "Büyük mağaralardaki lavın üst sınırının Y'si." -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "Dağ-türü yüzenkaraların yoğunluğunu denetler.\n" -#~ "'mgv7_np_mountain' gürültü değerine eklenen bir gürültü kaydırmadır." +#~ msgid "Waving Water" +#~ msgstr "Dalgalanan Su" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "" -#~ "Tünellerin genişliğini denetler, daha küçük bir değer daha geniş tüneller " -#~ "yaratır." +#~ msgid "Whether dungeons occasionally project from the terrain." +#~ msgstr "Zindanların bazen araziden yansıyıp yansımayacağı." -#~ msgid "Darkness sharpness" -#~ msgstr "Karanlık keskinliği" +#~ msgid "Projecting dungeons" +#~ msgstr "İzdüşüm zindanlar" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "Yüzenkara gölgelerinin uzanacağı Y-seviyesi." + +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "Yüzenkara orta noktasının ve göl yüzeyinin Y-seviyesi." + +#~ msgid "Waving water" +#~ msgstr "Dalgalanan su" + +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" -#~ "Yüzenkara düz arazilerin alanlarını belirler.\n" -#~ "Gürültü > 0 iken düz yüzenkaralar oluşur." +#~ "Tepe yüksekliğinin ve göl derinliğinin yüzenkara düz arazide değişimi." #~ msgid "" -#~ "Deprecated, define and locate cave liquids using biome definitions " -#~ "instead.\n" -#~ "Y of upper limit of lava in large caves." +#~ "Typical maximum height, above and below midpoint, of floatland mountains." #~ msgstr "" -#~ "Kullanılmıyor, bunun yerine biyom tanımlarını kullanarak mağara " -#~ "sıvılarını tanımlayın ve bulun.\n" -#~ "Büyük mağaralarda lav üst sınırının Y'si." +#~ "Yüzenkara dağların, orta noktanın altındaki ve üstündeki, tipik maksimum " +#~ "yüksekliği." -#~ msgid "Enable VBO" -#~ msgstr "VBO'yu etkinleştir" +#~ msgid "This font will be used for certain languages." +#~ msgstr "Belirli diller için bu yazı tipi kullanılacak." -#~ msgid "Enables filmic tone mapping" -#~ msgstr "Filmsel ton eşlemeyi etkinleştirir" +#~ msgid "Strength of light curve mid-boost." +#~ msgstr "Işık eğrisi orta-artırmanın kuvveti." -#~ msgid "Floatland base height noise" -#~ msgstr "Yüzenkara taban yükseklik gürültüsü" +#~ msgid "Shadow limit" +#~ msgstr "Gölge sınırı" -#~ msgid "Floatland base noise" -#~ msgstr "Yüzenkara taban gürültüsü" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "TrueTypeFont veya bitmap konumu." -#~ msgid "Floatland level" -#~ msgstr "Yüzenkara seviyesi" +#~ msgid "Lightness sharpness" +#~ msgstr "Aydınlık keskinliği" -#~ msgid "Floatland mountain density" -#~ msgstr "Yüzenkara dağ yoğunluğu" +#~ msgid "Lava depth" +#~ msgstr "Lav derinliği" -#~ msgid "Floatland mountain exponent" -#~ msgstr "Yüzenkara dağ eksponenti" +#~ msgid "IPv6 support." +#~ msgstr "IPv6 desteği." -#~ msgid "Floatland mountain height" -#~ msgstr "Yüzenkara dağ yüksekliği" +#~ msgid "Gamma" +#~ msgstr "Gama" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "Yazı tipi gölge saydamlığı (solukluk, 0 ve 255 arası)." -#~ msgid "Gamma" -#~ msgstr "Gama" - -#~ msgid "IPv6 support." -#~ msgstr "IPv6 desteği." +#~ msgid "Floatland mountain height" +#~ msgstr "Yüzenkara dağ yüksekliği" -#~ msgid "Lava depth" -#~ msgstr "Lav derinliği" +#~ msgid "Floatland base height noise" +#~ msgstr "Yüzenkara taban yükseklik gürültüsü" -#~ msgid "Lightness sharpness" -#~ msgstr "Aydınlık keskinliği" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "Filmsel ton eşlemeyi etkinleştirir" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "TrueTypeFont veya bitmap konumu." +#~ msgid "Enable VBO" +#~ msgstr "VBO'yu etkinleştir" -#~ msgid "Shadow limit" -#~ msgstr "Gölge sınırı" +#~ msgid "" +#~ "Deprecated, define and locate cave liquids using biome definitions " +#~ "instead.\n" +#~ "Y of upper limit of lava in large caves." +#~ msgstr "" +#~ "Kullanılmıyor, bunun yerine biyom tanımlarını kullanarak mağara " +#~ "sıvılarını tanımlayın ve bulun.\n" +#~ "Büyük mağaralarda lav üst sınırının Y'si." -#~ msgid "Strength of light curve mid-boost." -#~ msgstr "Işık eğrisi orta-artırmanın kuvveti." +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "Yüzenkara düz arazilerin alanlarını belirler.\n" +#~ "Gürültü > 0 iken düz yüzenkaralar oluşur." -#~ msgid "This font will be used for certain languages." -#~ msgstr "Belirli diller için bu yazı tipi kullanılacak." +#~ msgid "Darkness sharpness" +#~ msgstr "Karanlık keskinliği" -#~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "" -#~ "Yüzenkara dağların, orta noktanın altındaki ve üstündeki, tipik maksimum " -#~ "yüksekliği." +#~ "Tünellerin genişliğini denetler, daha küçük bir değer daha geniş tüneller " +#~ "yaratır." -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." #~ msgstr "" -#~ "Tepe yüksekliğinin ve göl derinliğinin yüzenkara düz arazide değişimi." +#~ "Dağ-türü yüzenkaraların yoğunluğunu denetler.\n" +#~ "'mgv7_np_mountain' gürültü değerine eklenen bir gürültü kaydırmadır." -#~ msgid "Waving water" -#~ msgstr "Dalgalanan su" +#~ msgid "Center of light curve mid-boost." +#~ msgstr "Işık eğrisi orta-artırmanın merkezi." -#~ msgid "Y-level of floatland midpoint and lake surface." -#~ msgstr "Yüzenkara orta noktasının ve göl yüzeyinin Y-seviyesi." +#~ msgid "Alters how mountain-type floatlands taper above and below midpoint." +#~ msgstr "" +#~ "Dağ-türü yüzerkaraların orta noktanın üstünde ve altında nasıl " +#~ "konikleştiğini değiştirir." -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "Yüzenkara gölgelerinin uzanacağı Y-seviyesi." +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "Işık tabloları için gama kodlamayı ayarlayın. Daha yüksek sayılar daha " +#~ "aydınlıktır.\n" +#~ "Bu ayar yalnızca istemci içindir ve sunucu tarafından yok sayılır." -#~ msgid "Projecting dungeons" -#~ msgstr "İzdüşüm zindanlar" +#~ msgid "Path to save screenshots at." +#~ msgstr "Ekran yakalamaların kaydedileceği konum." -#~ msgid "Whether dungeons occasionally project from the terrain." -#~ msgstr "Zindanların bazen araziden yansıyıp yansımayacağı." +#~ msgid "Parallax occlusion strength" +#~ msgstr "Paralaks oklüzyon gücü" -#~ msgid "Waving Water" -#~ msgstr "Dalgalanan Su" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "Diskte emerge sıralarının sınırı" -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "Büyük mağaralardaki lavın üst sınırının Y'si." +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "$1 indiriliyor ve kuruluyor, lütfen bekleyin..." -#~ msgid "Select Package File:" -#~ msgstr "Paket Dosyası Seç:" +#~ msgid "Back" +#~ msgstr "Geri" -#~ msgid "Toggle Cinematic" -#~ msgstr "Sinematik Aç/Kapa" +#~ msgid "Ok" +#~ msgstr "Tamam" diff -Nru minetest-5.2.0/po/uk/minetest.po minetest-5.3.0/po/uk/minetest.po --- minetest-5.2.0/po/uk/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/uk/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Ukrainian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-03-31 10:14+0000\n" -"Last-Translator: sfan5 \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-26 10:41+0000\n" +"Last-Translator: Maksim Gamarnik \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -13,7 +13,7 @@ "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 4.0-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -23,6 +23,10 @@ msgid "You died" msgstr "Ви загинули" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "ОК" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Трапилася помилка у Lua скрипті:" @@ -36,10 +40,6 @@ msgstr "Головне меню" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Добре" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Повторне підключення" @@ -116,6 +116,10 @@ "символи. Дозволяється використання таких символів: [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Знайти Більше Модів" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Мод:" @@ -161,16 +165,16 @@ msgstr "Всі пакунки" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "Назад" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Назад в Головне Меню" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "Завантаження і встановлення $1, зачекайте..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB не є доступним коли Minetest не містить підтримку cURL" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "Завантаження..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -215,15 +219,52 @@ msgid "Update" msgstr "Оновити" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +msgstr "Вид" + #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" -msgstr "Світ з такою назвою \"$1\" вже існує" +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 +#, fuzzy +msgid "Decorations" +msgstr "Інформація" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Завантажте гру, наприклад, Minetest Game з minetest.net" @@ -231,25 +272,145 @@ msgid "Download one from minetest.net" msgstr "Завантажте з minetest.net" +#: 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 src/settings_translation_file.cpp msgid "Game" 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 "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/dlg_settings_advanced.lua msgid "Seed" msgstr "Зерно" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 +#, fuzzy +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 +#, fuzzy +msgid "Warning: The Development Test is meant for developers." msgstr "Увага: мінімальна тестова версія призначена для розробників." #: builtin/mainmenu/dlg_create_world.lua @@ -384,23 +545,23 @@ #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X spread" -msgstr "" +msgstr "Розкидання по X" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y" -msgstr "" +msgstr "Y" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y spread" -msgstr "" +msgstr "Розкидання по Y" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z" -msgstr "" +msgstr "Z" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z spread" -msgstr "" +msgstr "Розкидання по Z" #. ~ "absvalue" is a noise parameter flag. #. It is short for "absolute value". @@ -423,7 +584,7 @@ #. main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "eased" -msgstr "" +msgstr "полегшений" #: builtin/mainmenu/pkgmgr.lua msgid "$1 (Enabled)" @@ -564,6 +725,10 @@ msgstr "Сервер" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "Ім'я/Пароль" @@ -1219,6 +1384,14 @@ 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 "Звук увімкнено" @@ -1250,7 +1423,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "Наближення (бінокль) вимкнено грою або модифікацією" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "гаразд" @@ -1445,16 +1618,17 @@ msgstr "Num 9" #: src/client/keycode.cpp +#, fuzzy msgid "OEM Clear" -msgstr "OEM Clear" +msgstr "Почистити OEM" #: src/client/keycode.cpp msgid "Page down" -msgstr "" +msgstr "Сторінка вниз" #: src/client/keycode.cpp msgid "Page up" -msgstr "" +msgstr "Сторінка вгору" #: src/client/keycode.cpp msgid "Pause" @@ -1844,6 +2018,10 @@ msgstr "3D режим" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "" @@ -1854,6 +2032,14 @@ 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 "" @@ -1902,7 +2088,7 @@ msgstr "Інтервал ABM" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp @@ -1947,6 +2133,16 @@ 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 "Advanced" msgstr "Додатково" @@ -1960,10 +2156,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "" @@ -2215,10 +2407,20 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "Розмір шрифту" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "Чат" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "Чат" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" @@ -2487,6 +2689,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "Стандартна гра" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2795,6 +3002,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "" @@ -2905,6 +3122,34 @@ 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 "Fly key" msgstr "Кнопка для польоту" @@ -2958,6 +3203,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4254,14 +4505,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4325,6 +4568,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4391,7 +4638,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4476,44 +4725,46 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "Mapgen debug" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" +msgstr "Налагодження генерації світу" #: src/settings_translation_file.cpp +#, fuzzy msgid "Mapgen name" -msgstr "" +msgstr "Назва генерації світу" #: src/settings_translation_file.cpp msgid "Max block generate distance" -msgstr "" +msgstr "Максимальна відстань генерації блоків" #: src/settings_translation_file.cpp msgid "Max block send distance" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "Max liquids processed per step." -msgstr "" +msgstr "Максимальна кількість рідин, оброблених на крок." #: src/settings_translation_file.cpp msgid "Max. clearobjects extra blocks" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "Max. packets per iteration" -msgstr "" +msgstr "Максимальна кількість пакетів за одну ітерацію" #: src/settings_translation_file.cpp +#, fuzzy msgid "Maximum FPS" -msgstr "" +msgstr "Максимальна кількість кадрів в секунду (FPS)" #: src/settings_translation_file.cpp +#, fuzzy msgid "Maximum FPS when game is paused." -msgstr "" +msgstr "Максимум FPS при паузі." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -4551,13 +4802,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4642,6 +4893,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "Мінімапа" @@ -4800,9 +5055,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4879,10 +5131,6 @@ msgstr "Ступінь паралаксової оклюзії" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4892,7 +5140,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4926,6 +5176,14 @@ 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 "Фізика" @@ -4995,6 +5253,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5437,6 +5707,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5459,6 +5736,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5470,15 +5751,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5595,7 +5886,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5737,7 +6028,7 @@ #: src/settings_translation_file.cpp msgid "Unlimited player transfer distance" -msgstr "" +msgstr "Необмежена відстань передачі гравця" #: src/settings_translation_file.cpp msgid "Unload unused server data" @@ -5745,6 +6036,10 @@ #: 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 @@ -6071,6 +6366,14 @@ 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 "" @@ -6084,11 +6387,11 @@ #: src/settings_translation_file.cpp msgid "Y-level of lower terrain and seabed." -msgstr "" +msgstr "Y-Рівень нижнього рельєфу та морського дна." #: src/settings_translation_file.cpp msgid "Y-level of seabed." -msgstr "" +msgstr "Y-Рівень морського дна." #: src/settings_translation_file.cpp msgid "cURL file download timeout" @@ -6102,20 +6405,29 @@ msgid "cURL timeout" msgstr "" -#~ msgid "Enable VBO" -#~ msgstr "Увімкнути VBO" +#~ msgid "Toggle Cinematic" +#~ msgstr "Кінематографічний режим" -#~ msgid "IPv6 support." -#~ msgstr "Підтримка IPv6." +#~ msgid "Content Store" +#~ msgstr "Додатки" + +#~ msgid "Select Package File:" +#~ msgstr "Виберіть файл пакунку:" #~ msgid "Lava depth" #~ msgstr "Глибина лави" -#~ msgid "Select Package File:" -#~ msgstr "Виберіть файл пакунку:" +#~ msgid "IPv6 support." +#~ msgstr "Підтримка IPv6." -#~ msgid "Content Store" -#~ msgstr "Додатки" +#~ msgid "Enable VBO" +#~ msgstr "Увімкнути VBO" -#~ msgid "Toggle Cinematic" -#~ msgstr "Кінематографічний режим" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "Завантаження і встановлення $1, зачекайте..." + +#~ msgid "Back" +#~ msgstr "Назад" + +#~ msgid "Ok" +#~ msgstr "Добре" diff -Nru minetest-5.2.0/po/vi/minetest.po minetest-5.3.0/po/vi/minetest.po --- minetest-5.2.0/po/vi/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/vi/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Vietnamese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-01-11 18:26+0000\n" -"Last-Translator: rubenwardy \n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-13 21:08+0000\n" +"Last-Translator: darkcloudcat \n" "Language-Team: Vietnamese \n" "Language: vi\n" @@ -12,7 +12,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.10.1\n" +"X-Generator: Weblate 4.1-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,10 +22,13 @@ msgid "You died" msgstr "Bạn đã chết" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred in a Lua script:" -msgstr "Đã xảy ra lỗi trong tập lệnh Lua, chẳng hạn như mod:" +msgstr "Đã xảy ra lỗi trong tập lệnh Lua:" #: builtin/fstk/ui.lua msgid "An error occurred:" @@ -33,11 +36,7 @@ #: builtin/fstk/ui.lua msgid "Main menu" -msgstr "Thực đơn chính" - -#: builtin/fstk/ui.lua -msgid "Ok" -msgstr "Được" +msgstr "Trình đơn chính" #: builtin/fstk/ui.lua msgid "Reconnect" @@ -49,7 +48,7 @@ #: builtin/mainmenu/common.lua src/client/game.cpp msgid "Loading..." -msgstr "Tải..." +msgstr "Đang tải..." #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " @@ -116,6 +115,10 @@ "các ký tự [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" @@ -164,16 +167,17 @@ msgstr "Tất cả các gói" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" +msgid "Back to Main Menu" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back to Main Menu" +msgid "ContentDB is not available when Minetest was compiled without cURL" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "" +#, fuzzy +msgid "Downloading..." +msgstr "Đang tải..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -218,15 +222,51 @@ msgid "Update" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +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 "Download a game, such as Minetest Game, from minetest.net" msgstr "" @@ -234,25 +274,143 @@ msgid "Download one from minetest.net" 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 src/settings_translation_file.cpp msgid "Game" 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 "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/dlg_settings_advanced.lua msgid "Seed" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." +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 "Warning: The Development Test is meant for developers." msgstr "" #: builtin/mainmenu/dlg_create_world.lua @@ -563,6 +721,10 @@ msgstr "" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "" @@ -1190,6 +1352,14 @@ 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 "" @@ -1221,7 +1391,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "" @@ -1799,6 +1969,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "" @@ -1809,6 +1983,14 @@ 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 "" @@ -1857,7 +2039,7 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp @@ -1902,6 +2084,16 @@ 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 "Advanced" msgstr "" @@ -1915,10 +2107,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "" @@ -2168,10 +2356,18 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "" #: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" @@ -2437,6 +2633,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2745,6 +2945,16 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "" @@ -2854,6 +3064,34 @@ 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 "Fly key" msgstr "" @@ -2907,6 +3145,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4202,14 +4446,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4273,6 +4509,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "" @@ -4339,7 +4579,9 @@ #: src/settings_translation_file.cpp msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" #: src/settings_translation_file.cpp @@ -4427,10 +4669,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "" @@ -4498,13 +4736,13 @@ #: src/settings_translation_file.cpp msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"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" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" #: src/settings_translation_file.cpp @@ -4589,6 +4827,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "" @@ -4747,9 +4989,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -4826,10 +5065,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -4839,7 +5074,9 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." +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 @@ -4873,6 +5110,14 @@ 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 "" @@ -4941,6 +5186,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5379,6 +5636,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5401,6 +5665,10 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "" @@ -5412,15 +5680,25 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." +msgid "Strict protocol checking" msgstr "" #: src/settings_translation_file.cpp -msgid "Strict protocol checking" +msgid "Strip color codes" msgstr "" #: src/settings_translation_file.cpp -msgid "Strip color codes" +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 the 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 @@ -5537,7 +5815,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -5690,6 +5968,10 @@ 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 "" @@ -6009,6 +6291,14 @@ 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 "" @@ -6039,3 +6329,6 @@ #: src/settings_translation_file.cpp msgid "cURL timeout" msgstr "" + +#~ msgid "Ok" +#~ msgstr "Được" diff -Nru minetest-5.2.0/po/zh_CN/minetest.po minetest-5.3.0/po/zh_CN/minetest.po --- minetest-5.2.0/po/zh_CN/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/zh_CN/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,9 +2,9 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" -"PO-Revision-Date: 2020-03-08 15:32+0000\n" -"Last-Translator: wzy2006 <3450354617@qq.com>\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" +"PO-Revision-Date: 2020-06-13 21:08+0000\n" +"Last-Translator: ferrumcccp \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -12,7 +12,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -22,6 +22,10 @@ msgid "You died" msgstr "您已死亡" +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua 脚本发生错误:" @@ -35,10 +39,6 @@ msgstr "主菜单" #: builtin/fstk/ui.lua -msgid "Ok" -msgstr "确定" - -#: builtin/fstk/ui.lua msgid "Reconnect" msgstr "重新连接" @@ -111,6 +111,10 @@ msgstr "无法启用 mod \"$1\":因为包含有不支持的字符。只允许 [a-z0-9_] 字符。" #: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" @@ -156,16 +160,17 @@ msgstr "所有包" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back" -msgstr "后退" - -#: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "返回主菜单" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Downloading and installing $1, please wait..." -msgstr "正在下载和安装 $1,请稍等..." +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Downloading..." +msgstr "载入中..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -210,15 +215,57 @@ msgid "Update" msgstr "更新" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View" +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 +#, fuzzy +msgid "Altitude dry" +msgstr "高地寒冷" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biome blending" +msgstr "生物群系噪声" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Biomes" +msgstr "生物群系噪声" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caverns" +msgstr "大型洞穴噪声" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Caves" +msgstr "八音" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "创建" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Decorations" +msgstr "迭代" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "从 minetest.net 下载一个子游戏,例如 minetest_game" @@ -226,26 +273,153 @@ msgid "Download one from minetest.net" msgstr "从 minetest.net 下载一个" +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +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 +#, fuzzy +msgid "Floatlands (experimental)" +msgstr "水级别" + #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" 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 +#, fuzzy +msgid "Humid rivers" +msgstr "视频驱动程序" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +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 +#, fuzzy +msgid "Mapgen-specific flags" +msgstr "地图生成器 v5 标签" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +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 +#, fuzzy +msgid "Rivers" +msgstr "河流大小" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Seed" msgstr "种子" #: builtin/mainmenu/dlg_create_world.lua -msgid "Warning: The minimal development test is meant for developers." -msgstr "警告: 最小化开发测试为开发者提供。" +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 +#, fuzzy +msgid "Terrain surface erosion" +msgstr "地形高度" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +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 +#, fuzzy +msgid "Warning: The Development Test is meant for developers." +msgstr "警告: 最小化开发测试是为开发者提供的。" #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -429,7 +603,7 @@ #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" -msgstr "安装 $1 到 $2 失败" +msgstr "无法把$1安装到$2" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" @@ -556,6 +730,10 @@ msgstr "建立服务器" #: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua msgid "Name/Password" msgstr "用户名/密码" @@ -774,7 +952,7 @@ #: builtin/mainmenu/tab_settings.lua msgid "Touchthreshold: (px)" -msgstr "触控阈值(px)" +msgstr "触控阈值:(px)" #: builtin/mainmenu/tab_settings.lua msgid "Trilinear Filter" @@ -1008,7 +1186,7 @@ #: src/client/game.cpp msgid "Debug info shown" -msgstr "调试信息切换键" +msgstr "调试信息已显示" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" @@ -1176,11 +1354,11 @@ #: src/client/game.cpp msgid "Pitch move mode disabled" -msgstr "仰角移动模式已禁用" +msgstr "俯仰移动模式已禁用" #: src/client/game.cpp msgid "Pitch move mode enabled" -msgstr "仰角移动模式已禁用" +msgstr "俯仰移动模式已禁用" #: src/client/game.cpp msgid "Profiler graph shown" @@ -1211,6 +1389,14 @@ 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 "已取消静音" @@ -1242,7 +1428,7 @@ msgid "Zoom currently disabled by game or mod" msgstr "缩放被当前子游戏或 mod 禁用" -#: src/client/game.cpp src/gui/modalMenu.cpp +#: src/client/game.cpp msgid "ok" msgstr "确定" @@ -1600,7 +1786,7 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" -msgstr "连按两次“跳”切换飞行模式" +msgstr "连按两次“跳”启用/禁用飞行模式" #: src/gui/guiKeyChangeMenu.cpp msgid "Drop" @@ -1668,35 +1854,35 @@ #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle HUD" -msgstr "开关HUD" +msgstr "启用/禁用HUD" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle chat log" -msgstr "开关聊天记录" +msgstr "启用/禁用聊天记录" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fast" -msgstr "开关快速移动模式" +msgstr "启用/禁用快速移动模式" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fly" -msgstr "开关飞行模式" +msgstr "启用/禁用飞行模式" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fog" -msgstr "开关雾" +msgstr "启用/禁用雾" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle minimap" -msgstr "开关小地图" +msgstr "启用/禁用小地图" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle noclip" -msgstr "开关穿墙模式" +msgstr "启用/禁用穿墙模式" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle pitchmove" -msgstr "开关仰角移动模式" +msgstr "启用/禁用仰角移动模式" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" @@ -1812,7 +1998,7 @@ #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of rolling hills." -msgstr "控制丘陵形状/大小的2D噪声。" +msgstr "控制波状丘陵形状/大小的2D噪声。" #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of step mountains." @@ -1824,7 +2010,7 @@ #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of rolling hills." -msgstr "控制丘陵的大小/频率的2D噪声。" +msgstr "控制波状丘陵的大小/频率的2D噪声。" #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of step mountain ranges." @@ -1843,6 +2029,11 @@ msgstr "3D 模式" #: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode parallax strength" +msgstr "法线贴图强度" + +#: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." msgstr "定义巨型洞穴的3D噪声。" @@ -1855,6 +2046,14 @@ "也定义悬空岛山丘地形。" #: 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 "定义河谷壁的结构的3D噪声。" @@ -1915,7 +2114,8 @@ msgstr "ABM间隔" #: src/settings_translation_file.cpp -msgid "Absolute limit of emerge queues" +#, fuzzy +msgid "Absolute limit of queued blocks to emerge" msgstr "生产队列绝对限制" #: src/settings_translation_file.cpp @@ -1963,6 +2163,16 @@ msgstr "为支持4K等屏幕,调节像素点密度(非 X11/Android 环境才有效)。" #: 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 "Advanced" msgstr "高级" @@ -1981,10 +2191,6 @@ "在夜晚的自然光照下作用很小。" #: src/settings_translation_file.cpp -msgid "Altitude chill" -msgstr "高地寒冷" - -#: src/settings_translation_file.cpp msgid "Always fly and fast" msgstr "保持高速飞行" @@ -2022,7 +2228,7 @@ #: src/settings_translation_file.cpp msgid "Apple trees noise" -msgstr "苹果树噪音" +msgstr "苹果树噪声" #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -2105,11 +2311,11 @@ #: src/settings_translation_file.cpp msgid "Beach noise" -msgstr "海滩噪音" +msgstr "海滩噪声" #: src/settings_translation_file.cpp msgid "Beach noise threshold" -msgstr "海滩噪音阈值" +msgstr "海滩噪声阈值" #: src/settings_translation_file.cpp msgid "Bilinear filtering" @@ -2121,11 +2327,11 @@ #: src/settings_translation_file.cpp msgid "Biome API temperature and humidity noise parameters" -msgstr "群落 API 温度和湿度噪声参数" +msgstr "生物群系 API 温度和湿度噪声参数" #: src/settings_translation_file.cpp msgid "Biome noise" -msgstr "生态噪声" +msgstr "生物群系噪声" #: src/settings_translation_file.cpp msgid "Bits per pixel (aka color depth) in fullscreen mode." @@ -2164,14 +2370,13 @@ msgstr "凹凸贴图" #: src/settings_translation_file.cpp -#, fuzzy 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" "Increasing can reduce artifacting on weaker GPUs.\n" "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" -"相机在节点附近的“剪切平面附近”距离,介于0到0.5之间。\n" +"相机在节点附近的“剪切平面附近”距离,介于0到0.25之间。\n" "大多数用户不需要更改此设置。\n" "增加可以减少较弱GPU上的伪影。\n" "0.1 =默认值,0.25 =对于较弱的平板电脑来说是不错的值。" @@ -2186,19 +2391,19 @@ #: src/settings_translation_file.cpp msgid "Camera update toggle key" -msgstr "镜头更新开关键" +msgstr "镜头更新启用/禁用键" #: src/settings_translation_file.cpp msgid "Cave noise" -msgstr "洞穴噪音" +msgstr "洞穴噪声" #: src/settings_translation_file.cpp msgid "Cave noise #1" -msgstr "洞穴噪音 #1" +msgstr "洞穴噪声 #1" #: src/settings_translation_file.cpp msgid "Cave noise #2" -msgstr "洞穴噪音 #2" +msgstr "洞穴噪声 #2" #: src/settings_translation_file.cpp msgid "Cave width" @@ -2206,11 +2411,11 @@ #: src/settings_translation_file.cpp msgid "Cave1 noise" -msgstr "洞穴1噪音" +msgstr "洞穴1噪声" #: src/settings_translation_file.cpp msgid "Cave2 noise" -msgstr "洞穴2噪音" +msgstr "洞穴2噪声" #: src/settings_translation_file.cpp msgid "Cavern limit" @@ -2218,7 +2423,7 @@ #: src/settings_translation_file.cpp msgid "Cavern noise" -msgstr "大型洞穴噪音" +msgstr "大型洞穴噪声" #: src/settings_translation_file.cpp msgid "Cavern taper" @@ -2255,10 +2460,20 @@ "需要用于小屏幕。" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat font size" +msgstr "字体大小" + +#: src/settings_translation_file.cpp msgid "Chat key" msgstr "聊天键" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat log level" +msgstr "调试日志级别" + +#: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "聊天消息计数限制" @@ -2276,7 +2491,7 @@ #: src/settings_translation_file.cpp msgid "Chat toggle key" -msgstr "聊天开关键" +msgstr "聊天启用/禁用键" #: src/settings_translation_file.cpp msgid "Chatcommands" @@ -2420,7 +2635,7 @@ "Continuous forward movement, toggled by autoforward key.\n" "Press the autoforward key again or the backwards movement to disable." msgstr "" -"自动前进,通过自动前进键切换。\n" +"自动前进,通过自动前进键启用/禁用。\n" "再次按下自动前进键或后退以关闭。" #: src/settings_translation_file.cpp @@ -2456,7 +2671,8 @@ "intensive noise calculations." msgstr "" "控制洞穴通道宽度,设置较小值以创建较宽通道。\n" -"值>=10.0则完全关闭通道生成,避免大量噪声计算。" +"值>=10.0则完全关闭通道生成,避免大量噪声\n" +"计算。" #: src/settings_translation_file.cpp msgid "Crash message" @@ -2492,7 +2708,7 @@ #: src/settings_translation_file.cpp msgid "Debug info toggle key" -msgstr "调试信息开关键" +msgstr "调试信息启用/禁用键" #: src/settings_translation_file.cpp msgid "Debug log file size threshold" @@ -2543,6 +2759,11 @@ msgstr "默认报告格式" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Default stack size" +msgstr "默认游戏" + +#: src/settings_translation_file.cpp msgid "" "Default timeout for cURL, stated in milliseconds.\n" "Only has an effect if compiled with cURL." @@ -2682,7 +2903,7 @@ #: src/settings_translation_file.cpp msgid "Double-tapping the jump key toggles fly mode." -msgstr "连按两次“跳跃”键切换飞行模式。" +msgstr "连按两次“跳跃”键启用/禁用飞行模式。" #: src/settings_translation_file.cpp msgid "Drop item key" @@ -2897,6 +3118,16 @@ "块之间出现可见空间。" #: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\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 "FPS in pause menu" msgstr "暂停菜单 FPS" @@ -2906,16 +3137,15 @@ #: src/settings_translation_file.cpp msgid "Factor noise" -msgstr "系数噪音" +msgstr "系数噪声" #: src/settings_translation_file.cpp msgid "Fall bobbing factor" msgstr "坠落上下摆动系数" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "后备字体" +msgstr "后备字体路径" #: src/settings_translation_file.cpp msgid "Fallback font shadow" @@ -3004,7 +3234,7 @@ #: src/settings_translation_file.cpp msgid "First of two 3D noises that together define tunnels." -msgstr "定义决定通道的2个3D噪音的第一项。" +msgstr "定义决定通道的2个3D噪声的第一项。" #: src/settings_translation_file.cpp msgid "Fixed map seed" @@ -3015,6 +3245,41 @@ msgstr "固定虚拟摇杆" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "水级别" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "地窖最大Y坐标" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "地窖最小Y坐标" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "水级别" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "水级别" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "玩家转移距离" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "水级别" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "飞行键" @@ -3032,7 +3297,7 @@ #: src/settings_translation_file.cpp msgid "Fog toggle key" -msgstr "雾开关键" +msgstr "雾启用/禁用键" #: src/settings_translation_file.cpp msgid "Font bold by default" @@ -3068,6 +3333,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -3240,7 +3511,7 @@ #: src/settings_translation_file.cpp msgid "HUD toggle key" -msgstr "HUD 开关键" +msgstr "HUD启用/禁用键" #: src/settings_translation_file.cpp msgid "" @@ -3538,7 +3809,9 @@ "If disabled, \"special\" key is used to fly fast if both fly and fast mode " "are\n" "enabled." -msgstr "如果禁用,当飞行和疾跑同时开启时“特殊”键用于急速飞行。" +msgstr "" +"如果禁用,当飞行和快速模式同时启用时“特殊”键用于快速\n" +"飞行。" #: src/settings_translation_file.cpp msgid "" @@ -3567,7 +3840,9 @@ "If enabled, \"special\" key instead of \"sneak\" key is used for climbing " "down and\n" "descending." -msgstr "如果启用,“特殊”键将代替潜行键的向下攀爬和下降。" +msgstr "" +"如果启用,“特殊”键将代替潜行键的向下攀爬和\n" +"下降。" #: src/settings_translation_file.cpp msgid "" @@ -3593,7 +3868,7 @@ msgid "" "If enabled, makes move directions relative to the player's pitch when flying " "or swimming." -msgstr "如果启用,则在飞行或游泳时相对于玩家的视角来移动方向。" +msgstr "如果启用,则在飞行或游泳时相对于玩家的仰角来移动方向。" #: src/settings_translation_file.cpp msgid "If enabled, new players cannot join with an empty password." @@ -3907,7 +4182,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"快速模式移动键。\n" +"快速模式快速移动键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -3939,7 +4214,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"向左键。\n" +"左方向键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -3949,7 +4224,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"向右键。\n" +"右方向键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4382,7 +4657,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关自动前进键。\n" +"启用/禁用自动前进键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4402,7 +4677,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关小地图键。\n" +"启用/禁用小地图键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4412,7 +4687,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关快速移动键。\n" +"启用/禁用快速移动键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4422,7 +4697,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关飞行键。\n" +"启用/禁用飞行键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4432,7 +4707,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关穿墙模式键。\n" +"启用/禁用穿墙模式键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4442,7 +4717,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关仰角移动模式键。\n" +"启用/禁用俯仰移动模式键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4452,7 +4727,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关相机更新键。仅用于开发。\n" +"启用/禁用相机更新键。仅用于开发。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4462,7 +4737,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关聊天显示键。\n" +"启用/禁用聊天显示键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4472,7 +4747,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关调试信息键。\n" +"启用/禁用调试信息键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4482,7 +4757,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关雾显示键。\n" +"启用/禁用雾显示键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4492,7 +4767,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关HUD显示键。\n" +"启用/禁用HUD显示键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4502,7 +4777,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关大型聊天控制台显示键。\n" +"启用/禁用大型聊天控制台显示键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4512,7 +4787,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关性能分析图显示键。仅用于开发。\n" +"启用/禁用性能分析图显示键。仅用于开发。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4522,7 +4797,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关无限视野键。\n" +"启用/禁用无限视野键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4532,7 +4807,7 @@ "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"开关缩放(如有可能)键。\n" +"启用/禁用缩放(如有可能)键。\n" "见http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4666,14 +4941,6 @@ msgstr "亮度曲线低梯度" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "磁盘上的生产队列限制" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4748,6 +5015,11 @@ msgstr "地窖的Y值下限。" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "地窖的Y值下限。" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "主菜单脚本" @@ -4822,14 +5094,17 @@ "the 'jungles' flag is ignored." msgstr "" "针对v6地图生成器的属性。\n" -"'snowboimes'启用新版5群落系统。\n" +"'snowboimes'启用新版5生物群系系统。\n" "当'snowbiomes'开启使丛林自动启用,\n" "忽略'jungles'标签。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" "针对v7地图生成器的属性。\n" "'ridges'启用河流。" @@ -4919,10 +5194,6 @@ msgstr "地图生成器调试" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "地图生成器标志" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "地图生成器名称" @@ -4993,17 +5264,19 @@ msgstr "可在加载时加入队列的最大方块数。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "在生成时加入队列的最大方块数。\n" "设置为空白则自动选择合适的数值。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "在从文件中加载时加入队列的最大方块数。\n" "设置为空白则自动选择合适的数值。" @@ -5099,6 +5372,10 @@ msgstr "用于高亮选定的对象的方法。" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "小地图" @@ -5132,7 +5409,7 @@ #: src/settings_translation_file.cpp msgid "Modifies the size of the hudbar elements." -msgstr "更改hud栏元素。" +msgstr "更改hud栏元素大小。" #: src/settings_translation_file.cpp msgid "Monospace font path" @@ -5156,7 +5433,7 @@ #: src/settings_translation_file.cpp msgid "Mountain zero level" -msgstr "山起点级" +msgstr "山起点高度" #: src/settings_translation_file.cpp msgid "Mouse sensitivity" @@ -5214,9 +5491,8 @@ msgstr "服务器名称,将显示在提供给玩家的服务器列表。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Near plane" -msgstr "靠近裁切平面" +msgstr "近平面" #: src/settings_translation_file.cpp msgid "Network" @@ -5267,11 +5543,9 @@ msgstr "生产线程数" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5366,10 +5640,6 @@ msgstr "视差遮蔽比例" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "视差遮蔽强度" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5383,18 +5653,20 @@ "此字体用于不可用默认字体的语言。" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "屏幕截图保存路径。" +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 "着色器目录路径。如果无路径,则使用默认路径。" +msgstr "着色器目录路径。如果未定义路径,则使用默认路径。" #: src/settings_translation_file.cpp msgid "Path to texture directory. All textures are first searched from here." -msgstr "材质目录路径。所有材质都从此路径搜索。" +msgstr "材质目录路径。所有材质都首先从此路径搜索。" #: src/settings_translation_file.cpp msgid "" @@ -5422,7 +5694,16 @@ #: 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 "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "要生成的生产队列限制" #: src/settings_translation_file.cpp msgid "Physics" @@ -5430,12 +5711,11 @@ #: src/settings_translation_file.cpp msgid "Pitch move key" -msgstr "仰角移动键" +msgstr "俯仰移动键" #: src/settings_translation_file.cpp -#, fuzzy msgid "Pitch move mode" -msgstr "第三人称视角" +msgstr "俯仰移动模式" #: src/settings_translation_file.cpp msgid "" @@ -5462,7 +5742,7 @@ "Port to connect to (UDP).\n" "Note that the port field in the main menu overrides this setting." msgstr "" -"要连接到 (UDP) 的端口。 \n" +"要连接到的端口(UDP)。 \n" "请注意,主菜单中的端口字段将覆盖此设置。" #: src/settings_translation_file.cpp @@ -5470,19 +5750,19 @@ "Prevent digging and placing from repeating when holding the mouse buttons.\n" "Enable this when you dig or place too often by accident." msgstr "" -"按住鼠标时,防止误破坏和误放置。 \n" -"当您意外破坏方块或意外放置方块时,可以启用此功能。" +"按住鼠标时,防止重复破坏和重复放置。 \n" +"当您意外地频繁破坏或放置方块时启用此功能。" #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." -msgstr "阻止 mod 执行危险操作,如运行 shell 命令。" +msgstr "阻止 mod 执行不安全操作,如运行 shell 命令。" #: src/settings_translation_file.cpp msgid "" "Print the engine's profiling data in regular intervals (in seconds).\n" "0 = disable. Useful for developers." msgstr "" -"以固定间隔(以秒为单位)打印引擎的分析数据。 \n" +"以固定间隔(以秒为单位)打印引擎的性能分析数据。 \n" "0 = 禁用。对开发人员很有用。" #: src/settings_translation_file.cpp @@ -5490,33 +5770,45 @@ msgstr "有\"basic_privs\"的玩家可以授予的权限" #: src/settings_translation_file.cpp -#, fuzzy msgid "Profiler" -msgstr "山谷轮廓" +msgstr "性能分析" #: src/settings_translation_file.cpp msgid "Profiler toggle key" -msgstr "剖析器切换键" +msgstr "性能分析启用/禁用键" #: src/settings_translation_file.cpp -#, fuzzy msgid "Profiling" -msgstr "Mod 剖析" +msgstr "性能分析" #: src/settings_translation_file.cpp -msgid "Proportion of large caves that contain liquid." +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 fetch 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 "" "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 "" +"以64个节点的云立方体的数目表示的云区域半径。\n" +"大于26的值将开始在云区域的拐角处产生尖锐的边界。" #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." -msgstr "" +msgstr "抬高地形使河流周围形成山谷。" #: src/settings_translation_file.cpp msgid "Random input" @@ -5528,12 +5820,11 @@ #: src/settings_translation_file.cpp msgid "Recent Chat Messages" -msgstr "" +msgstr "最近聊天消息" #: src/settings_translation_file.cpp -#, fuzzy msgid "Regular font path" -msgstr "字体路径" +msgstr "常规字体路径" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5548,15 +5839,16 @@ "Remove color codes from incoming chat messages\n" "Use this to stop players from being able to use color in their messages" msgstr "" +"移除传入聊天消息的色彩码\n" +"使用该设置来防止玩家在消息中使用颜色" #: src/settings_translation_file.cpp msgid "Replaces the default main menu with a custom one." -msgstr "" +msgstr "将默认主菜单替换为自定义主菜单。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Report path" -msgstr "字体路径" +msgstr "报告路径" #: src/settings_translation_file.cpp msgid "" @@ -5571,23 +5863,32 @@ "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" -msgstr "" +msgstr "山脊扩散噪声" #: src/settings_translation_file.cpp -#, fuzzy msgid "Ridge noise" -msgstr "河流噪音" +msgstr "山脊噪声" #: src/settings_translation_file.cpp msgid "Ridge underwater noise" -msgstr "" +msgstr "水下山脊噪声" #: src/settings_translation_file.cpp msgid "Ridged mountain size noise" -msgstr "" +msgstr "山脊大小噪声" #: src/settings_translation_file.cpp msgid "Right key" @@ -5598,34 +5899,28 @@ msgstr "右击重复间隔" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel depth" -msgstr "河流深度" +msgstr "河道深度" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel width" -msgstr "河流深度" +msgstr "河道宽度" #: src/settings_translation_file.cpp -#, fuzzy msgid "River depth" msgstr "河流深度" #: src/settings_translation_file.cpp -#, fuzzy msgid "River noise" -msgstr "河流噪音" +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" @@ -5633,11 +5928,11 @@ #: src/settings_translation_file.cpp msgid "Rolling hill size noise" -msgstr "" +msgstr "波状丘陵大小噪声" #: src/settings_translation_file.cpp msgid "Rolling hills spread noise" -msgstr "" +msgstr "波状丘陵扩散噪声" #: src/settings_translation_file.cpp msgid "Round minimap" @@ -5645,19 +5940,19 @@ #: 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." -msgstr "" +msgstr "当 np_beach 超过这个值时会出现沙滩。" #: src/settings_translation_file.cpp msgid "Save the map received by the client on disk." -msgstr "" +msgstr "将客户端接收到的地图保存在磁盘上。" #: src/settings_translation_file.cpp msgid "Save window size automatically when modified." -msgstr "" +msgstr "当窗口大小改变时自动保存。" #: src/settings_translation_file.cpp msgid "Saving map received from server" @@ -5671,6 +5966,11 @@ "pixels when scaling down, at the cost of blurring some\n" "edge pixels when images are scaled by non-integer sizes." msgstr "" +"根据用户指定值缩放GUI。\n" +"使用最近的邻近抗锯齿滤镜缩放GUI。\n" +"这会将粗边处理光滑,并且在缩小时,\n" +"以在非整数缩放大小下模糊化部分边界\n" +"为代价混合像素。" #: src/settings_translation_file.cpp msgid "Screen height" @@ -5685,14 +5985,12 @@ msgstr "截图文件夹" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshot format" -msgstr "截图文件夹" +msgstr "截图格式" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshot quality" -msgstr "截图" +msgstr "截图品质" #: src/settings_translation_file.cpp msgid "" @@ -5700,21 +5998,21 @@ "1 means worst quality; 100 means best quality.\n" "Use 0 for default quality." msgstr "" +"截图品质。仅用于JPEG格式。\n" +"1 代表最差品质,100 代表最佳品质。\n" +"使用 0 来使用预设品质。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Seabed noise" -msgstr "洞穴噪音 #1" +msgstr "海底噪声" #: src/settings_translation_file.cpp -#, fuzzy msgid "Second of 4 2D noises that together define hill/mountain range height." -msgstr "定义tunnels的最初2个3D噪音。" +msgstr "定义山/山丘范围高度的4个2D噪声的第二项。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Second of two 3D noises that together define tunnels." -msgstr "定义tunnels的最初2个3D噪音。" +msgstr "定义通道的2个3D噪音的第二项。" #: src/settings_translation_file.cpp msgid "Security" @@ -5722,11 +6020,11 @@ #: src/settings_translation_file.cpp msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" -msgstr "" +msgstr "见 https://www.sqlite.org/pragma.html#pragma_synchronous" #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." -msgstr "" +msgstr "边框颜色 (红,绿,蓝) 选择框。" #: src/settings_translation_file.cpp msgid "Selection box color" @@ -5737,7 +6035,6 @@ msgstr "选择框宽度" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Selects one of 18 fractal types.\n" "1 = 4D \"Roundy\" Mandelbrot set.\n" @@ -5805,7 +6102,7 @@ #: src/settings_translation_file.cpp msgid "Server side occlusion culling" -msgstr "" +msgstr "服务器端遮挡删除" #: src/settings_translation_file.cpp msgid "Serverlist URL" @@ -5820,10 +6117,12 @@ "Set the language. Leave empty to use the system language.\n" "A restart is required after changing this." msgstr "" +"设定语言。留空以使用系统语言。\n" +"变更后须重新启动。" #: src/settings_translation_file.cpp msgid "Set the maximum character length of a chat message sent by clients." -msgstr "" +msgstr "设定客户端传送的聊天讯息的最大字符长度。" #: src/settings_translation_file.cpp msgid "" @@ -5860,24 +6159,25 @@ "cards.\n" "This only works with the OpenGL video backend." msgstr "" +"着色器允许高级视觉效果并且在一些显卡上可能会提高\n" +"性能。\n" +"仅用于OpenGL视频后端。" #: 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 -#, fuzzy msgid "" "Shadow offset (in pixels) of the fallback font. If 0, then shadow will not " "be drawn." -msgstr "字体阴影偏移,0 表示不绘制阴影。" +msgstr "后备字体阴影偏移(单位为像素),0 表示不绘制阴影。" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." -msgstr "" +msgstr "小地图的形状。启用 = 圆形,停用 = 方形。" #: src/settings_translation_file.cpp msgid "Show debug info" @@ -5885,11 +6185,11 @@ #: src/settings_translation_file.cpp msgid "Show entity selection boxes" -msgstr "" +msgstr "显示实体选择框" #: src/settings_translation_file.cpp msgid "Shutdown message" -msgstr "关机消息" +msgstr "关闭消息" #: src/settings_translation_file.cpp msgid "" @@ -5900,6 +6200,12 @@ "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" +"地图生成器生成的地图块的大小,以地图区块(16方块)表示。\n" +"警告!:将此值增加到大于5没有益处,而且有\n" +"多种危险。\n" +"减少此值增加洞穴和地窖密度。\n" +"修改此值适用于特殊用途,建议不改变\n" +"此值。" #: src/settings_translation_file.cpp msgid "" @@ -5907,10 +6213,13 @@ "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 "Slice w" -msgstr "" +msgstr "切片 w" #: src/settings_translation_file.cpp msgid "Slope and fill work together to modify the heights." @@ -5918,19 +6227,19 @@ #: 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." -msgstr "" +msgstr "在边界上的混合生物群系的湿度变化。" #: src/settings_translation_file.cpp msgid "Small-scale temperature variation for blending biomes on borders." -msgstr "" +msgstr "在边界上的混合生物群系的温度变化。" #: src/settings_translation_file.cpp msgid "Smooth lighting" @@ -5941,14 +6250,16 @@ "Smooths camera when looking around. Also called look or mouse smoothing.\n" "Useful for recording videos." msgstr "" +"当转动视角时让摄影机变流畅。也称为观看或鼠标流畅。\n" +"对录影很有用。" #: src/settings_translation_file.cpp msgid "Smooths rotation of camera in cinematic mode. 0 to disable." -msgstr "" +msgstr "在电影模式中让摄影机旋转变流畅。设为 0 以停用。" #: src/settings_translation_file.cpp msgid "Smooths rotation of camera. 0 to disable." -msgstr "" +msgstr "让旋转摄影机时较流畅。设为 0 以停用。" #: src/settings_translation_file.cpp msgid "Sneak key" @@ -5960,21 +6271,19 @@ #: src/settings_translation_file.cpp msgid "Sneaking speed, in nodes per second." -msgstr "" +msgstr "潜行速度,以方块每秒为单位。" #: src/settings_translation_file.cpp msgid "Sound" msgstr "音效" #: src/settings_translation_file.cpp -#, fuzzy msgid "Special key" -msgstr "潜行键" +msgstr "特殊键" #: src/settings_translation_file.cpp -#, fuzzy msgid "Special key for climbing/descending" -msgstr "攀登/降落的键" +msgstr "用于攀登/降落的特殊键" #: src/settings_translation_file.cpp msgid "" @@ -5983,6 +6292,17 @@ "(obviously, remote_media should end with a slash).\n" "Files that are not present will be fetched the usual way." msgstr "" +"客户端从指定的 URL 而不是使用 UDP 获取媒体。\n" +"$filename 应该可以通过 cURL 从 $remote_media$filename 访问。\n" +"(显然,remote_media 部份应以斜线结束)。\n" +"没有在其中的文件将会以通常的方式获取。" + +#: 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 "" @@ -6009,6 +6329,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "视差强度。" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "生成的一般地图强度。" @@ -6020,10 +6345,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "视差强度。" - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "严格协议检查" @@ -6032,6 +6353,20 @@ 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 the 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 "同步 SQLite" @@ -6107,9 +6442,8 @@ msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "The depth of dirt or other biome filler node." -msgstr "泥土深度或其他过滤器" +msgstr "泥土深度或其他生物群系过滤节点" #: src/settings_translation_file.cpp msgid "" @@ -6153,7 +6487,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6248,7 +6582,7 @@ #: src/settings_translation_file.cpp msgid "Toggle camera mode key" -msgstr "切换拍照模式键" +msgstr "启用/禁用拍照模式键" #: src/settings_translation_file.cpp msgid "Tooltip delay" @@ -6308,6 +6642,11 @@ msgstr "地窖的Y值上限。" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "地窖的Y值上限。" + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "使用 3D 云彩,而不是看起来是平面的。" @@ -6430,7 +6769,7 @@ #: src/settings_translation_file.cpp msgid "View zoom key" -msgstr "" +msgstr "检视缩放键" #: src/settings_translation_file.cpp msgid "Viewing range" @@ -6650,6 +6989,14 @@ 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 "" @@ -6681,81 +7028,95 @@ msgid "cURL timeout" msgstr "cURL 超时" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "调整亮度表的伽玛编码。较高的数值会较亮。\n" -#~ "这个设定是给客户端使用的,会被服务器忽略。" +#~ msgid "Toggle Cinematic" +#~ msgstr "切换电影模式" + +#~ msgid "Select Package File:" +#~ msgstr "选择包文件:" #, fuzzy -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "控制 floatland 地形的密度。\n" -#~ "是添加到 \"np_mountain\" 噪声值的偏移量。" +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "大型随机洞穴的Y轴最大值。" -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "控制隧道宽度,较小的值创建更宽的隧道。" +#~ msgid "Waving Water" +#~ msgstr "流动的水面" -#, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "地图生成器平面湖坡度" +#~ msgid "Waving water" +#~ msgstr "摇动水" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." -#~ msgstr "" -#~ "定义 floatland 平滑地形的区域。\n" -#~ "当噪音0时, 平滑的 floatlands 发生。" +#~ msgid "This font will be used for certain languages." +#~ msgstr "用于特定语言的字体。" -#~ msgid "Enable VBO" -#~ msgstr "启用 VBO" +#, fuzzy +#~ msgid "Shadow limit" +#~ msgstr "地图块限制" -#~ msgid "Enables filmic tone mapping" -#~ msgstr "启用电影基调映射" +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "TrueType 字体或位图的路径。" #, fuzzy -#~ msgid "Floatland level" -#~ msgstr "水级别" +#~ msgid "Lava depth" +#~ msgstr "巨大洞穴深度" -#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." -#~ msgstr "字体阴影不透明度(0-255)。" +#~ msgid "IPv6 support." +#~ msgstr "IPv6 支持。" #~ msgid "Gamma" #~ msgstr "伽马" -#~ msgid "IPv6 support." -#~ msgstr "IPv6 支持。" +#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." +#~ msgstr "字体阴影不透明度(0-255)。" + +#~ msgid "Enables filmic tone mapping" +#~ msgstr "启用电影基调映射" + +#~ msgid "Enable VBO" +#~ msgstr "启用 VBO" + +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "定义 floatland 平滑地形的区域。\n" +#~ "当噪音0时, 平滑的 floatlands 发生。" #, fuzzy -#~ msgid "Lava depth" -#~ msgstr "巨大洞穴深度" +#~ msgid "Darkness sharpness" +#~ msgstr "地图生成器平面湖坡度" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "TrueType 字体或位图的路径。" +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "控制隧道宽度,较小的值创建更宽的隧道。" #, fuzzy -#~ msgid "Shadow limit" -#~ msgstr "地图块限制" +#~ msgid "" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "控制 floatland 地形的密度。\n" +#~ "是添加到 \"np_mountain\" 噪声值的偏移量。" -#~ msgid "This font will be used for certain languages." -#~ msgstr "用于特定语言的字体。" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "调整亮度表的伽玛编码。较高的数值会较亮。\n" +#~ "这个设定是给客户端使用的,会被服务器忽略。" -#~ msgid "Waving water" -#~ msgstr "摇动水" +#~ msgid "Path to save screenshots at." +#~ msgstr "屏幕截图保存路径。" -#~ msgid "Waving Water" -#~ msgstr "流动的水面" +#~ msgid "Parallax occlusion strength" +#~ msgstr "视差遮蔽强度" -#, fuzzy -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "大型随机洞穴的Y轴最大值。" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "磁盘上的生产队列限制" -#~ msgid "Select Package File:" -#~ msgstr "选择包文件:" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "正在下载和安装 $1,请稍等..." -#~ msgid "Toggle Cinematic" -#~ msgstr "切换电影模式" +#~ msgid "Back" +#~ msgstr "后退" + +#~ msgid "Ok" +#~ msgstr "确定" diff -Nru minetest-5.2.0/po/zh_TW/minetest.po minetest-5.3.0/po/zh_TW/minetest.po --- minetest-5.2.0/po/zh_TW/minetest.po 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/po/zh_TW/minetest.po 2020-07-09 21:13:21.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: Chinese (Traditional) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-03 23:18+0200\n" +"POT-Creation-Date: 2020-06-13 23:17+0200\n" "PO-Revision-Date: 2020-01-29 13:50+0000\n" "Last-Translator: pan93412 \n" "Language-Team: Chinese (Traditional) 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 "FPS in pause menu" msgstr "在暫停選單中的 FPS" @@ -2996,6 +3228,41 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland density" +msgstr "浮地山密度" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland maximum Y" +msgstr "浮地山高度" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland minimum Y" +msgstr "浮地山高度" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland noise" +msgstr "浮地基礎噪音" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland taper exponent" +msgstr "浮地山密度" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland tapering distance" +msgstr "浮地基礎噪音" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Floatland water level" +msgstr "浮地高度" + +#: src/settings_translation_file.cpp msgid "Fly key" msgstr "飛行按鍵" @@ -3049,6 +3316,12 @@ #: 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 "" "Format of player chat messages. The following strings are valid " "placeholders:\n" "@name, @message, @timestamp (optional)" @@ -4638,14 +4911,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Limit of emerge queues on disk" -msgstr "在磁碟上出現佇列的限制" - -#: src/settings_translation_file.cpp -msgid "Limit of emerge queues to generate" -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" @@ -4721,6 +4986,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Lower Y limit of floatlands." +msgstr "大型偽隨機洞穴的 Y 上限。" + +#: src/settings_translation_file.cpp msgid "Main menu script" msgstr "主選單指令稿" @@ -4803,10 +5073,17 @@ "以「no」開頭的旗標字串將會用於明確的停用它們。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" -"'ridges' enables the rivers." +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." msgstr "" +"專用於 Mapgen flat 的地圖生成屬性。\n" +"可能會有少數的湖泊或是丘陵會在扁平的世界中生成。\n" +"未在旗標字串中指定的旗標將不會自預設值修改。\n" +"以「no」開頭的旗標字串將會用於明確的停用它們。" #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -4907,10 +5184,6 @@ msgstr "Mapgen 除錯" #: src/settings_translation_file.cpp -msgid "Mapgen flags" -msgstr "Mapgen 旗標" - -#: src/settings_translation_file.cpp msgid "Mapgen name" msgstr "Mapgen 名稱" @@ -4976,17 +5249,19 @@ msgstr "可被放進佇列內等待載入的最大區塊數。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "可被放進佇列內等待生成的最大區塊數。\n" "將其設定留空則會自動選擇適當的值。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" -"Set to blank for an appropriate amount to be chosen automatically." +"This limit is enforced per player." msgstr "" "可被放進佇列內等待從檔案載入的最大區塊數。\n" "將其設定留空則會自動選擇適當的值。" @@ -5081,6 +5356,10 @@ msgstr "用於突顯物件的方法。" #: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Minimap" msgstr "迷你地圖" @@ -5248,9 +5527,6 @@ #: src/settings_translation_file.cpp msgid "" "Number of emerge threads to use.\n" -"WARNING: Currently there are multiple bugs that may cause crashes when\n" -"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n" -"strongly recommended this value is set to the default '1'.\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" @@ -5331,10 +5607,6 @@ msgstr "視差遮蔽係數" #: src/settings_translation_file.cpp -msgid "Parallax occlusion strength" -msgstr "視差遮蔽強度" - -#: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" "If “freetype” setting is enabled: Must be a TrueType font.\n" @@ -5344,8 +5616,10 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Path to save screenshots at." -msgstr "儲存螢幕截圖的路徑。" +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 "" @@ -5378,6 +5652,15 @@ msgstr "" #: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Per-player limit of queued blocks to generate" +msgstr "要生成的出現佇列的限制" + +#: src/settings_translation_file.cpp msgid "Physics" msgstr "物理" @@ -5453,6 +5736,18 @@ 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 fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." msgstr "" @@ -5961,6 +6256,13 @@ #: 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 of light curve boost range.\n" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." @@ -5985,6 +6287,11 @@ msgstr "山雜訊" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of 3D mode parallax." +msgstr "視差強度。" + +#: src/settings_translation_file.cpp msgid "Strength of generated normalmaps." msgstr "生成之一般地圖的強度。" @@ -5996,10 +6303,6 @@ msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of parallax." -msgstr "視差強度。" - -#: src/settings_translation_file.cpp msgid "Strict protocol checking" msgstr "嚴格協議檢查" @@ -6008,6 +6311,20 @@ 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 the 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 "同步的 SQLite" @@ -6133,7 +6450,7 @@ "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_range." +"This should be configured together with active_object_send_range_blocks." msgstr "" #: src/settings_translation_file.cpp @@ -6311,6 +6628,11 @@ msgstr "" #: src/settings_translation_file.cpp +#, fuzzy +msgid "Upper Y limit of floatlands." +msgstr "大型偽隨機洞穴的 Y 上限。" + +#: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." msgstr "使用 3D 立體而非扁平的雲朵外觀。" @@ -6678,6 +7000,14 @@ msgstr "洞穴拓展至全尺寸的 Y 距離。" #: 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 "平均地形表面的 Y 高度。" @@ -6711,110 +7041,112 @@ msgid "cURL timeout" msgstr "cURL 逾時" -#~ msgid "" -#~ "Adjust the gamma encoding for the light tables. Higher numbers are " -#~ "brighter.\n" -#~ "This setting is for the client only and is ignored by the server." -#~ msgstr "" -#~ "調整亮度表的伽瑪編碼。較高的數值會較亮。\n" -#~ "這個設定是給客戶端使用的,會被伺服器忽略。" +#~ msgid "Toggle Cinematic" +#~ msgstr "切換過場動畫" #, fuzzy -#~ msgid "" -#~ "Controls the density of mountain-type floatlands.\n" -#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." -#~ msgstr "" -#~ "控制山地的浮地密度。\n" -#~ "是加入到 'np_mountain' 噪音值的補償。" - -#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." -#~ msgstr "控制隧道的寬度,較小的值會創造出較寬的隧道。" +#~ msgid "Select Package File:" +#~ msgstr "選取 Mod 檔案:" #, fuzzy -#~ msgid "Darkness sharpness" -#~ msgstr "湖泊坡度" +#~ msgid "Y of upper limit of lava in large caves." +#~ msgstr "大型偽隨機洞穴的 Y 上限。" -#~ msgid "" -#~ "Defines areas of floatland smooth terrain.\n" -#~ "Smooth floatlands occur when noise > 0." -#~ msgstr "" -#~ "定義浮地的平整地形區。\n" -#~ "平整的浮地會在噪音 > 0 時產生。" +#~ msgid "Waving Water" +#~ msgstr "波動的水" -#~ msgid "Enable VBO" -#~ msgstr "啟用 VBO" +#~ msgid "Y-level to which floatland shadows extend." +#~ msgstr "浮地陰影擴展的 Y 高度。" -#~ msgid "Enables filmic tone mapping" -#~ msgstr "啟用電影色調映射" +#~ msgid "Y-level of floatland midpoint and lake surface." +#~ msgstr "浮地中點與湖表面的 Y 高度。" -#~ msgid "Floatland base height noise" -#~ msgstr "浮地基礎高度噪音" +#~ msgid "Waving water" +#~ msgstr "波動的水" -#~ msgid "Floatland base noise" -#~ msgstr "浮地基礎噪音" +#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." +#~ msgstr "在平整浮地地形的山丘高度與湖泊深度變化。" -#~ msgid "Floatland level" -#~ msgstr "浮地高度" +#, fuzzy +#~ msgid "" +#~ "Typical maximum height, above and below midpoint, of floatland mountains." +#~ msgstr "浮地山區域的典型最大高度,高於與低於中點。" -#~ msgid "Floatland mountain density" -#~ msgstr "浮地山密度" +#~ msgid "This font will be used for certain languages." +#~ msgstr "這個字型將會被用於特定的語言。" + +#~ msgid "Shadow limit" +#~ msgstr "陰影限制" + +#~ msgid "Path to TrueTypeFont or bitmap." +#~ msgstr "TrueType 字型或點陣字的路徑。" #, fuzzy -#~ msgid "Floatland mountain exponent" -#~ msgstr "浮地山密度" +#~ msgid "Lava depth" +#~ msgstr "大型洞穴深度" -#~ msgid "Floatland mountain height" -#~ msgstr "浮地山高度" +#~ msgid "IPv6 support." +#~ msgstr "IPv6 支援。" + +#~ msgid "Gamma" +#~ msgstr "Gamma" #~ msgid "Font shadow alpha (opaqueness, between 0 and 255)." #~ msgstr "字型陰影 alpha(不透明度,介於 0 到 255)。" -#~ msgid "Gamma" -#~ msgstr "Gamma" +#~ msgid "Floatland base height noise" +#~ msgstr "浮地基礎高度噪音" -#~ msgid "IPv6 support." -#~ msgstr "IPv6 支援。" +#~ msgid "Enables filmic tone mapping" +#~ msgstr "啟用電影色調映射" -#, fuzzy -#~ msgid "Lava depth" -#~ msgstr "大型洞穴深度" +#~ msgid "Enable VBO" +#~ msgstr "啟用 VBO" -#~ msgid "Path to TrueTypeFont or bitmap." -#~ msgstr "TrueType 字型或點陣字的路徑。" +#~ msgid "" +#~ "Defines areas of floatland smooth terrain.\n" +#~ "Smooth floatlands occur when noise > 0." +#~ msgstr "" +#~ "定義浮地的平整地形區。\n" +#~ "平整的浮地會在噪音 > 0 時產生。" -#~ msgid "Shadow limit" -#~ msgstr "陰影限制" +#, fuzzy +#~ msgid "Darkness sharpness" +#~ msgstr "湖泊坡度" -#~ msgid "This font will be used for certain languages." -#~ msgstr "這個字型將會被用於特定的語言。" +#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." +#~ msgstr "控制隧道的寬度,較小的值會創造出較寬的隧道。" #, fuzzy #~ msgid "" -#~ "Typical maximum height, above and below midpoint, of floatland mountains." -#~ msgstr "浮地山區域的典型最大高度,高於與低於中點。" - -#~ msgid "Variation of hill height and lake depth on floatland smooth terrain." -#~ msgstr "在平整浮地地形的山丘高度與湖泊深度變化。" +#~ "Controls the density of mountain-type floatlands.\n" +#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value." +#~ msgstr "" +#~ "控制山地的浮地密度。\n" +#~ "是加入到 'np_mountain' 噪音值的補償。" -#~ msgid "Waving water" -#~ msgstr "波動的水" +#~ msgid "" +#~ "Adjust the gamma encoding for the light tables. Higher numbers are " +#~ "brighter.\n" +#~ "This setting is for the client only and is ignored by the server." +#~ msgstr "" +#~ "調整亮度表的伽瑪編碼。較高的數值會較亮。\n" +#~ "這個設定是給客戶端使用的,會被伺服器忽略。" -#~ msgid "Y-level of floatland midpoint and lake surface." -#~ msgstr "浮地中點與湖表面的 Y 高度。" +#~ msgid "Path to save screenshots at." +#~ msgstr "儲存螢幕截圖的路徑。" -#~ msgid "Y-level to which floatland shadows extend." -#~ msgstr "浮地陰影擴展的 Y 高度。" +#~ msgid "Parallax occlusion strength" +#~ msgstr "視差遮蔽強度" -#~ msgid "Waving Water" -#~ msgstr "波動的水" +#~ msgid "Limit of emerge queues on disk" +#~ msgstr "在磁碟上出現佇列的限制" -#, fuzzy -#~ msgid "Y of upper limit of lava in large caves." -#~ msgstr "大型偽隨機洞穴的 Y 上限。" +#~ msgid "Downloading and installing $1, please wait..." +#~ msgstr "正在下載並安裝 $1,請稍候……" -#, fuzzy -#~ msgid "Select Package File:" -#~ msgstr "選取 Mod 檔案:" +#~ msgid "Back" +#~ msgstr "返回" -#~ msgid "Toggle Cinematic" -#~ msgstr "切換過場動畫" +#~ msgid "Ok" +#~ msgstr "確定" diff -Nru minetest-5.2.0/README.md minetest-5.3.0/README.md --- minetest-5.2.0/README.md 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/README.md 2020-07-09 21:13:20.000000000 +0000 @@ -1,13 +1,13 @@ Minetest ======== -[![Build Status](https://travis-ci.org/minetest/minetest.svg?branch=master)](https://travis-ci.org/minetest/minetest) +![Build Status](https://github.com/minetest/minetest/workflows/build/badge.svg) [![Translation status](https://hosted.weblate.org/widgets/minetest/-/svg-badge.svg)](https://hosted.weblate.org/engage/minetest/?utm_source=widget) [![License](https://img.shields.io/badge/license-LGPLv2.1%2B-blue.svg)](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) Minetest is a free open-source voxel game engine with easy modding and game creation. -Copyright (C) 2010-2019 Perttu Ahola +Copyright (C) 2010-2020 Perttu Ahola and contributors (see source file comments and the version control log) In case you downloaded the source code @@ -69,15 +69,15 @@ | J | Enable/disable fast mode (needs fast privilege) | | H | Enable/disable noclip mode (needs noclip privilege) | | E | Move fast in fast mode | +| C | Cycle through camera modes | +| V | Cycle through minimap modes | +| Shift + V | Change minimap orientation | | F1 | Hide/show HUD | | F2 | Hide/show chat | | F3 | Disable/enable fog | | F4 | Disable/enable camera update (Mapblocks are not updated anymore when disabled, disabled in release builds) | | F5 | Cycle through debug information screens | | F6 | Cycle through profiler info screens | -| F7 | Cycle through camera modes | -| F9 | Cycle through minimap modes | -| Shift + F9 | Change minimap orientation | | F10 | Show/hide console | | F12 | Take screenshot | @@ -173,7 +173,7 @@ git clone --depth 1 https://github.com/minetest/minetest.git cd minetest -Download minetest_game (otherwise only the "Minimal development test" game is available) using Git: +Download minetest_game (otherwise only the "Development Test" game is available) using Git: git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game @@ -218,6 +218,7 @@ BUILD_CLIENT=TRUE - Build Minetest client BUILD_SERVER=FALSE - Build Minetest server + BUILD_UNITTESTS=TRUE - Build unittest sources CMAKE_BUILD_TYPE=Release - Type of build (Release vs. Debug) Release - Release build Debug - Debug build @@ -235,6 +236,7 @@ ENABLE_SPATIAL=ON - Build with LibSpatial; Speeds up AreaStores ENABLE_SOUND=ON - Build with OpenAL, libogg & libvorbis; in-game sounds ENABLE_LUAJIT=ON - Build with LuaJIT (much faster than non-JIT Lua) + ENABLE_PROMETHEUS=OFF - Build with Prometheus metrics exporter (listens on tcp/30000 by default) ENABLE_SYSTEM_GMP=ON - Use GMP from system (much faster than bundled mini-gmp) ENABLE_SYSTEM_JSONCPP=OFF - Use JsonCPP from system OPENGL_GL_PREFERENCE=LEGACY - Linux client build only; See CMake Policy CMP0072 for reference diff -Nru minetest-5.2.0/src/activeobject.h minetest-5.3.0/src/activeobject.h --- minetest-5.2.0/src/activeobject.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/activeobject.h 2020-07-09 21:13:21.000000000 +0000 @@ -55,6 +55,23 @@ std::string datastring; }; +enum ActiveObjectCommand { + AO_CMD_SET_PROPERTIES, + AO_CMD_UPDATE_POSITION, + AO_CMD_SET_TEXTURE_MOD, + AO_CMD_SET_SPRITE, + AO_CMD_PUNCHED, + AO_CMD_UPDATE_ARMOR_GROUPS, + AO_CMD_SET_ANIMATION, + AO_CMD_SET_BONE_POSITION, + AO_CMD_ATTACH_TO, + AO_CMD_SET_PHYSICS_OVERRIDE, + AO_CMD_OBSOLETE1, + // ^ UPDATE_NAMETAG_ATTRIBUTES deprecated since 0.4.14, removed in 5.3.0 + AO_CMD_SPAWN_INFANT, + AO_CMD_SET_ANIMATION_SPEED +}; + /* Parent class for ServerActiveObject and ClientActiveObject */ diff -Nru minetest-5.2.0/src/client/camera.cpp minetest-5.3.0/src/client/camera.cpp --- minetest-5.2.0/src/client/camera.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/camera.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -86,6 +86,51 @@ m_wieldmgr->drop(); } +void Camera::notifyFovChange() +{ + LocalPlayer *player = m_client->getEnv().getLocalPlayer(); + assert(player); + + PlayerFovSpec spec = player->getFov(); + + /* + * Update m_old_fov_degrees first - it serves as the starting point of the + * upcoming transition. + * + * If an FOV transition is already active, mark current FOV as the start of + * the new transition. If not, set it to the previous transition's target FOV. + */ + if (m_fov_transition_active) + m_old_fov_degrees = m_curr_fov_degrees; + else + m_old_fov_degrees = m_server_sent_fov ? m_target_fov_degrees : m_cache_fov; + + /* + * Update m_server_sent_fov next - it corresponds to the target FOV of the + * upcoming transition. + * + * Set it to m_cache_fov, if server-sent FOV is 0. Otherwise check if + * server-sent FOV is a multiplier, and multiply it with m_cache_fov instead + * of overriding. + */ + if (spec.fov == 0.0f) { + m_server_sent_fov = false; + m_target_fov_degrees = m_cache_fov; + } else { + m_server_sent_fov = true; + m_target_fov_degrees = spec.is_multiplier ? m_cache_fov * spec.fov : spec.fov; + } + + if (spec.transition_time > 0.0f) + m_fov_transition_active = true; + + // If FOV smooth transition is active, initialize required variables + if (m_fov_transition_active) { + m_transition_time = spec.transition_time; + m_fov_diff = m_target_fov_degrees - m_old_fov_degrees; + } +} + bool Camera::successfullyCreated(std::string &error_message) { if (!m_playernode) { @@ -297,9 +342,13 @@ if (player->getParent()) player_position = player->getParent()->getPosition(); - if(player->touching_ground && - player_position.Y > old_player_position.Y) - { + // Smooth the camera movement when the player instantly moves upward due to stepheight. + // To smooth the 'not touching_ground' stepheight, smoothing is necessary when jumping + // or swimming (for when moving from liquid to land). + // Disable smoothing if climbing or flying, to avoid upwards offset of player model + // when seen in 3rd person view. + bool flying = g_settings->getBool("free_move") && m_client->checkLocalPrivilege("fly"); + if (player_position.Y > old_player_position.Y && !player->is_climbing && !flying) { f32 oldy = old_player_position.Y; f32 newy = player_position.Y; f32 t = std::exp(-23 * frametime); @@ -333,17 +382,21 @@ fall_bobbing *= m_cache_fall_bobbing_amount; } - // Calculate players eye offset for different camera modes - v3f PlayerEyeOffset = player->getEyeOffset(); - if (m_camera_mode == CAMERA_MODE_FIRST) - PlayerEyeOffset += player->eye_offset_first; - else - PlayerEyeOffset += player->eye_offset_third; + // Calculate and translate the head SceneNode offsets + { + v3f eye_offset = player->getEyeOffset(); + if (m_camera_mode == CAMERA_MODE_FIRST) + eye_offset += player->eye_offset_first; + else + eye_offset += player->eye_offset_third; - // Set head node transformation - m_headnode->setPosition(PlayerEyeOffset+v3f(0,cameratilt*-player->hurt_tilt_strength+fall_bobbing,0)); - m_headnode->setRotation(v3f(player->getPitch(), 0, cameratilt*player->hurt_tilt_strength)); - m_headnode->updateAbsolutePosition(); + // Set head node transformation + eye_offset.Y += cameratilt * -player->hurt_tilt_strength + fall_bobbing; + m_headnode->setPosition(eye_offset); + m_headnode->setRotation(v3f(player->getPitch(), 0, + cameratilt * player->hurt_tilt_strength)); + m_headnode->updateAbsolutePosition(); + } // Compute relative camera position and target v3f rel_cam_pos = v3f(0,0,0); @@ -458,35 +511,40 @@ m_camera_position = my_cp; /* - * Apply server-sent FOV. If server doesn't enforce FOV, - * check for zoom and set to zoom FOV. - * Otherwise, default to m_cache_fov + * Apply server-sent FOV, instantaneous or smooth transition. + * If not, check for zoom and set to zoom FOV. + * Otherwise, default to m_cache_fov. */ - - f32 fov_degrees; - PlayerFovSpec fov_spec = player->getFov(); - if (fov_spec.fov > 0.0f) { - // If server-sent FOV is a multiplier, multiply - // it with m_cache_fov instead of overriding - if (fov_spec.is_multiplier) - fov_degrees = m_cache_fov * fov_spec.fov; - else - fov_degrees = fov_spec.fov; + if (m_fov_transition_active) { + // Smooth FOV transition + // Dynamically calculate FOV delta based on frametimes + f32 delta = (frametime / m_transition_time) * m_fov_diff; + m_curr_fov_degrees += delta; + + // Mark transition as complete if target FOV has been reached + if ((m_fov_diff > 0.0f && m_curr_fov_degrees >= m_target_fov_degrees) || + (m_fov_diff < 0.0f && m_curr_fov_degrees <= m_target_fov_degrees)) { + m_fov_transition_active = false; + m_curr_fov_degrees = m_target_fov_degrees; + } + } else if (m_server_sent_fov) { + // Instantaneous FOV change + m_curr_fov_degrees = m_target_fov_degrees; } else if (player->getPlayerControl().zoom && player->getZoomFOV() > 0.001f) { // Player requests zoom, apply zoom FOV - fov_degrees = player->getZoomFOV(); + m_curr_fov_degrees = player->getZoomFOV(); } else { // Set to client's selected FOV - fov_degrees = m_cache_fov; + m_curr_fov_degrees = m_cache_fov; } - fov_degrees = rangelim(fov_degrees, 1.0f, 160.0f); + m_curr_fov_degrees = rangelim(m_curr_fov_degrees, 1.0f, 160.0f); // FOV and aspect ratio const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize(); m_aspect = (f32) window_size.X / (f32) window_size.Y; - m_fov_y = fov_degrees * M_PI / 180.0; + m_fov_y = m_curr_fov_degrees * M_PI / 180.0; // Increase vertical FOV on lower aspect ratios (<16:10) - m_fov_y *= MYMAX(1.0, MYMIN(1.4, sqrt(16./10. / m_aspect))); + m_fov_y *= core::clamp(sqrt(16./10. / m_aspect), 1.0, 1.4); m_fov_x = 2 * atan(m_aspect * tan(0.5 * m_fov_y)); m_cameranode->setAspectRatio(m_aspect); m_cameranode->setFOV(m_fov_y); @@ -538,7 +596,7 @@ m_wieldnode->setPosition(wield_position); m_wieldnode->setRotation(wield_rotation); - m_wieldnode->setColor(player->light_color); + m_wieldnode->setNodeLightColor(player->light_color); // Set render distance updateViewingRange(); @@ -553,14 +611,11 @@ const bool walking = movement_XZ && player->touching_ground; const bool swimming = (movement_XZ || player->swimming_vertical) && player->in_liquid; const bool climbing = movement_Y && player->is_climbing; - if ((walking || swimming || climbing) && - (!g_settings->getBool("free_move") || !m_client->checkLocalPrivilege("fly"))) { + if ((walking || swimming || climbing) && !flying) { // Start animation m_view_bobbing_state = 1; m_view_bobbing_speed = MYMIN(speed.getLength(), 70); - } - else if (m_view_bobbing_state == 1) - { + } else if (m_view_bobbing_state == 1) { // Stop animation m_view_bobbing_state = 2; m_view_bobbing_speed = 60; diff -Nru minetest-5.2.0/src/client/camera.h minetest-5.3.0/src/client/camera.h --- minetest-5.2.0/src/client/camera.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/camera.h 2020-07-09 21:13:21.000000000 +0000 @@ -75,6 +75,12 @@ return m_camera_position; } + // Returns the absolute position of the head SceneNode in the world + inline v3f getHeadPosition() const + { + return m_headnode->getAbsolutePosition(); + } + // Get the camera direction (in absolute camera coordinates). // This has view bobbing applied. inline v3f getDirection() const @@ -106,6 +112,9 @@ return MYMAX(m_fov_x, m_fov_y); } + // Notify about new server-sent FOV and initialize smooth FOV transition + void notifyFovChange(); + // Checks if the constructor was able to create the scene nodes bool successfullyCreated(std::string &error_message); @@ -180,6 +189,9 @@ Client *m_client; + // Default Client FOV (as defined by the "fov" setting) + f32 m_cache_fov; + // Absolute camera position v3f m_camera_position; // Absolute camera direction @@ -187,6 +199,14 @@ // Camera offset v3s16 m_camera_offset; + // Server-sent FOV variables + bool m_server_sent_fov = false; + f32 m_curr_fov_degrees, m_old_fov_degrees, m_target_fov_degrees; + + // FOV transition variables + bool m_fov_transition_active = false; + f32 m_fov_diff, m_transition_time; + v2f m_wieldmesh_offset = v2f(55.0f, -35.0f); v2f m_arm_dir; v2f m_cam_vel; @@ -224,7 +244,6 @@ f32 m_cache_fall_bobbing_amount; f32 m_cache_view_bobbing_amount; - f32 m_cache_fov; bool m_arm_inertia; std::list m_nametags; diff -Nru minetest-5.2.0/src/client/client.cpp minetest-5.3.0/src/client/client.cpp --- minetest-5.2.0/src/client/client.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/client.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -61,6 +61,28 @@ extern gui::IGUIEnvironment* guienv; /* + Utility classes +*/ + +u32 PacketCounter::sum() const +{ + u32 n = 0; + for (const auto &it : m_packets) + n += it.second; + return n; +} + +void PacketCounter::print(std::ostream &o) const +{ + for (const auto &it : m_packets) { + auto name = it.first >= TOCLIENT_NUM_MSG_TYPES ? "?" + : toClientCommandTable[it.first].name; + o << "cmd " << it.first << " (" << name << ") count " + << it.second << std::endl; + } +} + +/* Client */ @@ -164,7 +186,7 @@ infostream << mod.name << " "; infostream << std::endl; - // Load and run "mod" scripts + // Load "mod" scripts for (const ModSpec &mod : m_mods) { if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) { throw ModError("Error loading mod \"" + mod.name + @@ -174,7 +196,7 @@ scanModIntoMemory(mod.name, mod.path); } - // Load and run "mod" scripts + // Run them for (const ModSpec &mod : m_mods) m_script->loadModFromMemory(mod.name); @@ -183,10 +205,14 @@ // Run a callback when mods are loaded m_script->on_mods_loaded(); + + // Create objects if they're ready if (m_state == LC_Ready) m_script->on_client_ready(m_env.getLocalPlayer()); if (m_camera) m_script->on_camera_ready(m_camera); + if (m_minimap) + m_script->on_minimap_ready(m_minimap); } bool Client::checkBuiltinIntegrity() @@ -336,12 +362,14 @@ { float &counter = m_packetcounter_timer; counter -= dtime; - if(counter <= 0.0) + if(counter <= 0.0f) { - counter = 20.0; + counter = 30.0f; + u32 sum = m_packetcounter.sum(); + float avg = sum / counter; - infostream << "Client packetcounter (" << m_packetcounter_timer - << "):"<applyControl(dtime, &m_env); - // Step environment + // Step environment (also handles player controls) m_env.step(dtime); m_sound->step(dtime); @@ -621,14 +646,17 @@ m_mod_storage_save_timer -= dtime; if (m_mod_storage_save_timer <= 0.0f) { - verbosestream << "Saving registered mod storages." << std::endl; m_mod_storage_save_timer = g_settings->getFloat("server_map_save_interval"); + int n = 0; for (std::unordered_map::const_iterator it = m_mod_storages.begin(); it != m_mod_storages.end(); ++it) { if (it->second->isModified()) { it->second->save(getModStoragePath()); + n++; } } + if (n > 0) + infostream << "Saved " << n << " modified mod storages." << std::endl; } // Write server map @@ -639,11 +667,9 @@ } } -bool Client::loadMedia(const std::string &data, const std::string &filename) +bool Client::loadMedia(const std::string &data, const std::string &filename, + bool from_media_push) { - // Silly irrlicht's const-incorrectness - Buffer data_rw(data.c_str(), data.size()); - std::string name; const char *image_ext[] = { @@ -653,12 +679,15 @@ }; name = removeStringEnd(filename, image_ext); if (!name.empty()) { - verbosestream<<"Client: Attempting to load image " - <<"file \""< data_rw(data.c_str(), data.size()); + // Create an irrlicht memory file io::IReadFile *rfile = irrfs->createMemoryReadFile( *data_rw, data_rw.getSize(), "_tempreadfile"); @@ -687,17 +716,15 @@ }; name = removeStringEnd(filename, sound_ext); if (!name.empty()) { - verbosestream<<"Client: Attempting to load sound " - <<"file \""<loadSoundData(name, data); - return true; + TRACESTREAM(<< "Client: Attempting to load sound " + << "file \"" << filename << "\"" << std::endl); + return m_sound->loadSoundData(name, data); } const char *model_ext[] = { ".x", ".b3d", ".md2", ".obj", NULL }; - name = removeStringEnd(filename, model_ext); if (!name.empty()) { verbosestream<<"Client: Storing model into memory: " @@ -714,9 +741,11 @@ }; name = removeStringEnd(filename, translate_ext); if (!name.empty()) { - verbosestream << "Client: Loading translation: " - << "\"" << filename << "\"" << std::endl; - g_translations->loadTranslation(data); + if (from_media_push) + return false; + TRACESTREAM(<< "Client: Loading translation: " + << "\"" << filename << "\"" << std::endl); + g_client_translations->loadTranslation(data); return true; } @@ -1722,8 +1751,11 @@ text = wgettext("Initializing nodes..."); RenderingEngine::draw_load_screen(text, guienv, m_tsrc, 0, 72); m_nodedef->updateAliases(m_itemdef); - for (const auto &path : getTextureDirs()) - m_nodedef->applyTextureOverrides(path + DIR_DELIM + "override.txt"); + for (const auto &path : getTextureDirs()) { + TextureOverrideSource override_source(path + DIR_DELIM + "override.txt"); + m_nodedef->applyTextureOverrides(override_source.getNodeTileOverrides()); + m_itemdef->applyTextureOverrides(override_source.getItemTextureOverrides()); + } m_nodedef->setNodeRegistrationStatus(true); m_nodedef->runNodeResolveCallbacks(); delete[] text; @@ -1780,13 +1812,24 @@ char timetstamp_c[64]; strftime(timetstamp_c, sizeof(timetstamp_c), "%Y%m%d_%H%M%S", tm); - std::string filename_base = g_settings->get("screenshot_path") + std::string screenshot_dir; + + if (fs::IsPathAbsolute(g_settings->get("screenshot_path"))) + screenshot_dir = g_settings->get("screenshot_path"); + else + screenshot_dir = porting::path_user + DIR_DELIM + g_settings->get("screenshot_path"); + + std::string filename_base = screenshot_dir + DIR_DELIM + std::string("screenshot_") + std::string(timetstamp_c); std::string filename_ext = "." + g_settings->get("screenshot_format"); std::string filename; + // Create the directory if it doesn't already exist. + // Otherwise, saving the screenshot would fail. + fs::CreateDir(screenshot_dir); + u32 quality = (u32)g_settings->getS32("screenshot_quality"); quality = MYMIN(MYMAX(quality, 0), 100) / 100.0 * 255; diff -Nru minetest-5.2.0/src/client/clientenvironment.cpp minetest-5.3.0/src/client/clientenvironment.cpp --- minetest-5.2.0/src/client/clientenvironment.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/clientenvironment.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -216,6 +216,9 @@ */ { + // Control local player + lplayer->applyControl(dtime_part, this); + // Apply physics if (!free_move && !is_climbing) { // Gravity @@ -320,21 +323,8 @@ // Step object cao->step(dtime, this); - if (update_lighting) { - // Update lighting - u8 light = 0; - bool pos_ok; - - // Get node at head - v3s16 p = cao->getLightPosition(); - MapNode n = this->m_map->getNode(p, &pos_ok); - if (pos_ok) - light = n.getLightBlend(day_night_ratio, m_client->ndef()); - else - light = blend_light(day_night_ratio, LIGHT_SUN, 0); - - cao->updateLight(light); - } + if (update_lighting) + cao->updateLight(day_night_ratio); }; m_ao_manager.step(dtime, cb_state); @@ -402,18 +392,7 @@ object->addToScene(m_texturesource); // Update lighting immediately - u8 light = 0; - bool pos_ok; - - // Get node at head - v3s16 p = object->getLightPosition(); - MapNode n = m_map->getNode(p, &pos_ok); - if (pos_ok) - light = n.getLightBlend(getDayNightRatio(), m_client->ndef()); - else - light = blend_light(getDayNightRatio(), LIGHT_SUN, 0); - - object->updateLight(light); + object->updateLight(getDayNightRatio()); return object->getId(); } @@ -450,7 +429,7 @@ // Object initialized: if ((obj = getActiveObject(new_id))) { // Final step is to update all children which are already known - // Data provided by GENERIC_CMD_SPAWN_INFANT + // Data provided by AO_CMD_SPAWN_INFANT const auto &children = obj->getAttachmentChildIds(); for (auto c_id : children) { if (auto *o = getActiveObject(c_id)) diff -Nru minetest-5.2.0/src/client/clientevent.h minetest-5.3.0/src/client/clientevent.h --- minetest-5.2.0/src/client/clientevent.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/clientevent.h 2020-07-09 21:13:21.000000000 +0000 @@ -21,8 +21,13 @@ #include #include "irrlichttypes_bloated.h" -#include "hud.h" -#include "skyparams.h" + +struct ParticleParameters; +struct ParticleSpawnerParameters; +struct SkyboxParams; +struct SunParams; +struct MoonParams; +struct StarParams; enum ClientEventType : u8 { @@ -77,44 +82,12 @@ } show_formspec; // struct{ //} textures_updated; + ParticleParameters *spawn_particle; struct { - v3f *pos; - v3f *vel; - v3f *acc; - f32 expirationtime; - f32 size; - bool collisiondetection; - bool collision_removal; - bool object_collision; - bool vertical; - std::string *texture; - struct TileAnimationParams animation; - u8 glow; - } spawn_particle; - struct - { - u16 amount; - f32 spawntime; - v3f *minpos; - v3f *maxpos; - v3f *minvel; - v3f *maxvel; - v3f *minacc; - v3f *maxacc; - f32 minexptime; - f32 maxexptime; - f32 minsize; - f32 maxsize; - bool collisiondetection; - bool collision_removal; - bool object_collision; + ParticleSpawnerParameters *p; u16 attached_id; - bool vertical; - std::string *texture; u64 id; - struct TileAnimationParams animation; - u8 glow; } add_particlespawner; struct { @@ -136,6 +109,7 @@ v3f *world_pos; v2s32 *size; s16 z_index; + std::string *text2; } hudadd; struct { diff -Nru minetest-5.2.0/src/client/client.h minetest-5.3.0/src/client/client.h --- minetest-5.2.0/src/client/client.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/client.h 2020-07-09 21:13:21.000000000 +0000 @@ -82,34 +82,24 @@ void add(u16 command) { - std::map::iterator n = m_packets.find(command); - if(n == m_packets.end()) - { + auto n = m_packets.find(command); + if (n == m_packets.end()) m_packets[command] = 1; - } else - { n->second++; - } } void clear() { - for (auto &m_packet : m_packets) { - m_packet.second = 0; - } + m_packets.clear(); } - void print(std::ostream &o) - { - for (const auto &m_packet : m_packets) { - o << "cmd "<< m_packet.first <<" count "<< m_packet.second << std::endl; - } - } + u32 sum() const; + void print(std::ostream &o) const; private: // command, count - std::map m_packets; + std::map m_packets; }; class ClientScripting; @@ -232,6 +222,7 @@ void handleCommand_FormspecPrepend(NetworkPacket *pkt); void handleCommand_CSMRestrictionFlags(NetworkPacket *pkt); void handleCommand_PlayerSpeed(NetworkPacket *pkt); + void handleCommand_MediaPush(NetworkPacket *pkt); void ProcessData(NetworkPacket *pkt); @@ -386,7 +377,8 @@ // The following set of functions is used by ClientMediaDownloader // Insert a media file appropriately into the appropriate manager - bool loadMedia(const std::string &data, const std::string &filename); + bool loadMedia(const std::string &data, const std::string &filename, + bool from_media_push = false); // Send a request for conventional media transfer void request_media(const std::vector &file_requests); @@ -498,6 +490,7 @@ Camera *m_camera = nullptr; Minimap *m_minimap = nullptr; bool m_minimap_disabled_by_server = false; + // Server serialization version u8 m_server_ser_ver; @@ -539,7 +532,6 @@ AuthMechanism m_chosen_auth_mech; void *m_auth_data = nullptr; - bool m_access_denied = false; bool m_access_denied_reconnect = false; std::string m_access_denied_reason = ""; @@ -548,7 +540,10 @@ bool m_nodedef_received = false; bool m_activeobjects_received = false; bool m_mods_loaded = false; + ClientMediaDownloader *m_media_downloader; + // Set of media filenames pushed by server at runtime + std::unordered_set m_media_pushed_files; // time_of_day speed approximation for old protocol bool m_time_of_day_set = false; diff -Nru minetest-5.2.0/src/client/clientlauncher.cpp minetest-5.3.0/src/client/clientlauncher.cpp --- minetest-5.2.0/src/client/clientlauncher.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/clientlauncher.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -105,7 +105,7 @@ } RenderingEngine::get_instance()->setupTopLevelWindow(PROJECT_NAME_C); - + /* This changes the minimum allowed number of vertices in a VBO. Default is 500. diff -Nru minetest-5.2.0/src/client/clientmedia.cpp minetest-5.3.0/src/client/clientmedia.cpp --- minetest-5.2.0/src/client/clientmedia.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/clientmedia.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -35,6 +35,15 @@ return porting::path_cache + DIR_DELIM + "media"; } +bool clientMediaUpdateCache(const std::string &raw_hash, const std::string &filedata) +{ + FileCache media_cache(getMediaCacheDir()); + std::string sha1_hex = hex_encode(raw_hash); + if (!media_cache.exists(sha1_hex)) + return media_cache.update(sha1_hex, filedata); + return true; +} + /* ClientMediaDownloader */ @@ -559,7 +568,6 @@ return true; } - /* Minetest Hashset File Format diff -Nru minetest-5.2.0/src/client/clientmedia.h minetest-5.3.0/src/client/clientmedia.h --- minetest-5.2.0/src/client/clientmedia.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/clientmedia.h 2020-07-09 21:13:21.000000000 +0000 @@ -33,6 +33,11 @@ #define MTHASHSET_FILE_SIGNATURE 0x4d544853 // 'MTHS' #define MTHASHSET_FILE_NAME "index.mth" +// Store file into media cache (unless it exists already) +// Validating the hash is responsibility of the caller +bool clientMediaUpdateCache(const std::string &raw_hash, + const std::string &filedata); + class ClientMediaDownloader { public: diff -Nru minetest-5.2.0/src/client/clientobject.h minetest-5.3.0/src/client/clientobject.h --- minetest-5.2.0/src/client/clientobject.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/clientobject.h 2020-07-09 21:13:21.000000000 +0000 @@ -41,10 +41,9 @@ virtual void addToScene(ITextureSource *tsrc) {} virtual void removeFromScene(bool permanent) {} - // 0 <= light_at_pos <= LIGHT_SUN - virtual void updateLight(u8 light_at_pos) {} - virtual void updateLightNoCheck(u8 light_at_pos) {} - virtual v3s16 getLightPosition() { return v3s16(0, 0, 0); } + + virtual void updateLight(u32 day_night_ratio) {} + virtual bool getCollisionBox(aabb3f *toset) const { return false; } virtual bool getSelectionBox(aabb3f *toset) const { return false; } virtual bool collideWithObjects() const { return false; } diff -Nru minetest-5.2.0/src/client/clientsimpleobject.h minetest-5.3.0/src/client/clientsimpleobject.h --- minetest-5.2.0/src/client/clientsimpleobject.h 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/client/clientsimpleobject.h 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,35 @@ +/* +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 "irrlichttypes_bloated.h" +class ClientEnvironment; + +class ClientSimpleObject +{ +protected: +public: + bool m_to_be_removed = false; + + ClientSimpleObject() = default; + virtual ~ClientSimpleObject() = default; + + virtual void step(float dtime) {} +}; diff -Nru minetest-5.2.0/src/client/content_cao.cpp minetest-5.3.0/src/client/content_cao.cpp --- minetest-5.2.0/src/client/content_cao.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/content_cao.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -162,6 +162,15 @@ matrix.setTextureScale(txs, tys); } +// Evaluate transform chain recursively; irrlicht does not do this for us +static void updatePositionRecursive(scene::ISceneNode *node) +{ + scene::ISceneNode *parent = node->getParent(); + if (parent) + updatePositionRecursive(parent); + node->updateAbsolutePosition(); +} + /* TestCAO */ @@ -181,8 +190,7 @@ void addToScene(ITextureSource *tsrc); void removeFromScene(bool permanent); - void updateLight(u8 light_at_pos); - v3s16 getLightPosition(); + void updateLight(u32 day_night_ratio); void updateNodePos(); void step(float dtime, ClientEnvironment *env); @@ -254,13 +262,8 @@ m_node = NULL; } -void TestCAO::updateLight(u8 light_at_pos) -{ -} - -v3s16 TestCAO::getLightPosition() +void TestCAO::updateLight(u32 day_night_ratio) { - return floatToInt(m_position, BS); } void TestCAO::updateNodePos() @@ -304,7 +307,6 @@ GenericCAO */ -#include "genericobject.h" #include "clientobject.h" GenericCAO::GenericCAO(Client *client, ClientEnvironment *env): @@ -476,6 +478,7 @@ parent->addAttachmentChild(m_id); } + updateAttachments(); } @@ -576,16 +579,23 @@ m_visuals_expired = false; - if (!m_prop.is_visible) { + if (!m_prop.is_visible) return; - } + + infostream << "GenericCAO::addToScene(): " << m_prop.visual << std::endl; if (m_enable_shaders) { IShaderSource *shader_source = m_client->getShaderSource(); - u32 shader_id = shader_source->getShader( - "object_shader", - TILE_MATERIAL_BASIC, - NDT_NORMAL); + MaterialType material_type; + + if (m_prop.shaded && m_prop.glow == 0) + material_type = (m_prop.use_texture_alpha) ? + TILE_MATERIAL_ALPHA : TILE_MATERIAL_BASIC; + else + material_type = (m_prop.use_texture_alpha) ? + TILE_MATERIAL_PLAIN_ALPHA : TILE_MATERIAL_PLAIN; + + u32 shader_id = shader_source->getShader("object_shader", material_type, NDT_NORMAL); m_material_type = shader_source->getShaderInfo(shader_id).material; } else { m_material_type = (m_prop.use_texture_alpha) ? @@ -593,7 +603,6 @@ } auto grabMatrixNode = [this] { - infostream << "GenericCAO::addToScene(): " << m_prop.visual << std::endl; m_matrixnode = RenderingEngine::get_scene_manager()-> addDummyTransformationSceneNode(); m_matrixnode->grab(); @@ -714,6 +723,8 @@ mesh->drop(); m_meshnode->setScale(m_prop.visual_size); + m_meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING, + m_prop.backface_culling); setSceneNodeMaterial(m_meshnode); } else if (m_prop.visual == "mesh") { @@ -724,6 +735,14 @@ addAnimatedMeshSceneNode(mesh, m_matrixnode); m_animated_meshnode->grab(); mesh->drop(); // The scene node took hold of it + + if (!checkMeshNormals(mesh)) { + infostream << "GenericCAO: recalculating normals for mesh " + << m_prop.mesh << std::endl; + m_smgr->getMeshManipulator()-> + recalculateNormals(mesh, true, false); + } + m_animated_meshnode->animateJoints(); // Needed for some animations m_animated_meshnode->setScale(m_prop.visual_size); @@ -775,15 +794,7 @@ if (node && m_matrixnode) node->setParent(m_matrixnode); - if (node && !m_prop.nametag.empty() && !m_is_local_player) { - // Add nametag - v3f pos; - pos.Y = m_prop.selectionbox.MaxEdge.Y + 0.3f; - m_nametag = m_client->getCamera()->addNametag(node, - m_prop.nametag, m_prop.nametag_color, - pos); - } - + updateNametag(); updateNodePos(); updateAnimation(); updateBonePosition(); @@ -791,34 +802,32 @@ setNodeLight(m_last_light); } -void GenericCAO::updateLight(u8 light_at_pos) -{ - // Don't update light of attached one - if (getParent() != NULL) { - return; - } - - updateLightNoCheck(light_at_pos); - - // Update light of all children - for (u16 i : m_attachment_child_ids) { - ClientActiveObject *obj = m_env->getActiveObject(i); - if (obj) { - obj->updateLightNoCheck(light_at_pos); - } - } -} - -void GenericCAO::updateLightNoCheck(u8 light_at_pos) +void GenericCAO::updateLight(u32 day_night_ratio) { if (m_glow < 0) return; - u8 li = decode_light(light_at_pos + m_glow); + u8 light_at_pos = 0; + bool pos_ok = false; - if (li != m_last_light) { - m_last_light = li; - setNodeLight(li); + v3s16 pos[3]; + u16 npos = getLightPosition(pos); + for (u16 i = 0; i < npos; i++) { + bool this_ok; + MapNode n = m_env->getMap().getNode(pos[i], &this_ok); + if (this_ok) { + u8 this_light = n.getLightBlend(day_night_ratio, m_client->ndef()); + light_at_pos = MYMAX(light_at_pos, this_light); + pos_ok = true; + } + } + if (!pos_ok) + light_at_pos = blend_light(day_night_ratio, LIGHT_SUN, 0); + + u8 light = decode_light(light_at_pos + m_glow); + if (light != m_last_light) { + m_last_light = light; + setNodeLight(light); } } @@ -827,24 +836,26 @@ video::SColor color(255, light, light, light); if (m_prop.visual == "wielditem" || m_prop.visual == "item") { - // Since these types of visuals are using their own shader - // they should be handled separately if (m_wield_meshnode) - m_wield_meshnode->setColor(color); - } else if (m_enable_shaders) { - scene::ISceneNode *node = getSceneNode(); - - if (node == nullptr) - return; + m_wield_meshnode->setNodeLightColor(color); + return; + } + if (m_enable_shaders) { if (m_prop.visual == "upright_sprite") { + if (!m_meshnode) + return; + scene::IMesh *mesh = m_meshnode->getMesh(); for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) { scene::IMeshBuffer *buf = mesh->getMeshBuffer(i); - video::SMaterial &material = buf->getMaterial(); - material.EmissiveColor = color; + buf->getMaterial().EmissiveColor = 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 = color; @@ -861,12 +872,49 @@ } } -v3s16 GenericCAO::getLightPosition() +u16 GenericCAO::getLightPosition(v3s16 *pos) +{ + const auto &box = m_prop.collisionbox; + pos[0] = floatToInt(m_position + box.MinEdge * BS, BS); + pos[1] = floatToInt(m_position + box.MaxEdge * BS, BS); + + // Skip center pos if it falls into the same node as Min or MaxEdge + if ((box.MaxEdge - box.MinEdge).getLengthSQ() < 3.0f) + return 2; + pos[2] = floatToInt(m_position + box.getCenter() * BS, BS); + return 3; +} + +void GenericCAO::updateNametag() { - if (m_is_player) - return floatToInt(m_position + v3f(0, 0.5 * BS, 0), BS); + if (m_is_local_player) // No nametag for local player + return; + + if (m_prop.nametag.empty()) { + // Delete nametag + if (m_nametag) { + m_client->getCamera()->removeNametag(m_nametag); + m_nametag = nullptr; + } + return; + } + + scene::ISceneNode *node = getSceneNode(); + if (!node) + return; - return floatToInt(m_position, BS); + v3f pos; + pos.Y = m_prop.selectionbox.MaxEdge.Y + 0.3f; + if (!m_nametag) { + // Add nametag + m_nametag = m_client->getCamera()->addNametag(node, + m_prop.nametag, m_prop.nametag_color, pos); + } else { + // Update nametag + m_nametag->nametag_text = m_prop.nametag; + m_nametag->nametag_color = m_prop.nametag_color; + m_nametag->nametag_pos = pos; + } } void GenericCAO::updateNodePos() @@ -1072,10 +1120,13 @@ updateTextures(m_previous_texture_modifier); } } + if (!getParent() && std::fabs(m_prop.automatic_rotate) > 0.001) { - m_rotation.Y += dtime * m_prop.automatic_rotate * 180 / M_PI; - rot_translator.val_current = m_rotation; - updateNodePos(); + // This is the child node's rotation. It is only used for automatic_rotate. + v3f local_rot = node->getRotation(); + local_rot.Y = modulo360f(local_rot.Y - dtime * core::RADTODEG * + m_prop.automatic_rotate); + node->setRotation(local_rot); } if (!getParent() && m_prop.automatic_face_movement_dir && @@ -1096,6 +1147,18 @@ rot_translator.val_current = m_rotation; updateNodePos(); } + + if (m_animated_meshnode) { + // Everything must be updated; the whole transform + // chain as well as the animated mesh node. + // Otherwise, bone attachments would be relative to + // a position that's one frame old. + if (m_matrixnode) + updatePositionRecursive(m_matrixnode); + m_animated_meshnode->updateAbsolutePosition(); + m_animated_meshnode->animateJoints(); + updateBonePosition(); + } } void GenericCAO::updateTexturePos() @@ -1360,16 +1423,53 @@ return; m_animated_meshnode->setJointMode(irr::scene::EJUOR_CONTROL); // To write positions to the mesh on render - for(std::unordered_map>::const_iterator - ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) { - std::string bone_name = (*ii).first; - v3f bone_pos = (*ii).second.X; - v3f bone_rot = (*ii).second.Y; + for (auto &it : m_bone_position) { + std::string bone_name = it.first; irr::scene::IBoneSceneNode* bone = m_animated_meshnode->getJointNode(bone_name.c_str()); - if(bone) - { - bone->setPosition(bone_pos); + if (bone) { + bone->setPosition(it.second.X); + bone->setRotation(it.second.Y); + } + } + + // search through bones to find mistakenly rotated bones due to bug in Irrlicht + for (u32 i = 0; i < m_animated_meshnode->getJointCount(); ++i) { + irr::scene::IBoneSceneNode *bone = m_animated_meshnode->getJointNode(i); + if (!bone) + continue; + + //If bone is manually positioned there is no need to perform the bug check + bool skip = false; + for (auto &it : m_bone_position) { + if (it.first == bone->getName()) { + skip = true; + break; + } + } + if (skip) + continue; + + // Workaround for Irrlicht bug + // We check each bone to see if it has been rotated ~180deg from its expected position due to a bug in Irricht + // when using EJUOR_CONTROL joint control. If the bug is detected we update the bone to the proper position + // and update the bones transformation. + v3f bone_rot = bone->getRelativeTransformation().getRotationDegrees(); + float offset = fabsf(bone_rot.X - bone->getRotation().X); + if (offset > 179.9f && offset < 180.1f) { bone->setRotation(bone_rot); + bone->updateAbsolutePosition(); + } + } + // The following is needed for set_bone_pos to propagate to + // attached objects correctly. + // Irrlicht ought to do this, but doesn't when using EJUOR_CONTROL. + for (u32 i = 0; i < m_animated_meshnode->getJointCount(); ++i) { + auto bone = m_animated_meshnode->getJointNode(i); + // Look for the root bone. + if (bone && bone->getParent() == m_animated_meshnode) { + // Update entire skeleton. + bone->updateAbsolutePositionOfAllChildren(); + break; } } } @@ -1394,15 +1494,17 @@ if (!parent) { // Detach or don't attach if (m_matrixnode) { + v3s16 camera_offset = m_env->getCameraOffset(); v3f old_pos = getPosition(); m_matrixnode->setParent(m_smgr->getRootSceneNode()); - getPosRotMatrix().setTranslation(old_pos); + getPosRotMatrix().setTranslation(old_pos - intToFloat(camera_offset, BS)); m_matrixnode->updateAbsolutePosition(); } } else // Attach { + parent->updateAttachments(); scene::ISceneNode *parent_node = parent->getSceneNode(); scene::IAnimatedMeshSceneNode *parent_animated_mesh_node = parent->getAnimatedMeshSceneNode(); @@ -1412,6 +1514,7 @@ if (m_matrixnode && parent_node) { m_matrixnode->setParent(parent_node); + parent_node->updateAbsolutePosition(); getPosRotMatrix().setTranslation(m_attachment_position); //setPitchYawRoll(getPosRotMatrix(), m_attachment_rotation); // use Irrlicht eulers instead @@ -1421,21 +1524,55 @@ } } +bool GenericCAO::visualExpiryRequired(const ObjectProperties &new_) const +{ + const ObjectProperties &old = m_prop; + /* Visuals do not need to be expired for: + * - nametag props: handled by updateNametag() + * - textures: handled by updateTextures() + * - sprite props: handled by updateTexturePos() + * - glow: handled by updateLight() + * - any other properties that do not change appearance + */ + + bool uses_legacy_texture = new_.wield_item.empty() && + (new_.visual == "wielditem" || new_.visual == "item"); + // Ordered to compare primitive types before std::vectors + return old.backface_culling != new_.backface_culling || + old.is_visible != new_.is_visible || + old.mesh != new_.mesh || + old.shaded != new_.shaded || + old.use_texture_alpha != new_.use_texture_alpha || + old.visual != new_.visual || + old.visual_size != new_.visual_size || + old.wield_item != new_.wield_item || + old.colors != new_.colors || + (uses_legacy_texture && old.textures != new_.textures); +} + void GenericCAO::processMessage(const std::string &data) { //infostream<<"GenericCAO: Got message"< 0) { m_reset_textures_timer = -1; updateTextures(m_previous_texture_modifier); } updateTextures(mod); - } else if (cmd == GENERIC_CMD_SET_SPRITE) { + } else if (cmd == AO_CMD_SET_SPRITE) { v2s16 p = readV2S16(is); int num_frames = readU16(is); float framelength = readF32(is); @@ -1511,7 +1655,7 @@ m_tx_select_horiz_by_yawpitch = select_horiz_by_yawpitch; updateTexturePos(); - } else if (cmd == GENERIC_CMD_SET_PHYSICS_OVERRIDE) { + } else if (cmd == AO_CMD_SET_PHYSICS_OVERRIDE) { float override_speed = readF32(is); float override_jump = readF32(is); float override_gravity = readF32(is); @@ -1531,7 +1675,7 @@ player->physics_override_sneak_glitch = sneak_glitch; player->physics_override_new_move = new_move; } - } else if (cmd == GENERIC_CMD_SET_ANIMATION) { + } else if (cmd == AO_CMD_SET_ANIMATION) { // TODO: change frames send as v2s32 value v2f range = readV2F32(is); if (!m_is_local_player) { @@ -1565,17 +1709,17 @@ updateAnimation(); } } - } else if (cmd == GENERIC_CMD_SET_ANIMATION_SPEED) { + } else if (cmd == AO_CMD_SET_ANIMATION_SPEED) { m_animation_speed = readF32(is); updateAnimationSpeed(); - } else if (cmd == GENERIC_CMD_SET_BONE_POSITION) { + } else if (cmd == AO_CMD_SET_BONE_POSITION) { std::string bone = deSerializeString(is); v3f position = readV3F32(is); v3f rotation = readV3F32(is); m_bone_position[bone] = core::vector2d(position, rotation); - updateBonePosition(); - } else if (cmd == GENERIC_CMD_ATTACH_TO) { + // updateBonePosition(); now called every step + } else if (cmd == AO_CMD_ATTACH_TO) { u16 parent_id = readS16(is); std::string bone = deSerializeString(is); v3f position = readV3F32(is); @@ -1586,7 +1730,7 @@ // localplayer itself can't be attached to localplayer if (!m_is_local_player) m_is_visible = !m_attached_to_local; - } else if (cmd == GENERIC_CMD_PUNCHED) { + } else if (cmd == AO_CMD_PUNCHED) { u16 result_hp = readU16(is); // Use this instead of the send damage to not interfere with prediction @@ -1607,13 +1751,11 @@ m_smgr, m_env, m_position, v2f(m_prop.visual_size.X, m_prop.visual_size.Y) * BS); m_env->addSimpleObject(simple); - } else if (m_reset_textures_timer < 0) { - // TODO: Execute defined fast response - // Flashing shall suffice as there is no definition + } else if (m_reset_textures_timer < 0 && !m_prop.damage_texture_modifier.empty()) { m_reset_textures_timer = 0.05; if(damage >= 2) m_reset_textures_timer += 0.05 * damage; - updateTextures(m_current_texture_modifier + "^[brighten"); + updateTextures(m_current_texture_modifier + m_prop.damage_texture_modifier); } } @@ -1624,7 +1766,7 @@ if (!m_is_player) clearChildAttachments(); } - } else if (cmd == GENERIC_CMD_UPDATE_ARMOR_GROUPS) { + } else if (cmd == AO_CMD_UPDATE_ARMOR_GROUPS) { m_armor_groups.clear(); int armor_groups_size = readU16(is); for(int i=0; inametag_color = m_prop.nametag_color; - v3f pos; - pos.Y = m_prop.collisionbox.MaxEdge.Y + 0.3f; - m_nametag->nametag_pos = pos; - } - } else if (cmd == GENERIC_CMD_SPAWN_INFANT) { + } else if (cmd == AO_CMD_SPAWN_INFANT) { u16 child_id = readU16(is); u8 type = readU8(is); // maybe this will be useful later (void)type; addAttachmentChild(child_id); + } else if (cmd == AO_CMD_OBSOLETE1) { + // Don't do anything and also don't log a warning } else { warningstream << FUNCTION_NAME << ": unknown command or outdated client \"" @@ -1684,13 +1818,11 @@ v2f(m_prop.visual_size.X, m_prop.visual_size.Y) * BS); m_env->addSimpleObject(simple); } - // TODO: Execute defined fast response - // Flashing shall suffice as there is no definition - if (m_reset_textures_timer < 0) { + if (m_reset_textures_timer < 0 && !m_prop.damage_texture_modifier.empty()) { m_reset_textures_timer = 0.05; if (result.damage >= 2) m_reset_textures_timer += 0.05 * result.damage; - updateTextures(m_current_texture_modifier + "^[brighten"); + updateTextures(m_current_texture_modifier + m_prop.damage_texture_modifier); } } diff -Nru minetest-5.2.0/src/client/content_cao.h minetest-5.3.0/src/client/content_cao.h --- minetest-5.2.0/src/client/content_cao.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/content_cao.h 2020-07-09 21:13:21.000000000 +0000 @@ -130,6 +130,8 @@ // Settings bool m_enable_shaders = false; + bool visualExpiryRequired(const ObjectProperties &newprops) const; + public: GenericCAO(Client *client, ClientEnvironment *env); @@ -186,10 +188,11 @@ return m_matrixnode->getRelativeTransformationMatrix(); } - inline const core::matrix4 &getAbsolutePosRotMatrix() const + inline const core::matrix4 *getAbsolutePosRotMatrix() const { - assert(m_matrixnode); - return m_matrixnode->getAbsoluteTransformation(); + if (!m_matrixnode) + return nullptr; + return &m_matrixnode->getAbsoluteTransformation(); } inline f32 getStepHeight() const @@ -234,13 +237,16 @@ m_visuals_expired = true; } - void updateLight(u8 light_at_pos); - - void updateLightNoCheck(u8 light_at_pos); + void updateLight(u32 day_night_ratio); void setNodeLight(u8 light); - v3s16 getLightPosition(); + /* Get light position(s). + * returns number of positions written into pos[], which must have space + * for at least 3 vectors. */ + u16 getLightPosition(v3s16 *pos); + + void updateNametag(); void updateNodePos(); diff -Nru minetest-5.2.0/src/client/content_mapblock.cpp minetest-5.3.0/src/client/content_mapblock.cpp --- minetest-5.2.0/src/client/content_mapblock.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/content_mapblock.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -17,6 +17,7 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include #include "content_mapblock.h" #include "util/numeric.h" #include "util/directiontables.h" @@ -366,6 +367,7 @@ void MapblockMeshGenerator::drawAutoLightedCuboid(aabb3f box, const f32 *txc, TileSpec *tiles, int tile_count) { + bool scale = std::fabs(f->visual_scale - 1.0f) > 1e-3f; f32 texture_coord_buf[24]; f32 dx1 = box.MinEdge.X; f32 dy1 = box.MinEdge.Y; @@ -373,6 +375,14 @@ f32 dx2 = box.MaxEdge.X; f32 dy2 = box.MaxEdge.Y; f32 dz2 = box.MaxEdge.Z; + if (scale) { + if (!txc) { // generate texture coords before scaling + generateCuboidTextureCoords(box, texture_coord_buf); + txc = texture_coord_buf; + } + box.MinEdge *= f->visual_scale; + box.MaxEdge *= f->visual_scale; + } box.MinEdge += origin; box.MaxEdge += origin; if (!txc) { @@ -405,8 +415,8 @@ MapNode ntop = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(p.X, p.Y + 1, p.Z)); MapNode nbottom = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(p.X, p.Y - 1, p.Z)); - c_flowing = nodedef->getId(f->liquid_alternative_flowing); - c_source = nodedef->getId(f->liquid_alternative_source); + c_flowing = f->liquid_alternative_flowing_id; + c_source = f->liquid_alternative_source_id; top_is_same_liquid = (ntop.getContent() == c_flowing) || (ntop.getContent() == c_source); draw_liquid_bottom = (nbottom.getContent() != c_flowing) && (nbottom.getContent() != c_source); if (draw_liquid_bottom) { @@ -512,8 +522,7 @@ return 0; } -void MapblockMeshGenerator::drawLiquidSides() -{ +namespace { struct LiquidFaceDesc { v3s16 dir; // XZ v3s16 p[2]; // XZ only; 1 means +, 0 means - @@ -521,20 +530,23 @@ struct UV { int u, v; }; - static const LiquidFaceDesc base_faces[4] = { + static const LiquidFaceDesc liquid_base_faces[4] = { {v3s16( 1, 0, 0), {v3s16(1, 0, 1), v3s16(1, 0, 0)}}, {v3s16(-1, 0, 0), {v3s16(0, 0, 0), v3s16(0, 0, 1)}}, {v3s16( 0, 0, 1), {v3s16(0, 0, 1), v3s16(1, 0, 1)}}, {v3s16( 0, 0, -1), {v3s16(1, 0, 0), v3s16(0, 0, 0)}}, }; - static const UV base_vertices[4] = { + static const UV liquid_base_vertices[4] = { {0, 1}, {1, 1}, {1, 0}, {0, 0} }; +} - for (const auto &face : base_faces) { +void MapblockMeshGenerator::drawLiquidSides() +{ + for (const auto &face : liquid_base_faces) { const NeighborData &neighbor = liquid_neighbors[face.dir.Z + 1][face.dir.X + 1]; // No face between nodes of the same liquid, unless there is node @@ -554,7 +566,7 @@ video::S3DVertex vertices[4]; for (int j = 0; j < 4; j++) { - const UV &vertex = base_vertices[j]; + const UV &vertex = liquid_base_vertices[j]; const v3s16 &base = face.p[vertex.u]; float v = vertex.v; @@ -1193,15 +1205,14 @@ (def2.getGroup(raillike_groupname) == raillike_group)); } -void MapblockMeshGenerator::drawRaillikeNode() -{ - static const v3s16 direction[4] = { +namespace { + static const v3s16 rail_direction[4] = { v3s16( 0, 0, 1), v3s16( 0, 0, -1), v3s16(-1, 0, 0), v3s16( 1, 0, 0), }; - static const int slope_angle[4] = {0, 180, 90, -90}; + static const int rail_slope_angle[4] = {0, 180, 90, -90}; enum RailTile { straight, @@ -1214,8 +1225,8 @@ int angle; }; static const RailDesc rail_kinds[16] = { - // +x -x -z +z - //------------- + // +x -x -z +z + //------------- {straight, 0}, // . . . . {straight, 0}, // . . . +Z {straight, 0}, // . . -Z . @@ -1233,7 +1244,10 @@ {junction, 270}, // +X -X -Z . { cross, 0}, // +X -X -Z +Z }; +} +void MapblockMeshGenerator::drawRaillikeNode() +{ raillike_group = nodedef->get(n).getGroup(raillike_groupname); int code = 0; @@ -1241,14 +1255,14 @@ int tile_index; bool sloped = false; for (int dir = 0; dir < 4; dir++) { - bool rail_above = isSameRail(direction[dir] + v3s16(0, 1, 0)); + bool rail_above = isSameRail(rail_direction[dir] + v3s16(0, 1, 0)); if (rail_above) { sloped = true; - angle = slope_angle[dir]; + angle = rail_slope_angle[dir]; } if (rail_above || - isSameRail(direction[dir]) || - isSameRail(direction[dir] + v3s16(0, -1, 0))) + isSameRail(rail_direction[dir]) || + isSameRail(rail_direction[dir] + v3s16(0, -1, 0))) code |= 1 << dir; } @@ -1276,9 +1290,8 @@ drawQuad(vertices); } -void MapblockMeshGenerator::drawNodeboxNode() -{ - static const v3s16 tile_dirs[6] = { +namespace { + static const v3s16 nodebox_tile_dirs[6] = { v3s16(0, 1, 0), v3s16(0, -1, 0), v3s16(1, 0, 0), @@ -1288,7 +1301,7 @@ }; // we have this order for some reason... - static const v3s16 connection_dirs[6] = { + static const v3s16 nodebox_connection_dirs[6] = { v3s16( 0, 1, 0), // top v3s16( 0, -1, 0), // bottom v3s16( 0, 0, -1), // front @@ -1296,19 +1309,22 @@ v3s16( 0, 0, 1), // back v3s16( 1, 0, 0), // right }; +} +void MapblockMeshGenerator::drawNodeboxNode() +{ TileSpec tiles[6]; for (int face = 0; face < 6; face++) { // Handles facedir rotation for textures - getTile(tile_dirs[face], &tiles[face]); + getTile(nodebox_tile_dirs[face], &tiles[face]); } // locate possible neighboring nodes to connect to - int neighbors_set = 0; + u8 neighbors_set = 0; if (f->node_box.type == NODEBOX_CONNECTED) { for (int dir = 0; dir != 6; dir++) { - int flag = 1 << dir; - v3s16 p2 = blockpos_nodes + p + connection_dirs[dir]; + u8 flag = 1 << dir; + v3s16 p2 = blockpos_nodes + p + nodebox_connection_dirs[dir]; MapNode n2 = data->m_vmanip.getNodeNoEx(p2); if (nodedef->nodeboxConnects(n, n2, flag)) neighbors_set |= flag; @@ -1317,7 +1333,7 @@ std::vector boxes; n.getNodeBoxes(nodedef, &boxes, neighbors_set); - for (const auto &box : boxes) + for (auto &box : boxes) drawAutoLightedCuboid(box, nullptr, tiles, 6); } diff -Nru minetest-5.2.0/src/client/filecache.cpp minetest-5.3.0/src/client/filecache.cpp --- minetest-5.2.0/src/client/filecache.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/filecache.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -82,8 +82,16 @@ std::string path = m_dir + DIR_DELIM + name; return updateByPath(path, data); } + bool FileCache::load(const std::string &name, std::ostream &os) { std::string path = m_dir + DIR_DELIM + name; return loadByPath(path, os); } + +bool FileCache::exists(const std::string &name) +{ + std::string path = m_dir + DIR_DELIM + name; + std::ifstream fis(path.c_str(), std::ios_base::binary); + return fis.good(); +} diff -Nru minetest-5.2.0/src/client/filecache.h minetest-5.3.0/src/client/filecache.h --- minetest-5.2.0/src/client/filecache.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/filecache.h 2020-07-09 21:13:21.000000000 +0000 @@ -33,6 +33,7 @@ bool update(const std::string &name, const std::string &data); bool load(const std::string &name, std::ostream &os); + bool exists(const std::string &name); private: std::string m_dir; diff -Nru minetest-5.2.0/src/client/fontengine.cpp minetest-5.3.0/src/client/fontengine.cpp --- minetest-5.2.0/src/client/fontengine.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/fontengine.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -239,7 +239,7 @@ FATAL_ERROR_IF(font == NULL, "Could not create/get font"); u32 text_height = font->getDimension(L"Hello, world!").Height; - infostream << "text_height=" << text_height << std::endl; + infostream << "FontEngine: measured text_height=" << text_height << std::endl; } /******************************************************************************/ diff -Nru minetest-5.2.0/src/client/game.cpp minetest-5.3.0/src/client/game.cpp --- minetest-5.2.0/src/client/game.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/game.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -266,6 +266,7 @@ public: bool makes_footstep_sound; float m_player_step_timer; + float m_player_jump_timer; SimpleSoundSpec m_player_step_sound; SimpleSoundSpec m_player_leftpunch_sound; @@ -275,7 +276,8 @@ m_sound(sound), m_ndef(ndef), makes_footstep_sound(true), - m_player_step_timer(0) + m_player_step_timer(0.0f), + m_player_jump_timer(0.0f) { } @@ -288,6 +290,14 @@ } } + void playPlayerJump() + { + if (m_player_jump_timer <= 0.0f) { + m_player_jump_timer = 0.2f; + m_sound->playSound(SimpleSoundSpec("player_jump", 0.5f), false); + } + } + static void viewBobbingStep(MtEvent *e, void *data) { SoundMaker *sm = (SoundMaker *)data; @@ -302,7 +312,8 @@ static void playerJump(MtEvent *e, void *data) { - //SoundMaker *sm = (SoundMaker*)data; + SoundMaker *sm = (SoundMaker *)data; + sm->playPlayerJump(); } static void cameraPunchLeft(MtEvent *e, void *data) @@ -351,6 +362,7 @@ void step(float dtime) { m_player_step_timer -= dtime; + m_player_jump_timer -= dtime; } }; @@ -843,6 +855,7 @@ SoundMaker *soundmaker = nullptr; ChatBackend *chat_backend = nullptr; + LogOutputBuffer m_chat_log_buf; EventManager *eventmgr = nullptr; QuicktuneShortcutter *quicktune = nullptr; @@ -914,6 +927,7 @@ }; Game::Game() : + m_chat_log_buf(g_logger), m_game_ui(new GameUI()) { g_settings->registerChangedCallback("doubletap_jump", @@ -1043,7 +1057,7 @@ m_invert_mouse = g_settings->getBool("invert_mouse"); m_first_loop_after_window_activation = true; - g_translations->clear(); + g_client_translations->clear(); if (!init(map_dir, address, port, gamespec)) return false; @@ -1159,6 +1173,10 @@ if (formspec) formspec->quitMenu(); +#ifdef HAVE_TOUCHSCREENGUI + g_touchscreengui->hide(); +#endif + showOverlayMessage(N_("Shutting down..."), 0, 0, false); if (clouds) @@ -1180,6 +1198,7 @@ chat_backend->addMessage(L"", L"# Disconnected."); chat_backend->addMessage(L"", L""); + m_chat_log_buf.clear(); if (client) { client->Stop(); @@ -1237,7 +1256,7 @@ bool Game::initSound() { #if USE_SOUND - if (g_settings->getBool("enable_sound")) { + if (g_settings->getBool("enable_sound") && g_sound_manager_singleton.get()) { infostream << "Attempting to use OpenAL audio" << std::endl; sound = createOpenALSoundManager(g_sound_manager_singleton.get(), &soundfetcher); if (!sound) @@ -1290,7 +1309,6 @@ } server = new Server(map_dir, gamespec, simple_singleplayer_mode, bind_addr, false); - server->init(); server->start(); return true; @@ -1407,8 +1425,11 @@ } mapper = client->getMinimap(); - if (mapper) + if (mapper) { mapper->setMinimapMode(MINIMAP_MODE_OFF); + if (client->modsLoaded()) + client->getScript()->on_minimap_ready(mapper); + } return true; } @@ -1553,7 +1574,8 @@ } else { registration_confirmation_shown = true; (new GUIConfirmRegistration(guienv, guienv->getRootGUIElement(), -1, - &g_menumgr, client, playername, password, connection_aborted))->drop(); + &g_menumgr, client, playername, password, + connection_aborted, texture_src))->drop(); } } else { wait_time += dtime; @@ -1708,19 +1730,19 @@ if (g_gamecallback->changepassword_requested) { (new GUIPasswordChange(guienv, guiroot, -1, - &g_menumgr, client))->drop(); + &g_menumgr, client, texture_src))->drop(); g_gamecallback->changepassword_requested = false; } if (g_gamecallback->changevolume_requested) { (new GUIVolumeChange(guienv, guiroot, -1, - &g_menumgr))->drop(); + &g_menumgr, texture_src))->drop(); g_gamecallback->changevolume_requested = false; } if (g_gamecallback->keyconfig_requested) { (new GUIKeyChangeMenu(guienv, guiroot, -1, - &g_menumgr))->drop(); + &g_menumgr, texture_src))->drop(); g_gamecallback->keyconfig_requested = false; } @@ -1906,29 +1928,47 @@ toggleFast(); } else if (wasKeyDown(KeyType::NOCLIP)) { toggleNoClip(); +#if USE_SOUND } else if (wasKeyDown(KeyType::MUTE)) { - bool new_mute_sound = !g_settings->getBool("mute_sound"); - g_settings->setBool("mute_sound", new_mute_sound); - if (new_mute_sound) - m_game_ui->showTranslatedStatusText("Sound muted"); - else - m_game_ui->showTranslatedStatusText("Sound unmuted"); + if (g_settings->getBool("enable_sound")) { + bool new_mute_sound = !g_settings->getBool("mute_sound"); + g_settings->setBool("mute_sound", new_mute_sound); + if (new_mute_sound) + m_game_ui->showTranslatedStatusText("Sound muted"); + else + m_game_ui->showTranslatedStatusText("Sound unmuted"); + } else { + m_game_ui->showTranslatedStatusText("Sound system is disabled"); + } } else if (wasKeyDown(KeyType::INC_VOLUME)) { - float new_volume = rangelim(g_settings->getFloat("sound_volume") + 0.1f, 0.0f, 1.0f); - wchar_t buf[100]; - g_settings->setFloat("sound_volume", new_volume); - const wchar_t *str = wgettext("Volume changed to %d%%"); - swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100)); - delete[] str; - m_game_ui->showStatusText(buf); + if (g_settings->getBool("enable_sound")) { + float new_volume = rangelim(g_settings->getFloat("sound_volume") + 0.1f, 0.0f, 1.0f); + wchar_t buf[100]; + g_settings->setFloat("sound_volume", new_volume); + const wchar_t *str = wgettext("Volume changed to %d%%"); + swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100)); + delete[] str; + m_game_ui->showStatusText(buf); + } else { + m_game_ui->showTranslatedStatusText("Sound system is disabled"); + } } else if (wasKeyDown(KeyType::DEC_VOLUME)) { - float new_volume = rangelim(g_settings->getFloat("sound_volume") - 0.1f, 0.0f, 1.0f); - wchar_t buf[100]; - g_settings->setFloat("sound_volume", new_volume); - const wchar_t *str = wgettext("Volume changed to %d%%"); - swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100)); - delete[] str; - m_game_ui->showStatusText(buf); + if (g_settings->getBool("enable_sound")) { + float new_volume = rangelim(g_settings->getFloat("sound_volume") - 0.1f, 0.0f, 1.0f); + wchar_t buf[100]; + g_settings->setFloat("sound_volume", new_volume); + const wchar_t *str = wgettext("Volume changed to %d%%"); + swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100)); + delete[] str; + m_game_ui->showStatusText(buf); + } else { + m_game_ui->showTranslatedStatusText("Sound system is disabled"); + } +#else + } else if (wasKeyDown(KeyType::MUTE) || wasKeyDown(KeyType::INC_VOLUME) + || wasKeyDown(KeyType::DEC_VOLUME)) { + m_game_ui->showTranslatedStatusText("Sound system is not supported on this build"); +#endif } else if (wasKeyDown(KeyType::CINEMATIC)) { toggleCinematic(); } else if (wasKeyDown(KeyType::SCREENSHOT)) { @@ -2010,7 +2050,6 @@ for (u16 i = 0; i <= max_item; i++) { if (wasKeyDown((GameKeyType) (KeyType::SLOT_1 + i))) { *new_playeritem = i; - infostream << "Selected item: " << new_playeritem << std::endl; break; } } @@ -2039,7 +2078,7 @@ if (!player || !player->getCAO()) return; - infostream << "the_game: " << "Launching inventory" << std::endl; + infostream << "Game: Launching inventory" << std::endl; PlayerInventoryFormSource *fs_src = new PlayerInventoryFormSource(client); @@ -2451,7 +2490,7 @@ input->joystick.getAxisWithoutDead(JA_FORWARD_MOVE) ); - u32 keypress_bits = + u32 keypress_bits = ( ( (u32)(isKeyDown(KeyType::FORWARD) & 0x1) << 0) | ( (u32)(isKeyDown(KeyType::BACKWARD) & 0x1) << 1) | ( (u32)(isKeyDown(KeyType::LEFT) & 0x1) << 2) | @@ -2460,7 +2499,8 @@ ( (u32)(isKeyDown(KeyType::SPECIAL1) & 0x1) << 5) | ( (u32)(isKeyDown(KeyType::SNEAK) & 0x1) << 6) | ( (u32)(input->getLeftState() & 0x1) << 7) | - ( (u32)(input->getRightState() & 0x1) << 8 + ( (u32)(input->getRightState() & 0x1) << 8) | + ( (u32)(isKeyDown(KeyType::ZOOM) & 0x1) << 9) ); #ifdef ANDROID @@ -2640,6 +2680,7 @@ delete event->hudadd.offset; delete event->hudadd.world_pos; delete event->hudadd.size; + delete event->hudadd.text2; return; } @@ -2657,6 +2698,7 @@ e->world_pos = *event->hudadd.world_pos; e->size = *event->hudadd.size; e->z_index = event->hudadd.z_index; + e->text2 = *event->hudadd.text2; hud_server_to_client[server_id] = player->addHud(e); delete event->hudadd.pos; @@ -2667,6 +2709,7 @@ delete event->hudadd.offset; delete event->hudadd.world_pos; delete event->hudadd.size; + delete event->hudadd.text2; } void Game::handleClientEvent_HudRemove(ClientEvent *event, CameraOrientation *cam) @@ -2739,6 +2782,10 @@ case HUD_STAT_Z_INDEX: e->z_index = event->hudchange.data; break; + + case HUD_STAT_TEXT2: + e->text2 = *event->hudchange.sdata; + break; } delete event->hudchange.v3fdata; @@ -2764,11 +2811,11 @@ // Shows the mesh skybox sky->setVisible(true); // Update mesh based skybox colours if applicable. - sky->setSkyColors(*event->set_sky); + sky->setSkyColors(event->set_sky->sky_color); sky->setHorizonTint( - event->set_sky->sun_tint, - event->set_sky->moon_tint, - event->set_sky->tint_type + event->set_sky->fog_sun_tint, + event->set_sky->fog_moon_tint, + event->set_sky->fog_tint_type ); } else if (event->set_sky->type == "skybox" && event->set_sky->textures.size() == 6) { @@ -2778,9 +2825,9 @@ sky->setFallbackBgColor(event->set_sky->bgcolor); // Set sunrise and sunset fog tinting: sky->setHorizonTint( - event->set_sky->sun_tint, - event->set_sky->moon_tint, - event->set_sky->tint_type + event->set_sky->fog_sun_tint, + event->set_sky->fog_moon_tint, + event->set_sky->fog_tint_type ); // Add textures to skybox. for (int i = 0; i < 6; i++) @@ -2864,18 +2911,9 @@ void Game::updateChat(f32 dtime, const v2u32 &screensize) { - // Add chat log output for errors to be shown in chat - static LogOutputBuffer chat_log_error_buf(g_logger, LL_ERROR); - // Get new messages from error log buffer - while (!chat_log_error_buf.empty()) { - std::wstring error_message = utf8_to_wide(chat_log_error_buf.get()); - if (!g_settings->getBool("disable_escape_sequences")) { - error_message.insert(0, L"\x1b(c@red)"); - error_message.append(L"\x1b(c@white)"); - } - chat_backend->addMessage(L"", error_message); - } + while (!m_chat_log_buf.empty()) + chat_backend->addMessage(L"", utf8_to_wide(m_chat_log_buf.get())); // Get new messages from client std::wstring message; @@ -2996,16 +3034,8 @@ { LocalPlayer *player = client->getEnv().getLocalPlayer(); - v3f player_position = player->getPosition(); - v3f player_eye_position = player->getEyePosition(); - v3f camera_position = camera->getPosition(); - v3f camera_direction = camera->getDirection(); - v3s16 camera_offset = camera->getOffset(); - - if (camera->getCameraMode() == CAMERA_MODE_FIRST) - player_eye_position += player->eye_offset_first; - else - player_eye_position += player->eye_offset_third; + const v3f camera_direction = camera->getDirection(); + const v3s16 camera_offset = camera->getOffset(); /* Calculate what block is the crosshair pointing to @@ -3019,13 +3049,22 @@ core::line3d shootline; - if (camera->getCameraMode() != CAMERA_MODE_THIRD_FRONT) { - shootline = core::line3d(player_eye_position, - player_eye_position + camera_direction * BS * d); - } else { + switch (camera->getCameraMode()) { + case CAMERA_MODE_FIRST: + // Shoot from camera position, with bobbing + shootline.start = camera->getPosition(); + break; + case CAMERA_MODE_THIRD: + // Shoot from player head, no bobbing + shootline.start = camera->getHeadPosition(); + break; + case CAMERA_MODE_THIRD_FRONT: + shootline.start = camera->getHeadPosition(); // prevent player pointing anything in front-view - shootline = core::line3d(camera_position, camera_position); + d = 0; + break; } + shootline.end = shootline.start + camera_direction * BS * d; #ifdef HAVE_TOUCHSCREENGUI @@ -3112,6 +3151,7 @@ } else if (pointed.type == POINTEDTHING_NODE) { handlePointingAtNode(pointed, selected_item, hand_item, dtime); } else if (pointed.type == POINTEDTHING_OBJECT) { + v3f player_position = player->getPosition(); handlePointingAtObject(pointed, tool_item, player_position, show_debug); } else if (input->getLeftState()) { // When button is held down in air, show continuous animation @@ -4147,8 +4187,12 @@ } #ifndef __ANDROID__ - os << "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;" - << strgettext("Sound Volume") << "]"; +#if USE_SOUND + if (g_settings->getBool("enable_sound")) { + os << "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;" + << strgettext("Sound Volume") << "]"; + } +#endif os << "button_exit[4," << (ypos++) << ";3,0.5;btn_key_config;" << strgettext("Change Keys") << "]"; #endif @@ -4245,7 +4289,6 @@ reconnect_requested, &chat_backend, gamespec, simple_singleplayer_mode)) { game.run(); - game.shutdown(); } } catch (SerializationError &e) { @@ -4261,4 +4304,5 @@ strgettext("\nCheck debug.txt for details."); errorstream << error_message << std::endl; } + game.shutdown(); } diff -Nru minetest-5.2.0/src/client/gameui.cpp minetest-5.3.0/src/client/gameui.cpp --- minetest-5.2.0/src/client/gameui.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/gameui.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -76,6 +76,11 @@ m_guitext_chat = gui::StaticText::add(guienv, L"", core::rect(0, 0, 0, 0), //false, false); // Disable word wrap as of now false, true, guiroot); + u16 chat_font_size = g_settings->getU16("chat_font_size"); + if (chat_font_size != 0) { + m_guitext_chat->setOverrideFont(g_fontengine->getFont( + chat_font_size, FM_Unspecified)); + } // Profiler text (size is updated when text is updated) m_guitext_profiler = gui::StaticText::add(guienv, L"", @@ -128,9 +133,9 @@ << "pos: (" << (player_position.X / BS) << ", " << (player_position.Y / BS) << ", " << (player_position.Z / BS) - << ") | yaw: " << (wrapDegrees_0_360(cam.camera_yaw)) << "° " + << ") | yaw: " << (wrapDegrees_0_360(cam.camera_yaw)) << "\xC2\xB0 " << yawToDirectionString(cam.camera_yaw) - << " | pitch: " << (-wrapDegrees_180(cam.camera_pitch)) << "°" + << " | pitch: " << (-wrapDegrees_180(cam.camera_pitch)) << "\xC2\xB0" << " | seed: " << ((u64)client->getMapSeed()); if (pointed_old.type == POINTEDTHING_NODE) { @@ -213,7 +218,6 @@ void GameUI::setChatText(const EnrichedString &chat_text, u32 recent_chat_count) { - setStaticText(m_guitext_chat, chat_text); // Update gui element size and position s32 chat_y = 5; @@ -221,16 +225,15 @@ if (m_flags.show_debug) chat_y += 2 * g_fontengine->getLineHeight(); - // first pass to calculate height of text to be set const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize(); - s32 width = std::min(g_fontengine->getTextWidth(chat_text.c_str()) + 10, - window_size.X - 20); - m_guitext_chat->setRelativePosition(core::rect(10, chat_y, width, - chat_y + window_size.Y)); - - // now use real height of text and adjust rect according to this size - m_guitext_chat->setRelativePosition(core::rect(10, chat_y, width, - chat_y + m_guitext_chat->getTextHeight())); + + core::rect chat_size(10, chat_y, + window_size.X - 20, 0); + chat_size.LowerRightCorner.Y = std::min((s32)window_size.Y, + m_guitext_chat->getTextHeight() + chat_y); + + m_guitext_chat->setRelativePosition(chat_size); + setStaticText(m_guitext_chat, chat_text); m_recent_chat_count = recent_chat_count; } diff -Nru minetest-5.2.0/src/client/hud.cpp minetest-5.3.0/src/client/hud.cpp --- minetest-5.2.0/src/client/hud.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/hud.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -51,6 +51,7 @@ this->inventory = inventory; m_hud_scaling = g_settings->getFloat("hud_scaling"); + m_scale_factor = m_hud_scaling * RenderingEngine::getDisplayDensity(); m_hotbar_imagesize = std::floor(HOTBAR_IMAGE_SIZE * RenderingEngine::getDisplayDensity() + 0.5f); m_hotbar_imagesize *= m_hud_scaling; @@ -213,9 +214,7 @@ } // Position of upper left corner of bar - v2s32 pos = screen_offset; - pos.X *= m_hud_scaling * RenderingEngine::getDisplayDensity(); - pos.Y *= m_hud_scaling * RenderingEngine::getDisplayDensity(); + v2s32 pos = screen_offset * m_scale_factor; pos += upperleftpos; // Store hotbar_image in member variable, used by drawItem() @@ -272,6 +271,25 @@ } } +// Calculates screen position of waypoint. Returns true if waypoint is visible (in front of the player), else false. +bool Hud::calculateScreenPos(const v3s16 &camera_offset, HudElement *e, v2s32 *pos) +{ + v3f w_pos = e->world_pos * BS; + scene::ICameraSceneNode* camera = + RenderingEngine::get_scene_manager()->getActiveCamera(); + w_pos -= intToFloat(camera_offset, BS); + core::matrix4 trans = camera->getProjectionMatrix(); + trans *= camera->getViewMatrix(); + f32 transformed_pos[4] = { w_pos.X, w_pos.Y, w_pos.Z, 1.0f }; + trans.multiplyWith1x4Matrix(transformed_pos); + if (transformed_pos[3] < 0) + return false; + f32 zDiv = transformed_pos[3] == 0.0f ? 1.0f : + core::reciprocal(transformed_pos[3]); + pos->X = m_screensize.X * (0.5 * transformed_pos[0] * zDiv + 0.5); + pos->Y = m_screensize.Y * (0.5 - transformed_pos[1] * zDiv * 0.5); + return true; +} void Hud::drawLuaElements(const v3s16 &camera_offset) { @@ -299,43 +317,47 @@ v2s32 pos(floor(e->pos.X * (float) m_screensize.X + 0.5), floor(e->pos.Y * (float) m_screensize.Y + 0.5)); switch (e->type) { - case HUD_ELEM_IMAGE: { - video::ITexture *texture = tsrc->getTexture(e->text); - if (!texture) - continue; - - const video::SColor color(255, 255, 255, 255); - const video::SColor colors[] = {color, color, color, color}; - core::dimension2di imgsize(texture->getOriginalSize()); - v2s32 dstsize(imgsize.Width * e->scale.X, - imgsize.Height * e->scale.Y); - if (e->scale.X < 0) - dstsize.X = m_screensize.X * (e->scale.X * -0.01); - if (e->scale.Y < 0) - dstsize.Y = m_screensize.Y * (e->scale.Y * -0.01); - 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); - rect += pos + offset + v2s32(e->offset.X, e->offset.Y); - draw2DImageFilterScaled(driver, texture, rect, - core::rect(core::position2d(0,0), imgsize), - NULL, colors, true); - break; } case HUD_ELEM_TEXT: { + irr::gui::IGUIFont *textfont = font; + unsigned int font_size = g_fontengine->getDefaultFontSize(); + + if (e->size.X > 0) + font_size *= e->size.X; + + if (font_size != g_fontengine->getDefaultFontSize()) + textfont = g_fontengine->getFont(font_size); + video::SColor color(255, (e->number >> 16) & 0xFF, (e->number >> 8) & 0xFF, (e->number >> 0) & 0xFF); - core::rect size(0, 0, e->scale.X, text_height * e->scale.Y); std::wstring text = unescape_translate(utf8_to_wide(e->text)); - core::dimension2d textsize = font->getDimension(text.c_str()); + core::dimension2d textsize = textfont->getDimension(text.c_str()); +#ifdef __ANDROID__ + // The text size on Android is not proportional with the actual scaling + irr::gui::IGUIFont *font_scaled = font_size <= 3 ? + textfont : g_fontengine->getFont(font_size - 3); + if (e->offset.X < -20) + textsize = font_scaled->getDimension(text.c_str()); +#endif v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2), (e->align.Y - 1.0) * (textsize.Height / 2)); - v2s32 offs(e->offset.X, e->offset.Y); - font->draw(text.c_str(), size + pos + offset + offs, color); + core::rect size(0, 0, e->scale.X * m_scale_factor, + text_height * e->scale.Y * m_scale_factor); + v2s32 offs(e->offset.X * m_scale_factor, + e->offset.Y * m_scale_factor); +#ifdef __ANDROID__ + if (e->offset.X < -20) + font_scaled->draw(text.c_str(), size + pos + offset + offs, color); + else +#endif + { + textfont->draw(text.c_str(), size + pos + offset + offs, color); + } break; } case HUD_ELEM_STATBAR: { v2s32 offs(e->offset.X, e->offset.Y); - drawStatbar(pos, HUD_CORNER_UPPER, e->dir, e->text, e->number, offs, e->size); + drawStatbar(pos, HUD_CORNER_UPPER, e->dir, e->text, e->text2, + e->number, e->item, offs, e->size); break; } case HUD_ELEM_INVENTORY: { InventoryList *inv = inventory->getList(e->text); @@ -343,34 +365,59 @@ inv, e->item, e->dir); break; } case HUD_ELEM_WAYPOINT: { - v3f p_pos = player->getPosition() / BS; - v3f w_pos = e->world_pos * BS; - float distance = std::floor(10 * p_pos.getDistanceFrom(e->world_pos)) / - 10.0f; - scene::ICameraSceneNode* camera = - RenderingEngine::get_scene_manager()->getActiveCamera(); - w_pos -= intToFloat(camera_offset, BS); - core::matrix4 trans = camera->getProjectionMatrix(); - trans *= camera->getViewMatrix(); - f32 transformed_pos[4] = { w_pos.X, w_pos.Y, w_pos.Z, 1.0f }; - trans.multiplyWith1x4Matrix(transformed_pos); - if (transformed_pos[3] < 0) + if (!calculateScreenPos(camera_offset, e, &pos)) break; - f32 zDiv = transformed_pos[3] == 0.0f ? 1.0f : - core::reciprocal(transformed_pos[3]); - pos.X = m_screensize.X * (0.5 * transformed_pos[0] * zDiv + 0.5); - pos.Y = m_screensize.Y * (0.5 - transformed_pos[1] * zDiv * 0.5); + v3f p_pos = player->getPosition() / BS; + pos += v2s32(e->offset.X, e->offset.Y); video::SColor color(255, (e->number >> 16) & 0xFF, (e->number >> 8) & 0xFF, (e->number >> 0) & 0xFF); - core::rect size(0, 0, 200, 2 * text_height); std::wstring text = unescape_translate(utf8_to_wide(e->name)); - font->draw(text.c_str(), size + pos, color); - std::ostringstream os; - os << distance << e->text; - text = unescape_translate(utf8_to_wide(os.str())); - pos.Y += text_height; - font->draw(text.c_str(), size + pos, color); + const std::string &unit = e->text; + // waypoints reuse the item field to store precision, item = precision + 1 + u32 item = e->item; + float precision = (item == 0) ? 10.0f : (item - 1.f); + bool draw_precision = precision > 0; + + core::rect bounds(0, 0, font->getDimension(text.c_str()).Width, (draw_precision ? 2:1) * text_height); + pos.Y += (e->align.Y - 1.0) * bounds.getHeight() / 2; + bounds += pos; + font->draw(text.c_str(), bounds + v2s32((e->align.X - 1.0) * bounds.getWidth() / 2, 0), color); + if (draw_precision) { + std::ostringstream os; + float distance = std::floor(precision * p_pos.getDistanceFrom(e->world_pos)) / precision; + os << distance << unit; + text = unescape_translate(utf8_to_wide(os.str())); + bounds.LowerRightCorner.X = bounds.UpperLeftCorner.X + font->getDimension(text.c_str()).Width; + font->draw(text.c_str(), bounds + v2s32((e->align.X - 1.0f) * bounds.getWidth() / 2, text_height), color); + } + break; } + case HUD_ELEM_IMAGE_WAYPOINT: { + if (!calculateScreenPos(camera_offset, e, &pos)) + break; + } + case HUD_ELEM_IMAGE: { + video::ITexture *texture = tsrc->getTexture(e->text); + if (!texture) + continue; + + const video::SColor color(255, 255, 255, 255); + const video::SColor colors[] = {color, color, color, color}; + core::dimension2di imgsize(texture->getOriginalSize()); + v2s32 dstsize(imgsize.Width * e->scale.X * m_scale_factor, + imgsize.Height * e->scale.Y * m_scale_factor); + if (e->scale.X < 0) + dstsize.X = m_screensize.X * (e->scale.X * -0.01); + if (e->scale.Y < 0) + dstsize.Y = m_screensize.Y * (e->scale.Y * -0.01); + 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); + rect += pos + offset + v2s32(e->offset.X * m_scale_factor, + e->offset.Y * m_scale_factor); + draw2DImageFilterScaled(driver, texture, rect, + core::rect(core::position2d(0,0), imgsize), + NULL, colors, true); break; } default: infostream << "Hud::drawLuaElements: ignoring drawform " << e->type << @@ -380,8 +427,9 @@ } -void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, const std::string &texture, - s32 count, v2s32 offset, v2s32 size) +void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, + const std::string &texture, const std::string &bgtexture, + s32 count, s32 maxcount, v2s32 offset, v2s32 size) { const video::SColor color(255, 255, 255, 255); const video::SColor colors[] = {color, color, color, color}; @@ -390,16 +438,24 @@ if (!stat_texture) return; + video::ITexture *stat_texture_bg = nullptr; + if (!bgtexture.empty()) { + stat_texture_bg = tsrc->getTexture(bgtexture); + } + core::dimension2di srcd(stat_texture->getOriginalSize()); core::dimension2di dstd; if (size == v2s32()) { dstd = srcd; + dstd.Height *= m_scale_factor; + dstd.Width *= m_scale_factor; + offset.X *= m_scale_factor; + offset.Y *= m_scale_factor; } else { - float size_factor = m_hud_scaling * RenderingEngine::getDisplayDensity(); - dstd.Height = size.Y * size_factor; - dstd.Width = size.X * size_factor; - offset.X *= size_factor; - offset.Y *= size_factor; + dstd.Height = size.Y * m_scale_factor; + dstd.Width = size.X * m_scale_factor; + offset.X *= m_scale_factor; + offset.Y *= m_scale_factor; } v2s32 p = pos; @@ -409,43 +465,100 @@ p += offset; v2s32 steppos; - core::rect srchalfrect, dsthalfrect; switch (drawdir) { case HUD_DIR_RIGHT_LEFT: steppos = v2s32(-1, 0); - srchalfrect = core::rect(srcd.Width / 2, 0, srcd.Width, srcd.Height); - dsthalfrect = core::rect(dstd.Width / 2, 0, dstd.Width, dstd.Height); break; case HUD_DIR_TOP_BOTTOM: steppos = v2s32(0, 1); - srchalfrect = core::rect(0, 0, srcd.Width, srcd.Height / 2); - dsthalfrect = core::rect(0, 0, dstd.Width, dstd.Height / 2); break; case HUD_DIR_BOTTOM_TOP: steppos = v2s32(0, -1); - srchalfrect = core::rect(0, srcd.Height / 2, srcd.Width, srcd.Height); - dsthalfrect = core::rect(0, dstd.Height / 2, dstd.Width, dstd.Height); break; default: + // From left to right steppos = v2s32(1, 0); - srchalfrect = core::rect(0, 0, srcd.Width / 2, srcd.Height); - dsthalfrect = core::rect(0, 0, dstd.Width / 2, dstd.Height); + break; } + + auto calculate_clipping_rect = [] (core::dimension2di src, + v2s32 steppos) -> core::rect { + + // Create basic rectangle + core::rect rect(0, 0, + src.Width - std::abs(steppos.X) * src.Width / 2, + src.Height - std::abs(steppos.Y) * src.Height / 2 + ); + // Move rectangle left or down + if (steppos.X == -1) + rect += v2s32(src.Width / 2, 0); + if (steppos.Y == -1) + rect += v2s32(0, src.Height / 2); + return rect; + }; + // Rectangles for 1/2 the actual value to display + core::rect srchalfrect, dsthalfrect; + // Rectangles for 1/2 the "off state" texture + core::rect srchalfrect2, dsthalfrect2; + + if (count % 2 == 1) { + // Need to draw halves: Calculate rectangles + srchalfrect = calculate_clipping_rect(srcd, steppos); + dsthalfrect = calculate_clipping_rect(dstd, steppos); + srchalfrect2 = calculate_clipping_rect(srcd, steppos * -1); + dsthalfrect2 = calculate_clipping_rect(dstd, steppos * -1); + } + steppos.X *= dstd.Width; steppos.Y *= dstd.Height; + // Draw full textures for (s32 i = 0; i < count / 2; i++) { core::rect srcrect(0, 0, srcd.Width, srcd.Height); - core::rect dstrect(0,0, dstd.Width, dstd.Height); + core::rect dstrect(0, 0, dstd.Width, dstd.Height); dstrect += p; - draw2DImageFilterScaled(driver, stat_texture, dstrect, srcrect, NULL, colors, true); + draw2DImageFilterScaled(driver, stat_texture, + dstrect, srcrect, NULL, colors, true); p += steppos; } if (count % 2 == 1) { - dsthalfrect += p; - draw2DImageFilterScaled(driver, stat_texture, dsthalfrect, srchalfrect, NULL, colors, true); + // Draw half a texture + draw2DImageFilterScaled(driver, stat_texture, + dsthalfrect + p, srchalfrect, NULL, colors, true); + + if (stat_texture_bg && maxcount > count) { + draw2DImageFilterScaled(driver, stat_texture_bg, + dsthalfrect2 + p, srchalfrect2, + NULL, colors, true); + p += steppos; + } + } + + if (stat_texture_bg && maxcount > count / 2) { + // Draw "off state" textures + s32 start_offset; + if (count % 2 == 1) + start_offset = count / 2 + 1; + else + start_offset = count / 2; + for (s32 i = start_offset; i < maxcount / 2; i++) { + core::rect srcrect(0, 0, srcd.Width, srcd.Height); + core::rect dstrect(0, 0, dstd.Width, dstd.Height); + + dstrect += p; + draw2DImageFilterScaled(driver, stat_texture_bg, + dstrect, srcrect, + NULL, colors, true); + p += steppos; + } + + if (maxcount % 2 == 1) { + draw2DImageFilterScaled(driver, stat_texture_bg, + dsthalfrect + p, srchalfrect, + NULL, colors, true); + } } } @@ -465,7 +578,7 @@ v2s32 pos = centerlowerpos - v2s32(width / 2, m_hotbar_imagesize + m_padding * 3); const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize(); - if ( (float) width / (float) window_size.X <= + 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); @@ -517,12 +630,10 @@ // Draw 3D selection boxes video::SMaterial oldmaterial = driver->getMaterial2D(); driver->setMaterial(m_selection_material); - for (std::vector::const_iterator - i = m_selection_boxes.begin(); - i != m_selection_boxes.end(); ++i) { + for (auto & selection_box : m_selection_boxes) { aabb3f box = aabb3f( - i->MinEdge + m_selection_pos_with_offset, - i->MaxEdge + m_selection_pos_with_offset); + selection_box.MinEdge + m_selection_pos_with_offset, + selection_box.MaxEdge + m_selection_pos_with_offset); u32 r = (selectionbox_argb.getRed() * m_selection_mesh_color.getRed() / 255); diff -Nru minetest-5.2.0/src/client/hud.h minetest-5.3.0/src/client/hud.h --- minetest-5.2.0/src/client/hud.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/hud.h 2020-07-09 21:13:21.000000000 +0000 @@ -18,8 +18,7 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef CLIENT_HUD_HEADER -#define CLIENT_HUD_HEADER +#pragma once #include #include @@ -81,8 +80,10 @@ void drawLuaElements(const v3s16 &camera_offset); private: - void drawStatbar(v2s32 pos, u16 corner, u16 drawdir, const std::string &texture, - s32 count, v2s32 offset, v2s32 size = v2s32()); + bool calculateScreenPos(const v3s16 &camera_offset, HudElement *e, v2s32 *pos); + void drawStatbar(v2s32 pos, u16 corner, u16 drawdir, + 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, s32 inv_offset, InventoryList *mainlist, u16 selectitem, @@ -91,6 +92,7 @@ void drawItem(const ItemStack &item, const core::rect &rect, bool selected); float m_hud_scaling; // cached minetest setting + float m_scale_factor; v3s16 m_camera_offset; v2u32 m_screensize; v2s32 m_displaycenter; @@ -145,4 +147,3 @@ const v3s16 &angle, const v3s16 &rotation_speed); -#endif diff -Nru minetest-5.2.0/src/client/imagefilters.cpp minetest-5.3.0/src/client/imagefilters.cpp --- minetest-5.2.0/src/client/imagefilters.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/imagefilters.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -91,7 +91,7 @@ u32 dy, dx; video::SColor pxl; - // Cache rectsngle boundaries. + // Cache rectangle boundaries. double sox = srcrect.UpperLeftCorner.X * 1.0; double soy = srcrect.UpperLeftCorner.Y * 1.0; double sw = srcrect.getWidth() * 1.0; @@ -107,15 +107,15 @@ // Do some basic clipping, and for mirrored/flipped rects, // make sure min/max are in the right order. minsx = sox + (dx * sw / dim.Width); - minsx = rangelim(minsx, 0, sw); + minsx = rangelim(minsx, 0, sox + sw); maxsx = minsx + sw / dim.Width; - maxsx = rangelim(maxsx, 0, sw); + maxsx = rangelim(maxsx, 0, sox + sw); if (minsx > maxsx) SWAP(double, minsx, maxsx); minsy = soy + (dy * sh / dim.Height); - minsy = rangelim(minsy, 0, sh); + minsy = rangelim(minsy, 0, soy + sh); maxsy = minsy + sh / dim.Height; - maxsy = rangelim(maxsy, 0, sh); + maxsy = rangelim(maxsy, 0, soy + sh); if (minsy > maxsy) SWAP(double, minsy, maxsy); diff -Nru minetest-5.2.0/src/client/localplayer.cpp minetest-5.3.0/src/client/localplayer.cpp --- minetest-5.2.0/src/client/localplayer.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/localplayer.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -200,6 +200,8 @@ if (noclip && free_move) { position += m_speed * dtime; setPosition(position); + + touching_ground = false; added_velocity = v3f(0.0f); // ignored return; } @@ -436,9 +438,11 @@ Check properties of the node on which the player is standing */ const ContentFeatures &f = nodemgr->get(map->getNode(m_standing_node)); + const ContentFeatures &f1 = nodemgr->get(map->getNode(m_standing_node + v3s16(0, 1, 0))); // Determine if jumping is possible - m_disable_jump = itemgroup_get(f.groups, "disable_jump"); + m_disable_jump = itemgroup_get(f.groups, "disable_jump") || + itemgroup_get(f1.groups, "disable_jump"); m_can_jump = ((touching_ground && !is_climbing) || sneak_can_jump) && !m_disable_jump; // Jump key pressed while jumping off from a bouncy block @@ -785,6 +789,8 @@ if (free_move) { position += m_speed * dtime; setPosition(position); + + touching_ground = false; m_sneak_node_exists = false; added_velocity = v3f(0.0f); return; diff -Nru minetest-5.2.0/src/client/localplayer.h minetest-5.3.0/src/client/localplayer.h --- minetest-5.2.0/src/client/localplayer.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/localplayer.h 2020-07-09 21:13:21.000000000 +0000 @@ -135,12 +135,17 @@ } v3f getPosition() const { return m_position; } + + // Non-transformed eye offset getters + // For accurate positions, use the Camera functions v3f getEyePosition() const { return m_position + getEyeOffset(); } v3f getEyeOffset() const; void setEyeHeight(float eye_height) { m_eye_height = eye_height; } void setCollisionbox(const aabb3f &box) { m_collisionbox = box; } + const aabb3f& getCollisionbox() const { return m_collisionbox; } + float getZoomFOV() const { return m_zoom_fov; } void setZoomFOV(float zoom_fov) { m_zoom_fov = zoom_fov; } diff -Nru minetest-5.2.0/src/client/mapblock_mesh.cpp minetest-5.3.0/src/client/mapblock_mesh.cpp --- minetest-5.2.0/src/client/mapblock_mesh.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/mapblock_mesh.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -225,7 +225,7 @@ return f.light_propagates; }; - std::array obstructed = {{ 1, 1, 1, 1 }}; + bool obstructed[4] = { true, true, true, true }; add_node(0); bool opaque1 = !add_node(1); bool opaque2 = !add_node(2); @@ -372,6 +372,32 @@ Mesh generation helpers */ +// This table is moved outside getNodeVertexDirs to avoid the compiler using +// a mutex to initialize this table at runtime right in the hot path. +// For details search the internet for "cxa_guard_acquire". +static const v3s16 vertex_dirs_table[] = { + // ( 1, 0, 0) + v3s16( 1,-1, 1), v3s16( 1,-1,-1), + v3s16( 1, 1,-1), v3s16( 1, 1, 1), + // ( 0, 1, 0) + v3s16( 1, 1,-1), v3s16(-1, 1,-1), + v3s16(-1, 1, 1), v3s16( 1, 1, 1), + // ( 0, 0, 1) + v3s16(-1,-1, 1), v3s16( 1,-1, 1), + v3s16( 1, 1, 1), v3s16(-1, 1, 1), + // invalid + v3s16(), v3s16(), v3s16(), v3s16(), + // ( 0, 0,-1) + v3s16( 1,-1,-1), v3s16(-1,-1,-1), + v3s16(-1, 1,-1), v3s16( 1, 1,-1), + // ( 0,-1, 0) + v3s16( 1,-1, 1), v3s16(-1,-1, 1), + v3s16(-1,-1,-1), v3s16( 1,-1,-1), + // (-1, 0, 0) + v3s16(-1,-1,-1), v3s16(-1,-1, 1), + v3s16(-1, 1, 1), v3s16(-1, 1,-1) +}; + /* vertex_dirs: v3s16[4] */ @@ -384,44 +410,16 @@ 2: top-left 3: top-right */ - if (dir == v3s16(0, 0, 1)) { - // If looking towards z+, this is the face that is behind - // the center point, facing towards z+. - vertex_dirs[0] = v3s16(-1,-1, 1); - vertex_dirs[1] = v3s16( 1,-1, 1); - vertex_dirs[2] = v3s16( 1, 1, 1); - vertex_dirs[3] = v3s16(-1, 1, 1); - } else if (dir == v3s16(0, 0, -1)) { - // faces towards Z- - vertex_dirs[0] = v3s16( 1,-1,-1); - vertex_dirs[1] = v3s16(-1,-1,-1); - vertex_dirs[2] = v3s16(-1, 1,-1); - vertex_dirs[3] = v3s16( 1, 1,-1); - } else if (dir == v3s16(1, 0, 0)) { - // faces towards X+ - vertex_dirs[0] = v3s16( 1,-1, 1); - vertex_dirs[1] = v3s16( 1,-1,-1); - vertex_dirs[2] = v3s16( 1, 1,-1); - vertex_dirs[3] = v3s16( 1, 1, 1); - } else if (dir == v3s16(-1, 0, 0)) { - // faces towards X- - vertex_dirs[0] = v3s16(-1,-1,-1); - vertex_dirs[1] = v3s16(-1,-1, 1); - vertex_dirs[2] = v3s16(-1, 1, 1); - vertex_dirs[3] = v3s16(-1, 1,-1); - } else if (dir == v3s16(0, 1, 0)) { - // faces towards Y+ (assume Z- as "down" in texture) - vertex_dirs[0] = v3s16( 1, 1,-1); - vertex_dirs[1] = v3s16(-1, 1,-1); - vertex_dirs[2] = v3s16(-1, 1, 1); - vertex_dirs[3] = v3s16( 1, 1, 1); - } else if (dir == v3s16(0, -1, 0)) { - // faces towards Y- (assume Z+ as "down" in texture) - vertex_dirs[0] = v3s16( 1,-1, 1); - vertex_dirs[1] = v3s16(-1,-1, 1); - vertex_dirs[2] = v3s16(-1,-1,-1); - vertex_dirs[3] = v3s16( 1,-1,-1); - } + + // Direction must be (1,0,0), (-1,0,0), (0,1,0), (0,-1,0), + // (0,0,1), (0,0,-1) + assert(dir.X * dir.X + dir.Y * dir.Y + dir.Z * dir.Z == 1); + + // Convert direction to single integer for table lookup + u8 idx = (dir.X + 2 * dir.Y + 3 * dir.Z) & 7; + idx = (idx - 1) * 4; + + memcpy(vertex_dirs, &vertex_dirs_table[idx], 4 * sizeof(v3s16)); } static void getNodeTextureCoords(v3f base, const v3f &scale, const v3s16 &dir, float *u, float *v) @@ -890,8 +888,10 @@ v3s16 p_corrected; v3s16 face_dir_corrected; u16 lights[4] = {0, 0, 0, 0}; - u8 waving; + u8 waving = 0; TileSpec tile; + + // Get info of first tile getTileInfo(data, p, face_dir, makes_face, p_corrected, face_dir_corrected, lights, waving, tile); @@ -902,8 +902,6 @@ // If tiling can be done, this is set to false in the next step bool next_is_different = true; - v3s16 p_next; - bool next_makes_face = false; v3s16 next_p_corrected; v3s16 next_face_dir_corrected; @@ -912,9 +910,9 @@ // If at last position, there is nothing to compare to and // the face must be drawn anyway if (j != MAP_BLOCKSIZE - 1) { - p_next = p + translate_dir; + p += translate_dir; - getTileInfo(data, p_next, face_dir, + getTileInfo(data, p, face_dir, next_makes_face, next_p_corrected, next_face_dir_corrected, next_lights, waving, @@ -923,7 +921,7 @@ if (next_makes_face == makes_face && next_p_corrected == p_corrected + translate_dir && next_face_dir_corrected == face_dir_corrected - && memcmp(next_lights, lights, ARRLEN(lights) * sizeof(u16)) == 0 + && memcmp(next_lights, lights, sizeof(lights)) == 0 // Don't apply fast faces to waving water. && (waving != 3 || !waving_liquids) && next_tile.isTileable(tile)) { @@ -961,10 +959,9 @@ makes_face = next_makes_face; p_corrected = next_p_corrected; face_dir_corrected = next_face_dir_corrected; - std::memcpy(lights, next_lights, ARRLEN(lights) * sizeof(u16)); + memcpy(lights, next_lights, sizeof(lights)); if (next_is_different) - tile = next_tile; - p = p_next; + tile = std::move(next_tile); // faster than copy } } diff -Nru minetest-5.2.0/src/client/mesh.cpp minetest-5.3.0/src/client/mesh.cpp --- minetest-5.2.0/src/client/mesh.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/mesh.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -328,6 +328,26 @@ src_mesh->setBoundingBox(bbox); } +bool checkMeshNormals(scene::IMesh *mesh) +{ + u32 buffer_count = mesh->getMeshBufferCount(); + + for (u32 i = 0; i < buffer_count; i++) { + scene::IMeshBuffer *buffer = mesh->getMeshBuffer(i); + + // Here we intentionally check only first normal, assuming that if buffer + // has it valid, then most likely all other ones are fine too. We can + // check all of the normals to have length, but it seems like an overkill + // hurting the performance and covering only really weird broken models. + f32 length = buffer->getNormal(0).getLength(); + + if (!std::isfinite(length) || length < 1e-10f) + return false; + } + + return true; +} + scene::IMeshBuffer* cloneMeshBuffer(scene::IMeshBuffer *mesh_buffer) { switch (mesh_buffer->getVertexType()) { diff -Nru minetest-5.2.0/src/client/mesh.h minetest-5.3.0/src/client/mesh.h --- minetest-5.2.0/src/client/mesh.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/mesh.h 2020-07-09 21:13:21.000000000 +0000 @@ -122,6 +122,12 @@ void recalculateBoundingBox(scene::IMesh *src_mesh); /* + Check if mesh has valid normals and return true if it does. + We assume normal to be valid when it's 0 < length < Inf. and not NaN + */ +bool checkMeshNormals(scene::IMesh *mesh); + +/* Vertex cache optimization according to the Forsyth paper: http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html Ported from irrlicht 1.8 diff -Nru minetest-5.2.0/src/client/particles.cpp minetest-5.3.0/src/client/particles.cpp --- minetest-5.2.0/src/client/particles.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/particles.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -37,32 +37,31 @@ Utility */ -v3f random_v3f(v3f min, v3f max) +static f32 random_f32(f32 min, f32 max) +{ + return rand() / (float)RAND_MAX * (max - min) + min; +} + +static v3f random_v3f(v3f min, v3f max) { return v3f( - rand() / (float)RAND_MAX * (max.X - min.X) + min.X, - rand() / (float)RAND_MAX * (max.Y - min.Y) + min.Y, - rand() / (float)RAND_MAX * (max.Z - min.Z) + min.Z); + random_f32(min.X, max.X), + random_f32(min.Y, max.Y), + random_f32(min.Z, max.Z)); } +/* + Particle +*/ + Particle::Particle( IGameDef *gamedef, LocalPlayer *player, ClientEnvironment *env, - v3f pos, - v3f velocity, - v3f acceleration, - float expirationtime, - float size, - bool collisiondetection, - bool collision_removal, - bool object_collision, - bool vertical, + const ParticleParameters &p, video::ITexture *texture, v2f texpos, v2f texsize, - const struct TileAnimationParams &anim, - u8 glow, video::SColor color ): scene::ISceneNode(RenderingEngine::get_scene_manager()->getRootSceneNode(), @@ -81,33 +80,28 @@ m_material.setTexture(0, texture); m_texpos = texpos; m_texsize = texsize; - m_animation = anim; + m_animation = p.animation; // Color m_base_color = color; m_color = color; // Particle related - m_pos = pos; - m_velocity = velocity; - m_acceleration = acceleration; - m_expiration = expirationtime; + m_pos = p.pos; + m_velocity = p.vel; + m_acceleration = p.acc; + m_expiration = p.expirationtime; m_player = player; - m_size = size; - m_collisiondetection = collisiondetection; - m_collision_removal = collision_removal; - m_object_collision = object_collision; - m_vertical = vertical; - m_glow = glow; + m_size = p.size; + m_collisiondetection = p.collisiondetection; + m_collision_removal = p.collision_removal; + m_object_collision = p.object_collision; + m_vertical = p.vertical; + m_glow = p.glow; // Irrlicht stuff - m_collisionbox = aabb3f( - -size / 2, - -size / 2, - -size / 2, - size / 2, - size / 2, - size / 2); + const float c = p.size / 2; + m_collisionbox = aabb3f(-c, -c, -c, c, c, c); this->setAutomaticCulling(scene::EAC_OFF); // Init lighting @@ -255,52 +249,22 @@ ParticleSpawner::ParticleSpawner( IGameDef *gamedef, LocalPlayer *player, - u16 amount, - float time, - v3f minpos, v3f maxpos, - v3f minvel, v3f maxvel, - v3f minacc, v3f maxacc, - float minexptime, float maxexptime, - float minsize, float maxsize, - bool collisiondetection, - bool collision_removal, - bool object_collision, + const ParticleSpawnerParameters &p, u16 attached_id, - bool vertical, video::ITexture *texture, - const struct TileAnimationParams &anim, - u8 glow, ParticleManager *p_manager ): - m_particlemanager(p_manager) + m_particlemanager(p_manager), p(p) { m_gamedef = gamedef; m_player = player; - m_amount = amount; - m_spawntime = time; - m_minpos = minpos; - m_maxpos = maxpos; - m_minvel = minvel; - m_maxvel = maxvel; - m_minacc = minacc; - m_maxacc = maxacc; - m_minexptime = minexptime; - m_maxexptime = maxexptime; - m_minsize = minsize; - m_maxsize = maxsize; - m_collisiondetection = collisiondetection; - m_collision_removal = collision_removal; - m_object_collision = object_collision; m_attached_id = attached_id; - m_vertical = vertical; m_texture = texture; m_time = 0; - m_animation = anim; - m_glow = glow; - for (u16 i = 0; i <= m_amount; i++) - { - float spawntime = (float)rand() / (float)RAND_MAX * m_spawntime; + m_spawntimes.reserve(p.amount + 1); + for (u16 i = 0; i <= p.amount; i++) { + float spawntime = rand() / (float)RAND_MAX * p.time; m_spawntimes.push_back(spawntime); } } @@ -309,7 +273,7 @@ const core::matrix4 *attached_absolute_pos_rot_matrix) { v3f ppos = m_player->getPosition() / BS; - v3f pos = random_v3f(m_minpos, m_maxpos); + v3f pos = random_v3f(p.minpos, p.maxpos); // Need to apply this first or the following check // will be wrong for attached spawners @@ -326,41 +290,51 @@ if (pos.getDistanceFrom(ppos) > radius) return; - v3f vel = random_v3f(m_minvel, m_maxvel); - v3f acc = random_v3f(m_minacc, m_maxacc); + // Parameters for the single particle we're about to spawn + ParticleParameters pp; + pp.pos = pos; + + pp.vel = random_v3f(p.minvel, p.maxvel); + pp.acc = random_v3f(p.minacc, p.maxacc); if (attached_absolute_pos_rot_matrix) { // Apply attachment rotation - attached_absolute_pos_rot_matrix->rotateVect(vel); - attached_absolute_pos_rot_matrix->rotateVect(acc); + attached_absolute_pos_rot_matrix->rotateVect(pp.vel); + attached_absolute_pos_rot_matrix->rotateVect(pp.acc); } - float exptime = rand() / (float)RAND_MAX - * (m_maxexptime - m_minexptime) - + m_minexptime; + pp.expirationtime = random_f32(p.minexptime, p.maxexptime); + p.copyCommon(pp); - float size = rand() / (float)RAND_MAX - * (m_maxsize - m_minsize) - + m_minsize; + video::ITexture *texture; + v2f texpos, texsize; + video::SColor color(0xFFFFFFFF); + + if (p.node.getContent() != CONTENT_IGNORE) { + const ContentFeatures &f = + m_particlemanager->m_env->getGameDef()->ndef()->get(p.node); + if (!ParticleManager::getNodeParticleParams(p.node, f, pp, &texture, + texpos, texsize, &color, p.node_tile)) + return; + } else { + texture = m_texture; + texpos = v2f(0.0f, 0.0f); + texsize = v2f(1.0f, 1.0f); + } + + // Allow keeping default random size + if (p.maxsize > 0.0f) + pp.size = random_f32(p.minsize, p.maxsize); m_particlemanager->addParticle(new Particle( m_gamedef, m_player, env, - pos, - vel, - acc, - exptime, - size, - m_collisiondetection, - m_collision_removal, - m_object_collision, - m_vertical, - m_texture, - v2f(0.0, 0.0), - v2f(1.0, 1.0), - m_animation, - m_glow + pp, + texture, + texpos, + texsize, + color )); } @@ -375,18 +349,17 @@ const core::matrix4 *attached_absolute_pos_rot_matrix = nullptr; if (m_attached_id) { if (GenericCAO *attached = dynamic_cast(env->getActiveObject(m_attached_id))) { - attached_absolute_pos_rot_matrix = &attached->getAbsolutePosRotMatrix(); + attached_absolute_pos_rot_matrix = attached->getAbsolutePosRotMatrix(); } else { unloaded = true; } } - if (m_spawntime != 0) { + if (p.time != 0) { // Spawner exists for a predefined timespan - for (std::vector::iterator i = m_spawntimes.begin(); - i != m_spawntimes.end();) { - if ((*i) <= m_time && m_amount > 0) { - --m_amount; + for (auto i = m_spawntimes.begin(); i != m_spawntimes.end(); ) { + if ((*i) <= m_time && p.amount > 0) { + --p.amount; // Pretend to, but don't actually spawn a particle if it is // attached to an unloaded object or distant from player. @@ -405,13 +378,16 @@ if (unloaded) return; - for (int i = 0; i <= m_amount; i++) { + for (int i = 0; i <= p.amount; i++) { if (rand() / (float)RAND_MAX < dtime) spawnParticle(env, radius, attached_absolute_pos_rot_matrix); } } } +/* + ParticleManager +*/ ParticleManager::ParticleManager(ClientEnvironment *env) : m_env(env) @@ -479,99 +455,106 @@ { switch (event->type) { case CE_DELETE_PARTICLESPAWNER: { - MutexAutoLock lock(m_spawner_list_lock); - if (m_particle_spawners.find(event->delete_particlespawner.id) != - m_particle_spawners.end()) { - delete m_particle_spawners.find(event->delete_particlespawner.id)->second; - m_particle_spawners.erase(event->delete_particlespawner.id); - } + deleteParticleSpawner(event->delete_particlespawner.id); // no allocated memory in delete event break; } case CE_ADD_PARTICLESPAWNER: { - { - MutexAutoLock lock(m_spawner_list_lock); - if (m_particle_spawners.find(event->add_particlespawner.id) != - m_particle_spawners.end()) { - delete m_particle_spawners.find(event->add_particlespawner.id)->second; - m_particle_spawners.erase(event->add_particlespawner.id); - } - } + deleteParticleSpawner(event->add_particlespawner.id); + + const ParticleSpawnerParameters &p = *event->add_particlespawner.p; video::ITexture *texture = - client->tsrc()->getTextureForMesh(*(event->add_particlespawner.texture)); + client->tsrc()->getTextureForMesh(p.texture); auto toadd = new ParticleSpawner(client, player, - event->add_particlespawner.amount, - event->add_particlespawner.spawntime, - *event->add_particlespawner.minpos, - *event->add_particlespawner.maxpos, - *event->add_particlespawner.minvel, - *event->add_particlespawner.maxvel, - *event->add_particlespawner.minacc, - *event->add_particlespawner.maxacc, - event->add_particlespawner.minexptime, - event->add_particlespawner.maxexptime, - event->add_particlespawner.minsize, - event->add_particlespawner.maxsize, - event->add_particlespawner.collisiondetection, - event->add_particlespawner.collision_removal, - event->add_particlespawner.object_collision, + p, event->add_particlespawner.attached_id, - event->add_particlespawner.vertical, texture, - event->add_particlespawner.animation, - event->add_particlespawner.glow, this); - /* delete allocated content of event */ - delete event->add_particlespawner.minpos; - delete event->add_particlespawner.maxpos; - delete event->add_particlespawner.minvel; - delete event->add_particlespawner.maxvel; - delete event->add_particlespawner.minacc; - delete event->add_particlespawner.texture; - delete event->add_particlespawner.maxacc; - - { - MutexAutoLock lock(m_spawner_list_lock); - m_particle_spawners[event->add_particlespawner.id] = toadd; - } + addParticleSpawner(event->add_particlespawner.id, toadd); + + delete event->add_particlespawner.p; break; } case CE_SPAWN_PARTICLE: { - video::ITexture *texture = - client->tsrc()->getTextureForMesh(*(event->spawn_particle.texture)); + ParticleParameters &p = *event->spawn_particle; - Particle *toadd = new Particle(client, player, m_env, - *event->spawn_particle.pos, - *event->spawn_particle.vel, - *event->spawn_particle.acc, - event->spawn_particle.expirationtime, - event->spawn_particle.size, - event->spawn_particle.collisiondetection, - event->spawn_particle.collision_removal, - event->spawn_particle.object_collision, - event->spawn_particle.vertical, - texture, - v2f(0.0, 0.0), - v2f(1.0, 1.0), - event->spawn_particle.animation, - event->spawn_particle.glow); - - addParticle(toadd); - - delete event->spawn_particle.pos; - delete event->spawn_particle.vel; - delete event->spawn_particle.acc; - delete event->spawn_particle.texture; + video::ITexture *texture; + v2f texpos, texsize; + video::SColor color(0xFFFFFFFF); + + f32 oldsize = p.size; + + if (p.node.getContent() != CONTENT_IGNORE) { + const ContentFeatures &f = m_env->getGameDef()->ndef()->get(p.node); + if (!getNodeParticleParams(p.node, f, p, &texture, texpos, + texsize, &color, p.node_tile)) + texture = nullptr; + } else { + texture = client->tsrc()->getTextureForMesh(p.texture); + texpos = v2f(0.0f, 0.0f); + texsize = v2f(1.0f, 1.0f); + } + + // Allow keeping default random size + if (oldsize > 0.0f) + p.size = oldsize; + + if (texture) { + Particle *toadd = new Particle(client, player, m_env, + p, texture, texpos, texsize, color); + addParticle(toadd); + } + + delete event->spawn_particle; break; } default: break; } } +bool ParticleManager::getNodeParticleParams(const MapNode &n, + const ContentFeatures &f, ParticleParameters &p, video::ITexture **texture, + v2f &texpos, v2f &texsize, video::SColor *color, u8 tilenum) +{ + // No particles for "airlike" nodes + if (f.drawtype == NDT_AIRLIKE) + return false; + + // Texture + u8 texid; + if (tilenum > 0 && tilenum <= 6) + texid = tilenum - 1; + else + texid = rand() % 6; + const TileLayer &tile = f.tiles[texid].layers[0]; + p.animation.type = TAT_NONE; + + // Only use first frame of animated texture + if (tile.material_flags & MATERIAL_FLAG_ANIMATION) + *texture = (*tile.frames)[0].texture; + else + *texture = tile.texture; + + float size = (rand() % 8) / 64.0f; + p.size = BS * size; + if (tile.scale) + size /= tile.scale; + texsize = v2f(size * 2.0f, size * 2.0f); + texpos.X = (rand() % 64) / 64.0f - texsize.X; + texpos.Y = (rand() % 64) / 64.0f - texsize.Y; + + if (tile.has_color) + *color = tile.color; + else + n.getColor(f, color); + + return true; +} + // The final burst of particles when a node is finally dug, *not* particles // spawned during the digging of a node. @@ -593,73 +576,41 @@ void ParticleManager::addNodeParticle(IGameDef *gamedef, LocalPlayer *player, v3s16 pos, const MapNode &n, const ContentFeatures &f) { - // No particles for "airlike" nodes - if (f.drawtype == NDT_AIRLIKE) - return; - - // Texture - u8 texid = myrand_range(0, 5); - const TileLayer &tile = f.tiles[texid].layers[0]; + ParticleParameters p; video::ITexture *texture; - struct TileAnimationParams anim; - anim.type = TAT_NONE; + v2f texpos, texsize; + video::SColor color; - // Only use first frame of animated texture - if (tile.material_flags & MATERIAL_FLAG_ANIMATION) - texture = (*tile.frames)[0].texture; - else - texture = tile.texture; + if (!getNodeParticleParams(n, f, p, &texture, texpos, texsize, &color)) + return; - float size = (rand() % 8) / 64.0f; - float visual_size = BS * size; - if (tile.scale) - size /= tile.scale; - v2f texsize(size * 2.0f, size * 2.0f); - v2f texpos; - texpos.X = (rand() % 64) / 64.0f - texsize.X; - texpos.Y = (rand() % 64) / 64.0f - texsize.Y; + p.expirationtime = (rand() % 100) / 100.0f; // Physics - v3f velocity( + p.vel = v3f( (rand() % 150) / 50.0f - 1.5f, (rand() % 150) / 50.0f, (rand() % 150) / 50.0f - 1.5f ); - v3f acceleration( + p.acc = v3f( 0.0f, -player->movement_gravity * player->physics_override_gravity / BS, 0.0f ); - v3f particlepos = v3f( + p.pos = v3f( (f32)pos.X + (rand() % 100) / 200.0f - 0.25f, (f32)pos.Y + (rand() % 100) / 200.0f - 0.25f, (f32)pos.Z + (rand() % 100) / 200.0f - 0.25f ); - video::SColor color; - if (tile.has_color) - color = tile.color; - else - n.getColor(f, &color); - Particle *toadd = new Particle( gamedef, player, m_env, - particlepos, - velocity, - acceleration, - (rand() % 100) / 100.0f, // expiration time - visual_size, - true, - false, - false, - false, + p, texture, texpos, texsize, - anim, - 0, color); addParticle(toadd); @@ -670,3 +621,20 @@ MutexAutoLock lock(m_particle_list_lock); m_particles.push_back(toadd); } + + +void ParticleManager::addParticleSpawner(u64 id, ParticleSpawner *toadd) +{ + MutexAutoLock lock(m_spawner_list_lock); + m_particle_spawners[id] = toadd; +} + +void ParticleManager::deleteParticleSpawner(u64 id) +{ + MutexAutoLock lock(m_spawner_list_lock); + auto it = m_particle_spawners.find(id); + if (it != m_particle_spawners.end()) { + delete it->second; + m_particle_spawners.erase(it); + } +} diff -Nru minetest-5.2.0/src/client/particles.h minetest-5.3.0/src/client/particles.h --- minetest-5.2.0/src/client/particles.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/particles.h 2020-07-09 21:13:21.000000000 +0000 @@ -23,7 +23,7 @@ #include "irrlichttypes_extrabloated.h" #include "client/tile.h" #include "localplayer.h" -#include "tileanimation.h" +#include "../particles.h" struct ClientEvent; class ParticleManager; @@ -38,21 +38,11 @@ IGameDef* gamedef, LocalPlayer *player, ClientEnvironment *env, - v3f pos, - v3f velocity, - v3f acceleration, - float expirationtime, - float size, - bool collisiondetection, - bool collision_removal, - bool object_collision, - bool vertical, + const ParticleParameters &p, video::ITexture *texture, v2f texpos, v2f texsize, - const struct TileAnimationParams &anim, - u8 glow, - video::SColor color = video::SColor(0xFFFFFFFF) + video::SColor color ); ~Particle() = default; @@ -119,20 +109,9 @@ public: ParticleSpawner(IGameDef* gamedef, LocalPlayer *player, - u16 amount, - float time, - v3f minp, v3f maxp, - v3f minvel, v3f maxvel, - v3f minacc, v3f maxacc, - float minexptime, float maxexptime, - float minsize, float maxsize, - bool collisiondetection, - bool collision_removal, - bool object_collision, + const ParticleSpawnerParameters &p, u16 attached_id, - bool vertical, video::ITexture *texture, - const struct TileAnimationParams &anim, u8 glow, ParticleManager* p_manager); ~ParticleSpawner() = default; @@ -140,7 +119,7 @@ void step(float dtime, ClientEnvironment *env); bool get_expired () - { return (m_amount <= 0) && m_spawntime != 0; } + { return p.amount <= 0 && p.time != 0; } private: void spawnParticle(ClientEnvironment *env, float radius, @@ -150,27 +129,10 @@ float m_time; IGameDef *m_gamedef; LocalPlayer *m_player; - u16 m_amount; - float m_spawntime; - v3f m_minpos; - v3f m_maxpos; - v3f m_minvel; - v3f m_maxvel; - v3f m_minacc; - v3f m_maxacc; - float m_minexptime; - float m_maxexptime; - float m_minsize; - float m_maxsize; + ParticleSpawnerParameters p; video::ITexture *m_texture; std::vector m_spawntimes; - bool m_collisiondetection; - bool m_collision_removal; - bool m_object_collision; - bool m_vertical; u16 m_attached_id; - struct TileAnimationParams m_animation; - u8 m_glow; }; /** @@ -197,8 +159,8 @@ /** * This function is only used by client particle spawners * - * We don't need to check the particle spawner list because client ID will n - * ever overlap (u64) + * We don't need to check the particle spawner list because client ID will + * never overlap (u64) * @return new id */ u64 generateSpawnerId() @@ -207,9 +169,15 @@ } protected: + static bool getNodeParticleParams(const MapNode &n, const ContentFeatures &f, + ParticleParameters &p, video::ITexture **texture, v2f &texpos, + v2f &texsize, video::SColor *color, u8 tilenum = 0); + void addParticle(Particle* toadd); private: + void addParticleSpawner(u64 id, ParticleSpawner *toadd); + void deleteParticleSpawner(u64 id); void stepParticles(float dtime); void stepSpawners(float dtime); diff -Nru minetest-5.2.0/src/client/render/factory.h minetest-5.3.0/src/client/render/factory.h --- minetest-5.2.0/src/client/render/factory.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/render/factory.h 2020-07-09 21:13:21.000000000 +0000 @@ -18,6 +18,8 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#pragma once + #include #include "core.h" diff -Nru minetest-5.2.0/src/client/renderingengine.cpp minetest-5.3.0/src/client/renderingengine.cpp --- minetest-5.2.0/src/client/renderingengine.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/renderingengine.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -45,7 +45,11 @@ #include #include #include +#endif +#ifdef _WIN32 +#include +#include #endif #if ENABLE_GLES @@ -126,12 +130,9 @@ params.HighPrecisionFPU = g_settings->getBool("high_precision_fpu"); params.ZBufferBits = 24; #ifdef __ANDROID__ - // clang-format off params.PrivateData = porting::app_global; - params.OGLES2ShaderPath = std::string(porting::path_user + DIR_DELIM + "media" + - DIR_DELIM + "Shaders" + DIR_DELIM).c_str(); - // clang-format on -#elif ENABLE_GLES +#endif +#if ENABLE_GLES // there is no standardized path for these on desktop std::string rel_path = std::string("client") + DIR_DELIM + "shaders" + DIR_DELIM + "Irrlicht"; @@ -226,27 +227,17 @@ { // FIXME: It would make more sense for there to be a switch of some // sort here that would call the correct toplevel setup methods for - // the environment Minetest is running in but for now not deviating - // from the original pattern. + // the environment Minetest is running in. /* Setting Xorg properties for the top level window */ setupTopLevelXorgWindow(name); - /* Done with Xorg properties */ /* Setting general properties for the top level window */ verbosestream << "Client: Configuring general top level" << " window properties" << std::endl; - bool result = setWindowIcon(); - verbosestream << "Client: Finished configuring general top level" - << " window properties" - << std::endl; - /* Done with general properties */ - - // FIXME: setWindowIcon returns a bool result but it is unused. - // For now continue to return this result. return result; } @@ -262,7 +253,7 @@ return; } - verbosestream << "Client: Configuring Xorg specific top level" + verbosestream << "Client: Configuring X11-specific top level" << " window properties" << std::endl; @@ -309,8 +300,6 @@ Atom NET_WM_PID = XInternAtom(x11_dpl, "_NET_WM_PID", false); pid_t pid = getpid(); - infostream << "Client: PID is '" << static_cast(pid) << "'" - << std::endl; XChangeProperty(x11_dpl, x11_win, NET_WM_PID, XA_CARDINAL, 32, PropModeReplace, @@ -327,13 +316,31 @@ XChangeProperty (x11_dpl, x11_win, WM_CLIENT_LEADER, XA_WINDOW, 32, PropModeReplace, reinterpret_cast(&x11_win), 1); - - verbosestream << "Client: Finished configuring Xorg specific top level" - << " window properties" - << std::endl; #endif } +#ifdef _WIN32 +static bool getWindowHandle(irr::video::IVideoDriver *driver, HWND &hWnd) +{ + const video::SExposedVideoData exposedData = driver->getExposedVideoData(); + + switch (driver->getDriverType()) { + case video::EDT_DIRECT3D8: + hWnd = reinterpret_cast(exposedData.D3D8.HWnd); + break; + case video::EDT_DIRECT3D9: + hWnd = reinterpret_cast(exposedData.D3D9.HWnd); + break; + case video::EDT_OPENGL: + hWnd = reinterpret_cast(exposedData.OpenGLWin32.HWnd); + break; + default: + return false; + } + + return true; +} +#endif bool RenderingEngine::setWindowIcon() { @@ -351,22 +358,9 @@ "-xorg-icon-128.png"); #endif #elif defined(_WIN32) - const video::SExposedVideoData exposedData = driver->getExposedVideoData(); HWND hWnd; // Window handle - - switch (driver->getDriverType()) { - case video::EDT_DIRECT3D8: - hWnd = reinterpret_cast(exposedData.D3D8.HWnd); - break; - case video::EDT_DIRECT3D9: - hWnd = reinterpret_cast(exposedData.D3D9.HWnd); - break; - case video::EDT_OPENGL: - hWnd = reinterpret_cast(exposedData.OpenGLWin32.HWnd); - break; - default: + if (!getWindowHandle(driver, hWnd)) return false; - } // Load the ICON from resource file const HICON hicon = LoadIcon(GetModuleHandle(NULL), @@ -648,7 +642,7 @@ } #ifndef __ANDROID__ -#ifdef XORG_USED +#if defined(XORG_USED) static float calcDisplayDensity() { @@ -683,12 +677,42 @@ return cached_display_density; } -#else // XORG_USED +#elif defined(_WIN32) + + +static float calcDisplayDensity(irr::video::IVideoDriver *driver) +{ + HWND hWnd; + if (getWindowHandle(driver, hWnd)) { + HDC hdc = GetDC(hWnd); + float dpi = GetDeviceCaps(hdc, LOGPIXELSX); + ReleaseDC(hWnd, hdc); + return dpi / 96.0f; + } + + /* return manually specified dpi */ + return g_settings->getFloat("screen_dpi") / 96.0f; +} + +float RenderingEngine::getDisplayDensity() +{ + static bool cached = false; + static float display_density; + if (!cached) { + display_density = calcDisplayDensity(get_video_driver()); + cached = true; + } + return display_density; +} + +#else + float RenderingEngine::getDisplayDensity() { return g_settings->getFloat("screen_dpi") / 96.0; } -#endif // XORG_USED + +#endif v2u32 RenderingEngine::getDisplaySize() { diff -Nru minetest-5.2.0/src/client/shader.cpp minetest-5.3.0/src/client/shader.cpp --- minetest-5.2.0/src/client/shader.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/shader.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -537,11 +537,13 @@ shaderinfo.base_material = video::EMT_SOLID; break; case TILE_MATERIAL_ALPHA: + case TILE_MATERIAL_PLAIN_ALPHA: case TILE_MATERIAL_LIQUID_TRANSPARENT: case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT: shaderinfo.base_material = video::EMT_TRANSPARENT_ALPHA_CHANNEL; break; case TILE_MATERIAL_BASIC: + case TILE_MATERIAL_PLAIN: case TILE_MATERIAL_WAVING_LEAVES: case TILE_MATERIAL_WAVING_PLANTS: case TILE_MATERIAL_WAVING_LIQUID_BASIC: @@ -644,9 +646,11 @@ "TILE_MATERIAL_WAVING_LIQUID_BASIC", "TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT", "TILE_MATERIAL_WAVING_LIQUID_OPAQUE", + "TILE_MATERIAL_PLAIN", + "TILE_MATERIAL_PLAIN_ALPHA", }; - for (int i = 0; i < 10; i++){ + for (int i = 0; i < 12; i++){ shaders_header += "#define "; shaders_header += materialTypes[i]; shaders_header += " "; diff -Nru minetest-5.2.0/src/client/sky.cpp minetest-5.3.0/src/client/sky.cpp --- minetest-5.2.0/src/client/sky.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/sky.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -252,35 +252,10 @@ if (m_visible) { driver->setMaterial(m_materials[1]); for (u32 j = 0; j < 4; j++) { - video::SColor c = cloudyfogcolor.getInterpolated(m_skycolor, 0.45); - vertices[0] = video::S3DVertex(-1, 0.08, -1, 0, 0, 1, c, t, t); - vertices[1] = video::S3DVertex( 1, 0.08, -1, 0, 0, 1, c, o, t); - vertices[2] = video::S3DVertex( 1, 0.12, -1, 0, 0, 1, c, o, o); - vertices[3] = video::S3DVertex(-1, 0.12, -1, 0, 0, 1, c, t, o); - for (video::S3DVertex &vertex : vertices) { - if (j == 0) - // Don't switch - {} - else if (j == 1) - // Switch from -Z (south) to +X (east) - vertex.Pos.rotateXZBy(90); - else if (j == 2) - // Switch from -Z (south) to -X (west) - vertex.Pos.rotateXZBy(-90); - else - // Switch from -Z (south) to +Z (north) - vertex.Pos.rotateXZBy(-180); - } - driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2); - } - - // Draw far cloudy fog thing at and below all horizons - for (u32 j = 0; j < 4; j++) { - video::SColor c = cloudyfogcolor; - vertices[0] = video::S3DVertex(-1, -1.0, -1, 0, 0, 1, c, t, t); - vertices[1] = video::S3DVertex( 1, -1.0, -1, 0, 0, 1, c, o, t); - vertices[2] = video::S3DVertex( 1, 0.08, -1, 0, 0, 1, c, o, o); - vertices[3] = video::S3DVertex(-1, 0.08, -1, 0, 0, 1, c, t, o); + vertices[0] = video::S3DVertex(-1, -0.02, -1, 0, 0, 1, m_bgcolor, t, t); + vertices[1] = video::S3DVertex( 1, -0.02, -1, 0, 0, 1, m_bgcolor, o, t); + vertices[2] = video::S3DVertex( 1, 0.45, -1, 0, 0, 1, m_skycolor, o, o); + vertices[3] = video::S3DVertex(-1, 0.45, -1, 0, 0, 1, m_skycolor, t, o); for (video::S3DVertex &vertex : vertices) { if (j == 0) // Don't switch @@ -529,7 +504,7 @@ pointcolor_sun_f.g = pointcolor_light * (float)m_materials[3].EmissiveColor.getGreen() / 255; } else if (!m_default_tint) { - pointcolor_sun_f = m_sky_params.sun_tint; + pointcolor_sun_f = m_sky_params.fog_sun_tint; } else { pointcolor_sun_f.r = pointcolor_light * 1; pointcolor_sun_f.b = pointcolor_light * @@ -548,9 +523,9 @@ ); } else { pointcolor_moon_f = video::SColorf( - (m_sky_params.moon_tint.getRed() / 255) * pointcolor_light, - (m_sky_params.moon_tint.getGreen() / 255) * pointcolor_light, - (m_sky_params.moon_tint.getBlue() / 255) * pointcolor_light, + (m_sky_params.fog_moon_tint.getRed() / 255) * pointcolor_light, + (m_sky_params.fog_moon_tint.getGreen() / 255) * pointcolor_light, + (m_sky_params.fog_moon_tint.getBlue() / 255) * pointcolor_light, 1 ); } @@ -932,17 +907,17 @@ } } -void Sky::setSkyColors(const SkyboxParams sky) +void Sky::setSkyColors(const SkyColor &sky_color) { - m_sky_params.sky_color = sky.sky_color; + m_sky_params.sky_color = sky_color; } void Sky::setHorizonTint(video::SColor sun_tint, video::SColor moon_tint, std::string use_sun_tint) { // Change sun and moon tinting: - m_sky_params.sun_tint = sun_tint; - m_sky_params.moon_tint = moon_tint; + m_sky_params.fog_sun_tint = sun_tint; + m_sky_params.fog_moon_tint = moon_tint; // Faster than comparing strings every rendering frame if (use_sun_tint == "default") m_default_tint = true; diff -Nru minetest-5.2.0/src/client/sky.h minetest-5.3.0/src/client/sky.h --- minetest-5.2.0/src/client/sky.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/sky.h 2020-07-09 21:13:21.000000000 +0000 @@ -94,7 +94,7 @@ m_bgcolor = bgcolor; m_skycolor = skycolor; } - void setSkyColors(const SkyboxParams sky); + void setSkyColors(const SkyColor &sky_color); void setHorizonTint(video::SColor sun_tint, video::SColor moon_tint, std::string use_sun_tint); void setInClouds(bool clouds) { m_in_clouds = clouds; } diff -Nru minetest-5.2.0/src/client/sound_openal.cpp minetest-5.3.0/src/client/sound_openal.cpp --- minetest-5.2.0/src/client/sound_openal.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/sound_openal.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -165,8 +165,8 @@ << "preparing sound buffer" << std::endl; } - infostream << "Audio file " - << filename_for_logging << " loaded" << std::endl; + //infostream << "Audio file " + // << filename_for_logging << " loaded" << std::endl; // Clean up! ov_clear(oggFile); @@ -275,25 +275,38 @@ m_device(nullptr, delete_alcdevice), m_context(nullptr, delete_alccontext) { - if (!(m_device = unique_ptr_alcdevice(alcOpenDevice(nullptr), delete_alcdevice))) - throw std::runtime_error("Audio: Global Initialization: Device Open"); + } + + bool init() + { + if (!(m_device = unique_ptr_alcdevice(alcOpenDevice(nullptr), delete_alcdevice))) { + errorstream << "Audio: Global Initialization: Failed to open device" << std::endl; + return false; + } if (!(m_context = unique_ptr_alccontext( alcCreateContext(m_device.get(), nullptr), delete_alccontext))) { - throw std::runtime_error("Audio: Global Initialization: Context Create"); + errorstream << "Audio: Global Initialization: Failed to create context" << std::endl; + return false; } - if (!alcMakeContextCurrent(m_context.get())) - throw std::runtime_error("Audio: Global Initialization: Context Current"); + if (!alcMakeContextCurrent(m_context.get())) { + errorstream << "Audio: Global Initialization: Failed to make current context" << std::endl; + return false; + } alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED); - if (alGetError() != AL_NO_ERROR) - throw std::runtime_error("Audio: Global Initialization: OpenAL Error"); + if (alGetError() != AL_NO_ERROR) { + errorstream << "Audio: Global Initialization: OpenAL Error " << alGetError() << std::endl; + return false; + } infostream << "Audio: Global Initialized: OpenAL " << alGetString(AL_VERSION) << ", using " << alcGetString(m_device.get(), ALC_DEVICE_SPECIFIER) << std::endl; + + return true; } ~SoundManagerSingleton() @@ -498,9 +511,11 @@ // Remove stopped sounds void maintain() { - verbosestream<<"OpenALSoundManager::maintain(): " - < del_list; for (const auto &sp : m_sounds_playing) { int id = sp.first; @@ -530,7 +545,7 @@ SoundBuffer *buf = load_ogg_from_file(filepath); if (buf) addBuffer(name, buf); - return false; + return !!buf; } bool loadSoundData(const std::string &name, @@ -539,7 +554,7 @@ SoundBuffer *buf = load_ogg_from_buffer(filedata, name); if (buf) addBuffer(name, buf); - return false; + return !!buf; } void updateListener(const v3f &pos, const v3f &vel, const v3f &at, const v3f &up) @@ -680,7 +695,11 @@ std::shared_ptr createSoundManagerSingleton() { - return std::shared_ptr(new SoundManagerSingleton()); + auto smg = std::make_shared(); + if (!smg->init()) { + smg.reset(); + } + return smg; } ISoundManager *createOpenALSoundManager(SoundManagerSingleton *smg, OnDemandSoundFetcher *fetcher) diff -Nru minetest-5.2.0/src/client/tile.cpp minetest-5.3.0/src/client/tile.cpp --- minetest-5.2.0/src/client/tile.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/tile.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -471,8 +471,8 @@ driver->removeTexture(t); } - infostream << "~TextureSource() "<< textures_before << "/" - << driver->getTextureCount() << std::endl; + infostream << "~TextureSource() before cleanup: "<< textures_before + << " after: " << driver->getTextureCount() << std::endl; } u32 TextureSource::getTextureId(const std::string &name) @@ -668,7 +668,14 @@ video::ITexture* TextureSource::getTextureForMesh(const std::string &name, u32 *id) { - return getTexture(name + "^[applyfiltersformesh", id); + static thread_local bool filter_needed = + g_settings->getBool("texture_clean_transparent") || + ((m_setting_trilinear_filter || m_setting_bilinear_filter) && + g_settings->getS32("texture_min_size") > 1); + // Avoid duplicating texture if it won't actually change + if (filter_needed) + return getTexture(name + "^[applyfiltersformesh", id); + return getTexture(name, id); } Palette* TextureSource::getPalette(const std::string &name) @@ -763,6 +770,9 @@ video::IVideoDriver *driver = RenderingEngine::get_video_driver(); sanity_check(driver); + infostream << "TextureSource: recreating " << m_textureinfo_cache.size() + << " textures" << std::endl; + // Recreate textures for (TextureInfo &ti : m_textureinfo_cache) { video::IImage *img = generateImage(ti.name); @@ -1270,8 +1280,6 @@ video::IImage *img = generateImage(filename); if (img) { core::dimension2d dim = img->getDimension(); - infostream<<"Size "< pos_base(x, y); video::IImage *img2 = driver->createImage(video::ECF_A8R8G8B8, dim); @@ -1622,6 +1630,9 @@ */ else if (str_starts_with(part_of_name, "[applyfiltersformesh")) { + /* IMPORTANT: When changing this, getTextureForMesh() needs to be + * updated too. */ + // Apply the "clean transparent" filter, if configured. if (g_settings->getBool("texture_clean_transparent")) imageCleanTransparent(baseimg, 127); diff -Nru minetest-5.2.0/src/client/tile.h minetest-5.3.0/src/client/tile.h --- minetest-5.2.0/src/client/tile.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/tile.h 2020-07-09 21:13:21.000000000 +0000 @@ -150,6 +150,8 @@ TILE_MATERIAL_WAVING_LIQUID_BASIC, TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT, TILE_MATERIAL_WAVING_LIQUID_OPAQUE, + TILE_MATERIAL_PLAIN, + TILE_MATERIAL_PLAIN_ALPHA }; // Material flags diff -Nru minetest-5.2.0/src/client/wieldmesh.cpp minetest-5.3.0/src/client/wieldmesh.cpp --- minetest-5.2.0/src/client/wieldmesh.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/wieldmesh.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -347,7 +347,7 @@ scene::SMesh *mesh = nullptr; if (m_enable_shaders) { - u32 shader_id = shdrsrc->getShader("wielded_shader", TILE_MATERIAL_BASIC, NDT_NORMAL); + u32 shader_id = shdrsrc->getShader("object_shader", TILE_MATERIAL_BASIC, NDT_NORMAL); m_material_type = shdrsrc->getShaderInfo(shader_id).material; } @@ -467,10 +467,29 @@ bc.getGreen() * green / 255, bc.getBlue() * blue / 255); scene::IMeshBuffer *buf = mesh->getMeshBuffer(j); - colorizeMeshBuffer(buf, &buffercolor); + + if (m_enable_shaders) + setMeshBufferColor(buf, buffercolor); + else + colorizeMeshBuffer(buf, &buffercolor); } } +void WieldMeshSceneNode::setNodeLightColor(video::SColor color) +{ + if (!m_meshnode) + return; + + if (m_enable_shaders) { + for (u32 i = 0; i < m_meshnode->getMaterialCount(); ++i) { + video::SMaterial &material = m_meshnode->getMaterial(i); + material.EmissiveColor = color; + } + } + + setColor(color); +} + void WieldMeshSceneNode::render() { // note: if this method is changed to actually do something, diff -Nru minetest-5.2.0/src/client/wieldmesh.h minetest-5.3.0/src/client/wieldmesh.h --- minetest-5.2.0/src/client/wieldmesh.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/client/wieldmesh.h 2020-07-09 21:13:21.000000000 +0000 @@ -87,6 +87,8 @@ // Must only be used if the constructor was called with lighting = false void setColor(video::SColor color); + void setNodeLightColor(video::SColor color); + scene::IMesh *getMesh() { return m_meshnode->getMesh(); } virtual void render(); diff -Nru minetest-5.2.0/src/clientiface.cpp minetest-5.3.0/src/clientiface.cpp --- minetest-5.2.0/src/clientiface.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/clientiface.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -27,7 +27,8 @@ #include "serverenvironment.h" #include "map.h" #include "emerge.h" -#include "content_sao.h" // TODO this is used for cleanup of only +#include "server/luaentity_sao.h" +#include "server/player_sao.h" #include "log.h" #include "util/srp.h" #include "face_position_cache.h" @@ -343,10 +344,10 @@ } /* - If block has been marked to not exist on disk (dummy) - and generating new ones is not wanted, skip block. + If block has been marked to not exist on disk (dummy) or is + not generated and generating new ones is not wanted, skip block. */ - if (!generate && surely_not_found_on_disk) { + if (!generate && (surely_not_found_on_disk || block_is_invalid)) { // get next one. continue; } diff -Nru minetest-5.2.0/src/clientiface.h minetest-5.3.0/src/clientiface.h --- minetest-5.2.0/src/clientiface.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/clientiface.h 2020-07-09 21:13:21.000000000 +0000 @@ -339,12 +339,18 @@ u8 getMinor() const { return m_version_minor; } u8 getPatch() const { return m_version_patch; } const std::string &getFull() const { return m_full_version; } + + void setLangCode(const std::string &code) { m_lang_code = code; } + const std::string &getLangCode() const { return m_lang_code; } private: // Version is stored in here after INIT before INIT2 u8 m_pending_serialization_version = SER_FMT_VER_INVALID; /* current state of client */ ClientState m_state = CS_Created; + + // Client sent language code + std::string m_lang_code; /* Blocks that have been sent to client. diff -Nru minetest-5.2.0/src/clientsimpleobject.h minetest-5.3.0/src/clientsimpleobject.h --- minetest-5.2.0/src/clientsimpleobject.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/clientsimpleobject.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -/* -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 "irrlichttypes_bloated.h" -class ClientEnvironment; - -class ClientSimpleObject -{ -protected: -public: - bool m_to_be_removed = false; - - ClientSimpleObject() = default; - virtual ~ClientSimpleObject() = default; - - virtual void step(float dtime) {} -}; diff -Nru minetest-5.2.0/src/cmake_config.h.in minetest-5.3.0/src/cmake_config.h.in --- minetest-5.2.0/src/cmake_config.h.in 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/cmake_config.h.in 2020-07-09 21:13:21.000000000 +0000 @@ -23,6 +23,7 @@ #cmakedefine01 USE_LEVELDB #cmakedefine01 USE_LUAJIT #cmakedefine01 USE_POSTGRESQL +#cmakedefine01 USE_PROMETHEUS #cmakedefine01 USE_SPATIAL #cmakedefine01 USE_SYSTEM_GMP #cmakedefine01 USE_REDIS @@ -34,3 +35,4 @@ #cmakedefine01 CURSES_HAVE_NCURSES_CURSES_H #cmakedefine01 CURSES_HAVE_NCURSESW_NCURSES_H #cmakedefine01 CURSES_HAVE_NCURSESW_CURSES_H +#cmakedefine01 BUILD_UNITTESTS diff -Nru minetest-5.2.0/src/CMakeLists.txt minetest-5.3.0/src/CMakeLists.txt --- minetest-5.2.0/src/CMakeLists.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/CMakeLists.txt 2020-07-09 21:13:21.000000000 +0000 @@ -6,7 +6,7 @@ INCLUDE(CheckLibraryExists) # Add custom SemiDebug build mode -set(CMAKE_CXX_FLAGS_SEMIDEBUG "-O1 -g -Wall -Wabi" CACHE STRING +set(CMAKE_CXX_FLAGS_SEMIDEBUG "-O1 -g -Wall" CACHE STRING "Flags used by the C++ compiler during semidebug builds." FORCE ) @@ -62,7 +62,7 @@ if(ENABLE_GETTEXT) find_package(GettextLib) - if(GETTEXT_FOUND) + if(GETTEXTLIB_FOUND) if(WIN32) message(STATUS "GetText library: ${GETTEXT_LIBRARY}") message(STATUS "GetText DLL: ${GETTEXT_DLL}") @@ -70,7 +70,7 @@ endif() set(USE_GETTEXT TRUE) message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}") - endif(GETTEXT_FOUND) + endif(GETTEXTLIB_FOUND) else() mark_as_advanced(GETTEXT_ICONV_DLL GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT) message(STATUS "GetText disabled.") @@ -217,6 +217,26 @@ find_package(SQLite3 REQUIRED) +OPTION(ENABLE_PROMETHEUS "Enable prometheus client support" FALSE) +set(USE_PROMETHEUS FALSE) + +if(ENABLE_PROMETHEUS) + find_path(PROMETHEUS_CPP_INCLUDE_DIR NAMES prometheus/counter.h) + find_library(PROMETHEUS_PULL_LIBRARY NAMES prometheus-cpp-pull) + find_library(PROMETHEUS_CORE_LIBRARY NAMES prometheus-cpp-core) + if(PROMETHEUS_CPP_INCLUDE_DIR AND PROMETHEUS_PULL_LIBRARY AND PROMETHEUS_CORE_LIBRARY) + set(PROMETHEUS_LIBRARIES ${PROMETHEUS_PULL_LIBRARY} ${PROMETHEUS_CORE_LIBRARY}) + set(USE_PROMETHEUS TRUE) + include_directories(${PROMETHEUS_CPP_INCLUDE_DIR}) + endif(PROMETHEUS_CPP_INCLUDE_DIR AND PROMETHEUS_PULL_LIBRARY AND PROMETHEUS_CORE_LIBRARY) +endif(ENABLE_PROMETHEUS) + +if(USE_PROMETHEUS) + message(STATUS "Prometheus client enabled.") +else(USE_PROMETHEUS) + message(STATUS "Prometheus client disabled.") +endif(USE_PROMETHEUS) + OPTION(ENABLE_SPATIAL "Enable SpatialIndex AreaStore backend" TRUE) set(USE_SPATIAL FALSE) @@ -375,7 +395,6 @@ collision.cpp content_mapnode.cpp content_nodemeta.cpp - content_sao.cpp convert_json.cpp craftdef.cpp debug.cpp @@ -384,7 +403,6 @@ environment.cpp face_position_cache.cpp filesys.cpp - genericobject.cpp gettext.cpp httpfetch.cpp hud.cpp @@ -409,6 +427,7 @@ noise.cpp objdef.cpp object_properties.cpp + particles.cpp pathfinder.cpp player.cpp porting.cpp @@ -422,10 +441,10 @@ server.cpp serverenvironment.cpp serverlist.cpp - serverobject.cpp settings.cpp staticobject.cpp terminal_chat_console.cpp + texture_override.cpp tileanimation.cpp tool.cpp translation.cpp @@ -437,9 +456,12 @@ ${JTHREAD_SRCS} ${common_SCRIPT_SRCS} ${UTIL_SRCS} - ${UNITTEST_SRCS} ) +if(BUILD_UNITTESTS) + set(common_SRCS ${common_SRCS} ${UNITTEST_SRCS}) +endif() + # This gives us the icon and file version information if(WIN32) @@ -454,7 +476,7 @@ -i${WINRESOURCE_FILE} -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${WINRESOURCE_FILE}) + DEPENDS ${WINRESOURCE_FILE} ${MINETEST_EXE_MANIFEST_FILE}) SET(extra_windows_SRCS ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o) else(MINGW) # Probably MSVC set(extra_windows_SRCS ${WINRESOURCE_FILE} ${MINETEST_EXE_MANIFEST_FILE}) @@ -474,8 +496,12 @@ ${client_network_SRCS} ${client_irrlicht_changes_SRCS} ${client_SCRIPT_SRCS} - ${UNITTEST_CLIENT_SRCS} ) + +if(BUILD_UNITTESTS) + set(client_SRCS ${client_SRCS} ${UNITTEST_CLIENT_SRCS}) +endif() + list(SORT client_SRCS) # Server sources @@ -592,6 +618,9 @@ if (USE_REDIS) target_link_libraries(${PROJECT_NAME} ${REDIS_LIBRARY}) endif() + if (USE_PROMETHEUS) + target_link_libraries(${PROJECT_NAME} ${PROMETHEUS_LIBRARIES}) + endif() if (USE_SPATIAL) target_link_libraries(${PROJECT_NAME} ${SPATIAL_LIBRARY}) endif() @@ -627,6 +656,9 @@ if (USE_REDIS) target_link_libraries(${PROJECT_NAME}server ${REDIS_LIBRARY}) endif() + if (USE_PROMETHEUS) + target_link_libraries(${PROJECT_NAME}server ${PROMETHEUS_LIBRARIES}) + endif() if (USE_SPATIAL) target_link_libraries(${PROJECT_NAME}server ${SPATIAL_LIBRARY}) endif() @@ -649,7 +681,7 @@ option(APPLY_LOCALE_BLACKLIST "Use a blacklist to avoid broken locales" TRUE) -if (GETTEXT_FOUND AND APPLY_LOCALE_BLACKLIST) +if (GETTEXTLIB_FOUND AND APPLY_LOCALE_BLACKLIST) set(GETTEXT_USED_LOCALES "") foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES}) if (NOT ";${GETTEXT_BLACKLISTED_LOCALES};" MATCHES ";${LOCALE};") @@ -661,7 +693,7 @@ # Set some optimizations and tweaks -include(CheckCXXCompilerFlag) +include(CheckCSourceCompiles) if(MSVC) # Visual Studio @@ -671,9 +703,12 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 4) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:SSE") endif() - #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"") - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF") - + + if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF") + else() + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF") + endif() set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup") @@ -695,13 +730,19 @@ else() set(RELEASE_WARNING_FLAGS "") endif() - if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(WARNING_FLAGS "${WARNING_FLAGS} -Wsign-compare") endif() + if(APPLE AND USE_LUAJIT) # required per http://luajit.org/install.html SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000") + elseif(UNIX AND USE_LUAJIT) + check_c_source_compiles("#ifndef __aarch64__\n#error\n#endif\nint main(){}" IS_AARCH64) + if(IS_AARCH64) + # Move text segment below LuaJIT's 47-bit limit (see issue #9367) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Ttext-segment=0x200000000") + endif() endif() if(MINGW) @@ -709,6 +750,11 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN32_LEAN_AND_MEAN") endif() + # Use a safe subset of flags to speed up math calculations: + # - we don't need errno or math exceptions + # - we don't deal with Inf/NaN or signed zero + set(MATH_FLAGS "-fno-math-errno -fno-trapping-math -ffinite-math-only -fno-signed-zeros") + set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -Wall -pipe -funroll-loops") if(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os") @@ -719,11 +765,11 @@ AND CMAKE_CXX_COMPILER_VERSION MATCHES "^9\\.") # Clang 9 has broken -ffast-math on glibc else() - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffast-math") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MATH_FLAGS}") endif() endif(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)") - set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 -Wall -Wabi ${WARNING_FLAGS} ${OTHER_FLAGS}") - set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wabi ${WARNING_FLAGS} ${OTHER_FLAGS}") + set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}") + set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}") if(USE_GPROF) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg") diff -Nru minetest-5.2.0/src/collision.cpp minetest-5.3.0/src/collision.cpp --- minetest-5.2.0/src/collision.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/collision.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -25,35 +25,63 @@ #include "gamedef.h" #ifndef SERVER #include "client/clientenvironment.h" +#include "client/localplayer.h" #endif #include "serverenvironment.h" -#include "serverobject.h" +#include "server/serveractiveobject.h" #include "util/timetaker.h" #include "profiler.h" -// float error is 10 - 9.96875 = 0.03125 -//#define COLL_ZERO 0.032 // broken unit tests -#define COLL_ZERO 0 - +#ifdef __FAST_MATH__ +#warning "-ffast-math is known to cause bugs in collision code, do not use!" +#endif struct NearbyCollisionInfo { - NearbyCollisionInfo(bool is_ul, bool is_obj, int bouncy, - const v3s16 &pos, const aabb3f &box) : + // node + NearbyCollisionInfo(bool is_ul, int bouncy, const v3s16 &pos, + const aabb3f &box) : is_unloaded(is_ul), - is_object(is_obj), + obj(nullptr), bouncy(bouncy), position(pos), box(box) {} + // object + NearbyCollisionInfo(ActiveObject *obj, int bouncy, + const aabb3f &box) : + is_unloaded(false), + obj(obj), + bouncy(bouncy), + box(box) + {} + + inline bool isObject() const { return obj != nullptr; } + bool is_unloaded; bool is_step_up = false; - bool is_object; + ActiveObject *obj; int bouncy; v3s16 position; aabb3f box; }; +// Helper functions: +// Truncate floating point numbers to specified number of decimal places +// in order to move all the floating point error to one side of the correct value +static inline f32 truncate(const f32 val, const f32 factor) +{ + return truncf(val * factor) / factor; +} + +static inline v3f truncate(const v3f& vec, const f32 factor) +{ + return v3f( + truncate(vec.X, factor), + truncate(vec.Y, factor), + truncate(vec.Z, factor) + ); +} // Helper function: // Checks for collision of a moving aabbox with a static aabbox @@ -61,118 +89,101 @@ // The time after which the collision occurs is stored in dtime. CollisionAxis axisAlignedCollision( const aabb3f &staticbox, const aabb3f &movingbox, - const v3f &speed, f32 d, f32 *dtime) + const v3f &speed, f32 *dtime) { //TimeTaker tt("axisAlignedCollision"); - f32 xsize = (staticbox.MaxEdge.X - staticbox.MinEdge.X) - COLL_ZERO; // reduce box size for solve collision stuck (flying sand) - f32 ysize = (staticbox.MaxEdge.Y - staticbox.MinEdge.Y); // - COLL_ZERO; // Y - no sense for falling, but maybe try later - f32 zsize = (staticbox.MaxEdge.Z - staticbox.MinEdge.Z) - COLL_ZERO; - aabb3f relbox( - movingbox.MinEdge.X - staticbox.MinEdge.X, - movingbox.MinEdge.Y - staticbox.MinEdge.Y, - movingbox.MinEdge.Z - staticbox.MinEdge.Z, - movingbox.MaxEdge.X - staticbox.MinEdge.X, - movingbox.MaxEdge.Y - staticbox.MinEdge.Y, - movingbox.MaxEdge.Z - staticbox.MinEdge.Z + (movingbox.MaxEdge.X - movingbox.MinEdge.X) + (staticbox.MaxEdge.X - staticbox.MinEdge.X), // sum of the widths + (movingbox.MaxEdge.Y - movingbox.MinEdge.Y) + (staticbox.MaxEdge.Y - staticbox.MinEdge.Y), + (movingbox.MaxEdge.Z - movingbox.MinEdge.Z) + (staticbox.MaxEdge.Z - staticbox.MinEdge.Z), + std::max(movingbox.MaxEdge.X, staticbox.MaxEdge.X) - std::min(movingbox.MinEdge.X, staticbox.MinEdge.X), //outer bounding 'box' dimensions + std::max(movingbox.MaxEdge.Y, staticbox.MaxEdge.Y) - std::min(movingbox.MinEdge.Y, staticbox.MinEdge.Y), + std::max(movingbox.MaxEdge.Z, staticbox.MaxEdge.Z) - std::min(movingbox.MinEdge.Z, staticbox.MinEdge.Z) ); - if(speed.X > 0) // Check for collision with X- plane - { - if (relbox.MaxEdge.X <= d) { - *dtime = -relbox.MaxEdge.X / speed.X; - if ((relbox.MinEdge.Y + speed.Y * (*dtime) < ysize) && - (relbox.MaxEdge.Y + speed.Y * (*dtime) > COLL_ZERO) && - (relbox.MinEdge.Z + speed.Z * (*dtime) < zsize) && - (relbox.MaxEdge.Z + speed.Z * (*dtime) > COLL_ZERO)) - return COLLISION_AXIS_X; - } - else if(relbox.MinEdge.X > xsize) - { - return COLLISION_AXIS_NONE; - } - } - else if(speed.X < 0) // Check for collision with X+ plane - { - if (relbox.MinEdge.X >= xsize - d) { - *dtime = (xsize - relbox.MinEdge.X) / speed.X; - if ((relbox.MinEdge.Y + speed.Y * (*dtime) < ysize) && - (relbox.MaxEdge.Y + speed.Y * (*dtime) > COLL_ZERO) && - (relbox.MinEdge.Z + speed.Z * (*dtime) < zsize) && - (relbox.MaxEdge.Z + speed.Z * (*dtime) > COLL_ZERO)) - return COLLISION_AXIS_X; + const f32 dtime_max = *dtime; + f32 inner_margin; // the distance of clipping recovery + f32 distance; + f32 time; + + + if (speed.Y) { + distance = relbox.MaxEdge.Y - relbox.MinEdge.Y; + *dtime = distance / std::abs(speed.Y); + time = std::max(*dtime, 0.0f); + + if (*dtime <= dtime_max) { + inner_margin = std::max(-0.5f * (staticbox.MaxEdge.Y - staticbox.MinEdge.Y), -2.0f); + + if ((speed.Y > 0 && staticbox.MinEdge.Y - movingbox.MaxEdge.Y > inner_margin) || + (speed.Y < 0 && movingbox.MinEdge.Y - staticbox.MaxEdge.Y > inner_margin)) { + if ( + (std::max(movingbox.MaxEdge.X + speed.X * time, staticbox.MaxEdge.X) + - std::min(movingbox.MinEdge.X + speed.X * time, staticbox.MinEdge.X) + - relbox.MinEdge.X < 0) && + (std::max(movingbox.MaxEdge.Z + speed.Z * time, staticbox.MaxEdge.Z) + - std::min(movingbox.MinEdge.Z + speed.Z * time, staticbox.MinEdge.Z) + - relbox.MinEdge.Z < 0) + ) + return COLLISION_AXIS_Y; + } } - else if(relbox.MaxEdge.X < 0) - { + else { return COLLISION_AXIS_NONE; } } // NO else if here - if(speed.Y > 0) // Check for collision with Y- plane - { - if (relbox.MaxEdge.Y <= d) { - *dtime = -relbox.MaxEdge.Y / speed.Y; - if ((relbox.MinEdge.X + speed.X * (*dtime) < xsize) && - (relbox.MaxEdge.X + speed.X * (*dtime) > COLL_ZERO) && - (relbox.MinEdge.Z + speed.Z * (*dtime) < zsize) && - (relbox.MaxEdge.Z + speed.Z * (*dtime) > COLL_ZERO)) - return COLLISION_AXIS_Y; - } - else if(relbox.MinEdge.Y > ysize) - { - return COLLISION_AXIS_NONE; - } - } - else if(speed.Y < 0) // Check for collision with Y+ plane - { - if (relbox.MinEdge.Y >= ysize - d) { - *dtime = (ysize - relbox.MinEdge.Y) / speed.Y; - if ((relbox.MinEdge.X + speed.X * (*dtime) < xsize) && - (relbox.MaxEdge.X + speed.X * (*dtime) > COLL_ZERO) && - (relbox.MinEdge.Z + speed.Z * (*dtime) < zsize) && - (relbox.MaxEdge.Z + speed.Z * (*dtime) > COLL_ZERO)) - return COLLISION_AXIS_Y; - } - else if(relbox.MaxEdge.Y < 0) - { + if (speed.X) { + distance = relbox.MaxEdge.X - relbox.MinEdge.X; + *dtime = distance / std::abs(speed.X); + time = std::max(*dtime, 0.0f); + + if (*dtime <= dtime_max) { + inner_margin = std::max(-0.5f * (staticbox.MaxEdge.X - staticbox.MinEdge.X), -2.0f); + + if ((speed.X > 0 && staticbox.MinEdge.X - movingbox.MaxEdge.X > inner_margin) || + (speed.X < 0 && movingbox.MinEdge.X - staticbox.MaxEdge.X > inner_margin)) { + if ( + (std::max(movingbox.MaxEdge.Y + speed.Y * time, staticbox.MaxEdge.Y) + - std::min(movingbox.MinEdge.Y + speed.Y * time, staticbox.MinEdge.Y) + - relbox.MinEdge.Y < 0) && + (std::max(movingbox.MaxEdge.Z + speed.Z * time, staticbox.MaxEdge.Z) + - std::min(movingbox.MinEdge.Z + speed.Z * time, staticbox.MinEdge.Z) + - relbox.MinEdge.Z < 0) + ) + return COLLISION_AXIS_X; + } + } else { return COLLISION_AXIS_NONE; } } // NO else if here - if(speed.Z > 0) // Check for collision with Z- plane - { - if (relbox.MaxEdge.Z <= d) { - *dtime = -relbox.MaxEdge.Z / speed.Z; - if ((relbox.MinEdge.X + speed.X * (*dtime) < xsize) && - (relbox.MaxEdge.X + speed.X * (*dtime) > COLL_ZERO) && - (relbox.MinEdge.Y + speed.Y * (*dtime) < ysize) && - (relbox.MaxEdge.Y + speed.Y * (*dtime) > COLL_ZERO)) - return COLLISION_AXIS_Z; - } - //else if(relbox.MinEdge.Z > zsize) - //{ - // return COLLISION_AXIS_NONE; - //} - } - else if(speed.Z < 0) // Check for collision with Z+ plane - { - if (relbox.MinEdge.Z >= zsize - d) { - *dtime = (zsize - relbox.MinEdge.Z) / speed.Z; - if ((relbox.MinEdge.X + speed.X * (*dtime) < xsize) && - (relbox.MaxEdge.X + speed.X * (*dtime) > COLL_ZERO) && - (relbox.MinEdge.Y + speed.Y * (*dtime) < ysize) && - (relbox.MaxEdge.Y + speed.Y * (*dtime) > COLL_ZERO)) - return COLLISION_AXIS_Z; - } - //else if(relbox.MaxEdge.Z < 0) - //{ - // return COLLISION_AXIS_NONE; - //} + if (speed.Z) { + distance = relbox.MaxEdge.Z - relbox.MinEdge.Z; + *dtime = distance / std::abs(speed.Z); + time = std::max(*dtime, 0.0f); + + if (*dtime <= dtime_max) { + inner_margin = std::max(-0.5f * (staticbox.MaxEdge.Z - staticbox.MinEdge.Z), -2.0f); + + if ((speed.Z > 0 && staticbox.MinEdge.Z - movingbox.MaxEdge.Z > inner_margin) || + (speed.Z < 0 && movingbox.MinEdge.Z - staticbox.MaxEdge.Z > inner_margin)) { + if ( + (std::max(movingbox.MaxEdge.X + speed.X * time, staticbox.MaxEdge.X) + - std::min(movingbox.MinEdge.X + speed.X * time, staticbox.MinEdge.X) + - relbox.MinEdge.X < 0) && + (std::max(movingbox.MaxEdge.Y + speed.Y * time, staticbox.MaxEdge.Y) + - std::min(movingbox.MinEdge.Y + speed.Y * time, staticbox.MinEdge.Y) + - relbox.MinEdge.Y < 0) + ) + return COLLISION_AXIS_Z; + } + } } return COLLISION_AXIS_NONE; @@ -249,6 +260,8 @@ speed_f->X = rangelim(speed_f->X, -5000, 5000); speed_f->Z = rangelim(speed_f->Z, -5000, 5000); + *speed_f = truncate(*speed_f, 10000.0f); + /* Collect node boxes in movement range */ @@ -328,13 +341,13 @@ for (auto box : nodeboxes) { box.MinEdge += posf; box.MaxEdge += posf; - cinfo.emplace_back(false, false, n_bouncy_value, p, box); + cinfo.emplace_back(false, n_bouncy_value, p, box); } } else { // Collide with unloaded nodes (position invalid) and loaded // CONTENT_IGNORE nodes (position valid) aabb3f box = getNodeBox(p, BS); - cinfo.emplace_back(true, false, 0, p, box); + cinfo.emplace_back(true, 0, p, box); } } @@ -379,17 +392,20 @@ // Calculate distance by speed, add own extent and 1.5m of tolerance f32 distance = speed_f->getLength() * dtime + box_0.getExtent().getLength() + 1.5f * BS; - std::vector s_objects; - s_env->getObjectsInsideRadius(s_objects, *pos_f, distance); - - for (u16 obj_id : s_objects) { - ServerActiveObject *current = s_env->getActiveObject(obj_id); - if (!self || (self != current && - self != current->getParent())) { - objects.push_back((ActiveObject*)current); + // search for objects which are not us, or we are not its parent + // we directly use the callback to populate the result to prevent + // a useless result loop here + auto include_obj_cb = [self, &objects] (ServerActiveObject *obj) { + if (!obj->isGone() && + (!self || (self != obj && self != obj->getParent()))) { + objects.push_back((ActiveObject *)obj); } - } + return false; + }; + + std::vector s_objects; + s_env->getObjectsInsideRadius(s_objects, *pos_f, distance, include_obj_cb); } } @@ -397,30 +413,32 @@ iter != objects.end(); ++iter) { ActiveObject *object = *iter; - if (object) { + if (object && object->collideWithObjects()) { aabb3f object_collisionbox; - if (object->getCollisionBox(&object_collisionbox) && - object->collideWithObjects()) { - cinfo.emplace_back(false, true, 0, v3s16(), object_collisionbox); - } + if (object->getCollisionBox(&object_collisionbox)) + cinfo.emplace_back(object, 0, object_collisionbox); } } +#ifndef SERVER + if (self && c_env) { + LocalPlayer *lplayer = c_env->getLocalPlayer(); + if (lplayer->getParent() == nullptr) { + aabb3f lplayer_collisionbox = lplayer->getCollisionbox(); + v3f lplayer_pos = lplayer->getPosition(); + lplayer_collisionbox.MinEdge += lplayer_pos; + lplayer_collisionbox.MaxEdge += lplayer_pos; + ActiveObject *obj = (ActiveObject*) lplayer->getCAO(); + cinfo.emplace_back(obj, 0, lplayer_collisionbox); + } + } +#endif } //tt3 /* Collision detection */ - /* - Collision uncertainty radius - Make it a bit larger than the maximum distance of movement - */ - f32 d = pos_max_d * 1.1f; - // A fairly large value in here makes moving smoother - //f32 d = 0.15*BS; - - // This should always apply, otherwise there are glitches - assert(d > pos_max_d); // invariant + f32 d = 0.0f; int loopcount = 0; @@ -450,9 +468,9 @@ continue; // Find nearest collision of the two boxes (raytracing-like) - f32 dtime_tmp; + f32 dtime_tmp = nearest_dtime; CollisionAxis collided = axisAlignedCollision(box_info.box, - movingbox, *speed_f, d, &dtime_tmp); + movingbox, *speed_f, &dtime_tmp); if (collided == -1 || dtime_tmp >= nearest_dtime) continue; @@ -464,17 +482,24 @@ if (nearest_collided == COLLISION_AXIS_NONE) { // No collision with any collision box. - *pos_f += *speed_f * dtime; + *pos_f += truncate(*speed_f * dtime, 100.0f); dtime = 0; // Set to 0 to avoid "infinite" loop due to small FP numbers } else { // Otherwise, a collision occurred. NearbyCollisionInfo &nearest_info = cinfo[nearest_boxindex]; const aabb3f& cbox = nearest_info.box; + + //movingbox except moved to the horizontal position it would be after step up + aabb3f stepbox = movingbox; + stepbox.MinEdge.X += speed_f->X * dtime; + stepbox.MinEdge.Z += speed_f->Z * dtime; + stepbox.MaxEdge.X += speed_f->X * dtime; + stepbox.MaxEdge.Z += speed_f->Z * dtime; // Check for stairs. bool step_up = (nearest_collided != COLLISION_AXIS_Y) && // must not be Y direction (movingbox.MinEdge.Y < cbox.MaxEdge.Y) && (movingbox.MinEdge.Y + stepheight > cbox.MaxEdge.Y) && - (!wouldCollideWithCeiling(cinfo, movingbox, + (!wouldCollideWithCeiling(cinfo, stepbox, cbox.MaxEdge.Y - movingbox.MinEdge.Y, d)); @@ -483,7 +508,7 @@ // Move to the point of collision and reduce dtime by nearest_dtime if (nearest_dtime < 0) { - // Handle negative nearest_dtime (can be caused by the d allowance) + // Handle negative nearest_dtime if (!step_up) { if (nearest_collided == COLLISION_AXIS_X) pos_f->X += speed_f->X * nearest_dtime; @@ -493,7 +518,7 @@ pos_f->Z += speed_f->Z * nearest_dtime; } } else { - *pos_f += *speed_f * nearest_dtime; + *pos_f += truncate(*speed_f * nearest_dtime, 100.0f); dtime -= nearest_dtime; } @@ -502,12 +527,13 @@ is_collision = false; CollisionInfo info; - if (nearest_info.is_object) + if (nearest_info.isObject()) info.type = COLLISION_OBJECT; else info.type = COLLISION_NODE; info.node_p = nearest_info.position; + info.object = nearest_info.obj; info.old_speed = *speed_f; info.plane = nearest_collided; @@ -562,9 +588,8 @@ Object touches ground if object's minimum Y is near node's maximum Y and object's X-Z-area overlaps with the node's X-Z-area. - - Use 0.15*BS so that it is easier to get on a node. */ + if (cbox.MaxEdge.X - d > box.MinEdge.X && cbox.MinEdge.X + d < box.MaxEdge.X && cbox.MaxEdge.Z - d > box.MinEdge.Z && cbox.MinEdge.Z + d < box.MaxEdge.Z) { @@ -574,10 +599,10 @@ box.MinEdge += *pos_f; box.MaxEdge += *pos_f; } - if (std::fabs(cbox.MaxEdge.Y - box.MinEdge.Y) < 0.15f * BS) { + if (std::fabs(cbox.MaxEdge.Y - box.MinEdge.Y) < 0.05f) { result.touching_ground = true; - if (box_info.is_object) + if (box_info.isObject()) result.standing_on_object = true; } } diff -Nru minetest-5.2.0/src/collision.h minetest-5.3.0/src/collision.h --- minetest-5.2.0/src/collision.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/collision.h 2020-07-09 21:13:21.000000000 +0000 @@ -48,6 +48,7 @@ CollisionType type = COLLISION_NODE; CollisionAxis axis = COLLISION_AXIS_NONE; v3s16 node_p = v3s16(-32768,-32768,-32768); // COLLISION_NODE + ActiveObject *object = nullptr; // COLLISION_OBJECT v3f old_speed; v3f new_speed; int plane = -1; @@ -77,7 +78,7 @@ // dtime receives time until first collision, invalid if -1 is returned CollisionAxis axisAlignedCollision( const aabb3f &staticbox, const aabb3f &movingbox, - const v3f &speed, f32 d, f32 *dtime); + const v3f &speed, f32 *dtime); // Helper function: // Checks if moving the movingbox up by the given distance would hit a ceiling. diff -Nru minetest-5.2.0/src/config.h minetest-5.3.0/src/config.h --- minetest-5.2.0/src/config.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/config.h 2020-07-09 21:13:21.000000000 +0000 @@ -11,12 +11,12 @@ #if defined USE_CMAKE_CONFIG_H #include "cmake_config.h" -#elif defined (__ANDROID__) || defined (ANDROID) +#elif defined (__ANDROID__) #define PROJECT_NAME "minetest" #define PROJECT_NAME_C "Minetest" #define STATIC_SHAREDIR "" - #include "android_version.h" - #ifdef NDEBUG + #define VERSION_STRING STR(VERSION_MAJOR) "." STR(VERSION_MINOR) "." STR(VERSION_PATCH) STR(VERSION_EXTRA) +#ifdef NDEBUG #define BUILD_TYPE "Release" #else #define BUILD_TYPE "Debug" @@ -28,13 +28,3 @@ #define BUILD_TYPE "Debug" #endif #endif - -#define BUILD_INFO \ - "BUILD_TYPE=" BUILD_TYPE "\n" \ - "RUN_IN_PLACE=" STR(RUN_IN_PLACE) "\n" \ - "USE_GETTEXT=" STR(USE_GETTEXT) "\n" \ - "USE_SOUND=" STR(USE_SOUND) "\n" \ - "USE_CURL=" STR(USE_CURL) "\n" \ - "USE_FREETYPE=" STR(USE_FREETYPE) "\n" \ - "USE_LUAJIT=" STR(USE_LUAJIT) "\n" \ - "STATIC_SHAREDIR=" STR(STATIC_SHAREDIR); diff -Nru minetest-5.2.0/src/constants.h minetest-5.3.0/src/constants.h --- minetest-5.2.0/src/constants.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/constants.h 2020-07-09 21:13:21.000000000 +0000 @@ -93,7 +93,7 @@ #define PLAYER_MAX_HP_DEFAULT 20 // Default maximal breath of a player -#define PLAYER_MAX_BREATH_DEFAULT 11 +#define PLAYER_MAX_BREATH_DEFAULT 10 // Number of different files to try to save a player to if the first fails // (because of a case-insensitive filesystem) @@ -110,10 +110,5 @@ GUI related things */ -// TODO: implement dpi-based scaling for windows and remove this hack -#if defined(_WIN32) -#define TTF_DEFAULT_FONT_SIZE (18) -#else #define TTF_DEFAULT_FONT_SIZE (16) -#endif #define DEFAULT_FONT_SIZE (10) diff -Nru minetest-5.2.0/src/content/mods.cpp minetest-5.3.0/src/content/mods.cpp --- minetest-5.2.0/src/content/mods.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/content/mods.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -167,7 +167,7 @@ return result; } -std::vector flattenMods(std::map mods) +std::vector flattenMods(const std::map &mods) { std::vector result; for (const auto &it : mods) { diff -Nru minetest-5.2.0/src/content/mods.h minetest-5.3.0/src/content/mods.h --- minetest-5.2.0/src/content/mods.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/content/mods.h 2020-07-09 21:13:21.000000000 +0000 @@ -68,7 +68,7 @@ const std::string &path, bool part_of_modpack = false); // replaces modpack Modspecs with their content -std::vector flattenMods(std::map mods); +std::vector flattenMods(const std::map &mods); // a ModConfiguration is a subset of installed mods, expected to have // all dependencies fullfilled, so it can be used as a list of mods to diff -Nru minetest-5.2.0/src/content/subgames.cpp minetest-5.3.0/src/content/subgames.cpp --- minetest-5.2.0/src/content/subgames.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/content/subgames.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -253,7 +253,7 @@ worldspaths.insert(porting::path_user + DIR_DELIM + "worlds"); infostream << "Searching worlds..." << std::endl; for (const std::string &worldspath : worldspaths) { - infostream << " In " << worldspath << ": " << std::endl; + infostream << " In " << worldspath << ": "; std::vector dirvector = fs::GetDirListing(worldspath); for (const fs::DirListNode &dln : dirvector) { if (!dln.dir) diff -Nru minetest-5.2.0/src/content_sao.cpp minetest-5.3.0/src/content_sao.cpp --- minetest-5.2.0/src/content_sao.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/content_sao.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1535 +0,0 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include "content_sao.h" -#include "util/serialize.h" -#include "collision.h" -#include "environment.h" -#include "tool.h" // For ToolCapabilities -#include "gamedef.h" -#include "nodedef.h" -#include "remoteplayer.h" -#include "server.h" -#include "scripting_server.h" -#include "genericobject.h" -#include "settings.h" -#include -#include - -std::map ServerActiveObject::m_types; - -/* - TestSAO -*/ - -class TestSAO : public ServerActiveObject -{ -public: - TestSAO(ServerEnvironment *env, v3f pos): - ServerActiveObject(env, pos), - m_timer1(0), - m_age(0) - { - ServerActiveObject::registerType(getType(), create); - } - ActiveObjectType getType() const - { return ACTIVEOBJECT_TYPE_TEST; } - - static ServerActiveObject* create(ServerEnvironment *env, v3f pos, - const std::string &data) - { - return new TestSAO(env, pos); - } - - void step(float dtime, bool send_recommended) - { - m_age += dtime; - if(m_age > 10) - { - m_pending_removal = true; - return; - } - - m_base_position.Y += dtime * BS * 2; - if(m_base_position.Y > 8*BS) - m_base_position.Y = 2*BS; - - if (!send_recommended) - return; - - m_timer1 -= dtime; - if(m_timer1 < 0.0) - { - m_timer1 += 0.125; - - std::string data; - - data += itos(0); // 0 = position - data += " "; - data += itos(m_base_position.X); - data += " "; - data += itos(m_base_position.Y); - data += " "; - data += itos(m_base_position.Z); - - ActiveObjectMessage aom(getId(), false, data); - m_messages_out.push(aom); - } - } - - bool getCollisionBox(aabb3f *toset) const { return false; } - - virtual bool getSelectionBox(aabb3f *toset) const { return false; } - - bool collideWithObjects() const { return false; } - -private: - float m_timer1; - float m_age; -}; - -// Prototype (registers item for deserialization) -TestSAO proto_TestSAO(NULL, v3f(0,0,0)); - -/* - UnitSAO - */ - -UnitSAO::UnitSAO(ServerEnvironment *env, v3f pos): - ServerActiveObject(env, pos) -{ - // Initialize something to armor groups - m_armor_groups["fleshy"] = 100; -} - -ServerActiveObject *UnitSAO::getParent() const -{ - if (!m_attachment_parent_id) - return nullptr; - // Check if the parent still exists - ServerActiveObject *obj = m_env->getActiveObject(m_attachment_parent_id); - - return obj; -} - -void UnitSAO::setArmorGroups(const ItemGroupList &armor_groups) -{ - m_armor_groups = armor_groups; - m_armor_groups_sent = false; -} - -const ItemGroupList &UnitSAO::getArmorGroups() const -{ - return m_armor_groups; -} - -void UnitSAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop) -{ - // store these so they can be updated to clients - m_animation_range = frame_range; - m_animation_speed = frame_speed; - m_animation_blend = frame_blend; - m_animation_loop = frame_loop; - m_animation_sent = false; -} - -void UnitSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop) -{ - *frame_range = m_animation_range; - *frame_speed = m_animation_speed; - *frame_blend = m_animation_blend; - *frame_loop = m_animation_loop; -} - -void UnitSAO::setAnimationSpeed(float frame_speed) -{ - m_animation_speed = frame_speed; - m_animation_speed_sent = false; -} - -void UnitSAO::setBonePosition(const std::string &bone, v3f position, v3f rotation) -{ - // store these so they can be updated to clients - m_bone_position[bone] = core::vector2d(position, rotation); - m_bone_position_sent = false; -} - -void UnitSAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation) -{ - *position = m_bone_position[bone].X; - *rotation = m_bone_position[bone].Y; -} - -void UnitSAO::setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation) -{ - // 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. - - int old_parent = m_attachment_parent_id; - m_attachment_parent_id = parent_id; - m_attachment_bone = bone; - m_attachment_position = position; - m_attachment_rotation = rotation; - m_attachment_sent = false; - - if (parent_id != old_parent) { - onDetach(old_parent); - onAttach(parent_id); - } -} - -void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position, - v3f *rotation) const -{ - *parent_id = m_attachment_parent_id; - *bone = m_attachment_bone; - *position = m_attachment_position; - *rotation = m_attachment_rotation; -} - -void UnitSAO::clearChildAttachments() -{ - for (int child_id : m_attachment_child_ids) { - // 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)); - } - m_attachment_child_ids.clear(); -} - -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); - } else { - setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0)); - } - // Do it - if (parent) - parent->removeAttachmentChild(m_id); -} - -void UnitSAO::addAttachmentChild(int child_id) -{ - m_attachment_child_ids.insert(child_id); -} - -void UnitSAO::removeAttachmentChild(int child_id) -{ - m_attachment_child_ids.erase(child_id); -} - -const std::unordered_set &UnitSAO::getAttachmentChildIds() const -{ - return m_attachment_child_ids; -} - -void UnitSAO::onAttach(int parent_id) -{ - if (!parent_id) - return; - - 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); - } -} - -void UnitSAO::onDetach(int parent_id) -{ - if (!parent_id) - return; - - 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 - - if (parent->getType() == ACTIVEOBJECT_TYPE_LUAENTITY) - m_env->getScriptIface()->luaentity_on_detach_child(parent_id, this); -} - -ObjectProperties* UnitSAO::accessObjectProperties() -{ - return &m_prop; -} - -void UnitSAO::notifyObjectPropertiesModified() -{ - m_properties_sent = false; -} - -/* - LuaEntitySAO -*/ - -// Prototype (registers item for deserialization) -LuaEntitySAO proto_LuaEntitySAO(NULL, v3f(0,0,0), "_prototype", ""); - -LuaEntitySAO::LuaEntitySAO(ServerEnvironment *env, v3f pos, - const std::string &name, const std::string &state): - UnitSAO(env, pos), - m_init_name(name), - m_init_state(state) -{ - // Only register type if no environment supplied - if(env == NULL){ - ServerActiveObject::registerType(getType(), create); - return; - } -} - -LuaEntitySAO::~LuaEntitySAO() -{ - if(m_registered){ - m_env->getScriptIface()->luaentity_Remove(m_id); - } - - for (u32 attached_particle_spawner : m_attached_particle_spawners) { - m_env->deleteParticleSpawner(attached_particle_spawner, false); - } -} - -void LuaEntitySAO::addedToEnvironment(u32 dtime_s) -{ - ServerActiveObject::addedToEnvironment(dtime_s); - - // Create entity from name - m_registered = m_env->getScriptIface()-> - luaentity_Add(m_id, m_init_name.c_str()); - - if(m_registered){ - // Get properties - m_env->getScriptIface()-> - luaentity_GetProperties(m_id, this, &m_prop); - // Initialize HP from properties - m_hp = m_prop.hp_max; - // Activate entity, supplying serialized state - m_env->getScriptIface()-> - luaentity_Activate(m_id, m_init_state, dtime_s); - } else { - m_prop.infotext = m_init_name; - } -} - -ServerActiveObject* LuaEntitySAO::create(ServerEnvironment *env, v3f pos, - const std::string &data) -{ - std::string name; - std::string state; - u16 hp = 1; - v3f velocity; - v3f rotation; - - while (!data.empty()) { // breakable, run for one iteration - std::istringstream is(data, std::ios::binary); - // 'version' does not allow to incrementally extend the parameter list thus - // we need another variable to build on top of 'version=1'. Ugly hack but works™ - u8 version2 = 0; - u8 version = readU8(is); - - name = deSerializeString(is); - state = deSerializeLongString(is); - - if (version < 1) - break; - - hp = readU16(is); - velocity = readV3F1000(is); - // yaw must be yaw to be backwards-compatible - rotation.Y = readF1000(is); - - if (is.good()) // EOF for old formats - version2 = readU8(is); - - if (version2 < 1) // PROTOCOL_VERSION < 37 - break; - - // version2 >= 1 - rotation.X = readF1000(is); - rotation.Z = readF1000(is); - - // if (version2 < 2) - // break; - // - break; - } - // create object - infostream << "LuaEntitySAO::create(name=\"" << name << "\" state=\"" - << state << "\")" << std::endl; - LuaEntitySAO *sao = new LuaEntitySAO(env, pos, name, state); - sao->m_hp = hp; - sao->m_velocity = velocity; - sao->m_rotation = rotation; - return sao; -} - -void LuaEntitySAO::step(float dtime, bool send_recommended) -{ - if(!m_properties_sent) - { - m_properties_sent = true; - std::string str = getPropertyPacket(); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - - // If attached, check that our parent is still there. If it isn't, detach. - if(m_attachment_parent_id && !isAttached()) - { - m_attachment_parent_id = 0; - m_attachment_bone = ""; - m_attachment_position = v3f(0,0,0); - m_attachment_rotation = v3f(0,0,0); - sendPosition(false, true); - } - - m_last_sent_position_timer += dtime; - - // Each frame, parent position is copied if the object is attached, otherwise it's calculated normally - // If the object gets detached this comes into effect automatically from the last known origin - if(isAttached()) - { - v3f pos = m_env->getActiveObject(m_attachment_parent_id)->getBasePosition(); - m_base_position = pos; - m_velocity = v3f(0,0,0); - m_acceleration = v3f(0,0,0); - } - else - { - if(m_prop.physical){ - aabb3f box = m_prop.collisionbox; - box.MinEdge *= BS; - box.MaxEdge *= BS; - collisionMoveResult moveresult; - f32 pos_max_d = BS*0.25; // Distance per iteration - v3f p_pos = m_base_position; - v3f p_velocity = m_velocity; - v3f p_acceleration = m_acceleration; - moveresult = collisionMoveSimple(m_env, m_env->getGameDef(), - pos_max_d, box, m_prop.stepheight, dtime, - &p_pos, &p_velocity, p_acceleration, - this, m_prop.collideWithObjects); - - // Apply results - m_base_position = p_pos; - m_velocity = p_velocity; - m_acceleration = p_acceleration; - } else { - m_base_position += dtime * m_velocity + 0.5 * dtime - * dtime * m_acceleration; - m_velocity += dtime * m_acceleration; - } - - if (m_prop.automatic_face_movement_dir && - (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)) { - float target_yaw = atan2(m_velocity.Z, m_velocity.X) * 180 / M_PI - + m_prop.automatic_face_movement_dir_offset; - float max_rotation_per_sec = - m_prop.automatic_face_movement_max_rotation_per_sec; - - if (max_rotation_per_sec > 0) { - m_rotation.Y = wrapDegrees_0_360(m_rotation.Y); - wrappedApproachShortest(m_rotation.Y, target_yaw, - dtime * max_rotation_per_sec, 360.f); - } else { - // Negative values of max_rotation_per_sec mean disabled. - m_rotation.Y = target_yaw; - } - } - } - - if(m_registered){ - m_env->getScriptIface()->luaentity_Step(m_id, dtime); - } - - if (!send_recommended) - return; - - if(!isAttached()) - { - // TODO: force send when acceleration changes enough? - float minchange = 0.2*BS; - if(m_last_sent_position_timer > 1.0){ - minchange = 0.01*BS; - } else if(m_last_sent_position_timer > 0.2){ - minchange = 0.05*BS; - } - float move_d = m_base_position.getDistanceFrom(m_last_sent_position); - move_d += m_last_sent_move_precision; - float vel_d = m_velocity.getDistanceFrom(m_last_sent_velocity); - if (move_d > minchange || vel_d > minchange || - std::fabs(m_rotation.X - m_last_sent_rotation.X) > 1.0f || - std::fabs(m_rotation.Y - m_last_sent_rotation.Y) > 1.0f || - std::fabs(m_rotation.Z - m_last_sent_rotation.Z) > 1.0f) { - - sendPosition(true, false); - } - } - - if (!m_armor_groups_sent) { - m_armor_groups_sent = true; - std::string str = gob_cmd_update_armor_groups( - m_armor_groups); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - - if (!m_animation_sent) { - m_animation_sent = true; - std::string str = gob_cmd_update_animation( - m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - - if (!m_animation_speed_sent) { - m_animation_speed_sent = true; - std::string str = gob_cmd_update_animation_speed(m_animation_speed); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - - if (!m_bone_position_sent) { - m_bone_position_sent = true; - for (std::unordered_map>::const_iterator - ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){ - std::string str = gob_cmd_update_bone_position((*ii).first, - (*ii).second.X, (*ii).second.Y); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - } - - if (!m_attachment_sent) { - m_attachment_sent = true; - std::string str = gob_cmd_update_attachment(m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } -} - -std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version) -{ - std::ostringstream os(std::ios::binary); - - // PROTOCOL_VERSION >= 37 - writeU8(os, 1); // version - os << serializeString(""); // name - writeU8(os, 0); // is_player - writeU16(os, getId()); //id - writeV3F32(os, m_base_position); - writeV3F32(os, m_rotation); - writeU16(os, m_hp); - - std::ostringstream msg_os(std::ios::binary); - msg_os << serializeLongString(getPropertyPacket()); // message 1 - msg_os << serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2 - msg_os << serializeLongString(gob_cmd_update_animation( - m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3 - for (std::unordered_map>::const_iterator - ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) { - msg_os << serializeLongString(gob_cmd_update_bone_position((*ii).first, - (*ii).second.X, (*ii).second.Y)); // m_bone_position.size - } - msg_os << serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id, - m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4 - int message_count = 4 + m_bone_position.size(); - for (std::unordered_set::const_iterator ii = m_attachment_child_ids.begin(); - (ii != m_attachment_child_ids.end()); ++ii) { - if (ServerActiveObject *obj = m_env->getActiveObject(*ii)) { - message_count++; - // TODO after a protocol bump: only send the object initialization data - // to older clients (superfluous since this message exists) - msg_os << serializeLongString(gob_cmd_update_infant(*ii, obj->getSendType(), - obj->getClientInitializationData(protocol_version))); - } - } - - msg_os << serializeLongString(gob_cmd_set_texture_mod(m_current_texture_modifier)); - message_count++; - - writeU8(os, message_count); - os.write(msg_os.str().c_str(), msg_os.str().size()); - - // return result - return os.str(); -} - -void LuaEntitySAO::getStaticData(std::string *result) const -{ - verbosestream<getScriptIface()-> - luaentity_GetStaticdata(m_id); - os<= 37 - - writeF1000(os, m_rotation.X); - writeF1000(os, m_rotation.Z); - - // - - *result = os.str(); -} - -u16 LuaEntitySAO::punch(v3f dir, - const ToolCapabilities *toolcap, - ServerActiveObject *puncher, - float time_from_last_punch) -{ - if (!m_registered) { - // Delete unknown LuaEntities when punched - m_pending_removal = true; - return 0; - } - - FATAL_ERROR_IF(!puncher, "Punch action called without SAO"); - - s32 old_hp = getHP(); - ItemStack selected_item, hand_item; - ItemStack tool_item = puncher->getWieldedItem(&selected_item, &hand_item); - - PunchDamageResult result = getPunchDamage( - m_armor_groups, - toolcap, - &tool_item, - time_from_last_punch); - - bool damage_handled = m_env->getScriptIface()->luaentity_Punch(m_id, puncher, - time_from_last_punch, toolcap, dir, result.did_punch ? result.damage : 0); - - if (!damage_handled) { - if (result.did_punch) { - setHP((s32)getHP() - result.damage, - PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher)); - - std::string str = gob_cmd_punched(getHP()); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - } - - if (getHP() == 0 && !isGone()) { - clearParentAttachment(); - clearChildAttachments(); - m_env->getScriptIface()->luaentity_on_death(m_id, puncher); - m_pending_removal = true; - } - - actionstream << puncher->getDescription() << " (id=" << puncher->getId() << - ", hp=" << puncher->getHP() << ") punched " << - getDescription() << " (id=" << m_id << ", hp=" << m_hp << - "), damage=" << (old_hp - (s32)getHP()) << - (damage_handled ? " (handled by Lua)" : "") << std::endl; - - // TODO: give Lua control over wear - return result.wear; -} - -void LuaEntitySAO::rightClick(ServerActiveObject *clicker) -{ - if (!m_registered) - return; - - m_env->getScriptIface()->luaentity_Rightclick(m_id, clicker); -} - -void LuaEntitySAO::setPos(const v3f &pos) -{ - if(isAttached()) - return; - m_base_position = pos; - sendPosition(false, true); -} - -void LuaEntitySAO::moveTo(v3f pos, bool continuous) -{ - if(isAttached()) - return; - m_base_position = pos; - if(!continuous) - sendPosition(true, true); -} - -float LuaEntitySAO::getMinimumSavedMovement() -{ - return 0.1 * BS; -} - -std::string LuaEntitySAO::getDescription() -{ - std::ostringstream os(std::ios::binary); - os<<"LuaEntitySAO at ("; - os<<(m_base_position.X/BS)<<","; - os<<(m_base_position.Y/BS)<<","; - os<<(m_base_position.Z/BS); - os<<")"; - return os.str(); -} - -void LuaEntitySAO::setHP(s32 hp, const PlayerHPChangeReason &reason) -{ - m_hp = rangelim(hp, 0, U16_MAX); -} - -u16 LuaEntitySAO::getHP() const -{ - return m_hp; -} - -void LuaEntitySAO::setVelocity(v3f velocity) -{ - m_velocity = velocity; -} - -v3f LuaEntitySAO::getVelocity() -{ - return m_velocity; -} - -void LuaEntitySAO::setAcceleration(v3f acceleration) -{ - m_acceleration = acceleration; -} - -v3f LuaEntitySAO::getAcceleration() -{ - return m_acceleration; -} - -void LuaEntitySAO::setTextureMod(const std::string &mod) -{ - std::string str = gob_cmd_set_texture_mod(mod); - m_current_texture_modifier = mod; - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); -} - -std::string LuaEntitySAO::getTextureMod() const -{ - return m_current_texture_modifier; -} - -void LuaEntitySAO::setSprite(v2s16 p, int num_frames, float framelength, - bool select_horiz_by_yawpitch) -{ - std::string str = gob_cmd_set_sprite( - p, - num_frames, - framelength, - select_horiz_by_yawpitch - ); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); -} - -std::string LuaEntitySAO::getName() -{ - return m_init_name; -} - -std::string LuaEntitySAO::getPropertyPacket() -{ - return gob_cmd_set_properties(m_prop); -} - -void LuaEntitySAO::sendPosition(bool do_interpolate, bool is_movement_end) -{ - // If the object is attached client-side, don't waste bandwidth sending its position to clients - if(isAttached()) - return; - - m_last_sent_move_precision = m_base_position.getDistanceFrom( - m_last_sent_position); - m_last_sent_position_timer = 0; - m_last_sent_position = m_base_position; - m_last_sent_velocity = m_velocity; - //m_last_sent_acceleration = m_acceleration; - m_last_sent_rotation = m_rotation; - - float update_interval = m_env->getSendRecommendedInterval(); - - std::string str = gob_cmd_update_position( - m_base_position, - m_velocity, - m_acceleration, - m_rotation, - do_interpolate, - is_movement_end, - update_interval - ); - // create message and add to list - ActiveObjectMessage aom(getId(), false, str); - m_messages_out.push(aom); -} - -bool LuaEntitySAO::getCollisionBox(aabb3f *toset) const -{ - if (m_prop.physical) - { - //update collision box - toset->MinEdge = m_prop.collisionbox.MinEdge * BS; - toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS; - - toset->MinEdge += m_base_position; - toset->MaxEdge += m_base_position; - - return true; - } - - return false; -} - -bool LuaEntitySAO::getSelectionBox(aabb3f *toset) const -{ - if (!m_prop.is_visible || !m_prop.pointable) { - return false; - } - - toset->MinEdge = m_prop.selectionbox.MinEdge * BS; - toset->MaxEdge = m_prop.selectionbox.MaxEdge * BS; - - return true; -} - -bool LuaEntitySAO::collideWithObjects() const -{ - return m_prop.collideWithObjects; -} - -/* - PlayerSAO -*/ - -// No prototype, PlayerSAO does not need to be deserialized - -PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t peer_id_, - bool is_singleplayer): - UnitSAO(env_, v3f(0,0,0)), - m_player(player_), - m_peer_id(peer_id_), - m_is_singleplayer(is_singleplayer) -{ - SANITY_CHECK(m_peer_id != PEER_ID_INEXISTENT); - - m_prop.hp_max = PLAYER_MAX_HP_DEFAULT; - m_prop.breath_max = PLAYER_MAX_BREATH_DEFAULT; - m_prop.physical = false; - m_prop.collisionbox = aabb3f(-0.3f, 0.0f, -0.3f, 0.3f, 1.77f, 0.3f); - m_prop.selectionbox = aabb3f(-0.3f, 0.0f, -0.3f, 0.3f, 1.77f, 0.3f); - m_prop.pointable = true; - // Start of default appearance, this should be overwritten by Lua - m_prop.visual = "upright_sprite"; - m_prop.visual_size = v3f(1, 2, 1); - m_prop.textures.clear(); - m_prop.textures.emplace_back("player.png"); - m_prop.textures.emplace_back("player_back.png"); - m_prop.colors.clear(); - m_prop.colors.emplace_back(255, 255, 255, 255); - m_prop.spritediv = v2s16(1,1); - m_prop.eye_height = 1.625f; - // End of default appearance - m_prop.is_visible = true; - m_prop.backface_culling = false; - m_prop.makes_footstep_sound = true; - m_prop.stepheight = PLAYER_DEFAULT_STEPHEIGHT * BS; - m_hp = m_prop.hp_max; - m_breath = m_prop.breath_max; - // Disable zoom in survival mode using a value of 0 - m_prop.zoom_fov = g_settings->getBool("creative_mode") ? 15.0f : 0.0f; - - if (!g_settings->getBool("enable_damage")) - m_armor_groups["immortal"] = 1; -} - -void PlayerSAO::finalize(RemotePlayer *player, const std::set &privs) -{ - assert(player); - m_player = player; - m_privs = privs; -} - -v3f PlayerSAO::getEyeOffset() const -{ - return v3f(0, BS * m_prop.eye_height, 0); -} - -std::string PlayerSAO::getDescription() -{ - return std::string("player ") + m_player->getName(); -} - -// Called after id has been set and has been inserted in environment -void PlayerSAO::addedToEnvironment(u32 dtime_s) -{ - ServerActiveObject::addedToEnvironment(dtime_s); - ServerActiveObject::setBasePosition(m_base_position); - m_player->setPlayerSAO(this); - m_player->setPeerId(m_peer_id); - m_last_good_position = m_base_position; -} - -// Called before removing from environment -void PlayerSAO::removingFromEnvironment() -{ - ServerActiveObject::removingFromEnvironment(); - if (m_player->getPlayerSAO() == this) { - unlinkPlayerSessionAndSave(); - for (u32 attached_particle_spawner : m_attached_particle_spawners) { - m_env->deleteParticleSpawner(attached_particle_spawner, false); - } - } -} - -std::string PlayerSAO::getClientInitializationData(u16 protocol_version) -{ - std::ostringstream os(std::ios::binary); - - // Protocol >= 15 - writeU8(os, 1); // version - os << serializeString(m_player->getName()); // name - writeU8(os, 1); // is_player - writeS16(os, getId()); // id - writeV3F32(os, m_base_position); - writeV3F32(os, m_rotation); - writeU16(os, getHP()); - - std::ostringstream msg_os(std::ios::binary); - msg_os << serializeLongString(getPropertyPacket()); // message 1 - msg_os << serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2 - msg_os << serializeLongString(gob_cmd_update_animation( - m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3 - for (std::unordered_map>::const_iterator - ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) { - msg_os << serializeLongString(gob_cmd_update_bone_position((*ii).first, - (*ii).second.X, (*ii).second.Y)); // m_bone_position.size - } - msg_os << serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id, - m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4 - msg_os << serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed, - m_physics_override_jump, m_physics_override_gravity, m_physics_override_sneak, - m_physics_override_sneak_glitch, m_physics_override_new_move)); // 5 - // (GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) : Deprecated, for backwards compatibility only. - msg_os << serializeLongString(gob_cmd_update_nametag_attributes(m_prop.nametag_color)); // 6 - int message_count = 6 + m_bone_position.size(); - for (std::unordered_set::const_iterator ii = m_attachment_child_ids.begin(); - ii != m_attachment_child_ids.end(); ++ii) { - if (ServerActiveObject *obj = m_env->getActiveObject(*ii)) { - message_count++; - msg_os << serializeLongString(gob_cmd_update_infant(*ii, obj->getSendType(), - obj->getClientInitializationData(protocol_version))); - } - } - - writeU8(os, message_count); - os.write(msg_os.str().c_str(), msg_os.str().size()); - - // return result - return os.str(); -} - -void PlayerSAO::getStaticData(std::string * result) const -{ - FATAL_ERROR("Obsolete function"); -} - -void PlayerSAO::step(float dtime, bool send_recommended) -{ - if (!isImmortal() && 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); - const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n); - // If node generates drown - if (c.drowning > 0 && m_hp > 0) { - if (m_breath > 0) - setBreath(m_breath - 1); - - // No more breath, damage player - if (m_breath == 0) { - PlayerHPChangeReason reason(PlayerHPChangeReason::DROWNING); - setHP(m_hp - c.drowning, reason); - m_env->getGameDef()->SendPlayerHPOrDie(this, reason); - } - } - } - - if (m_breathing_interval.step(dtime, 0.5f) && !isImmortal()) { - // Get nose/mouth position, approximate with eye position - v3s16 p = floatToInt(getEyePosition(), BS); - MapNode n = m_env->getMap().getNode(p); - const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n); - // If player is alive & not drowning & not in ignore & not immortal, breathe - if (m_breath < m_prop.breath_max && c.drowning == 0 && - n.getContent() != CONTENT_IGNORE && m_hp > 0) - setBreath(m_breath + 1); - } - - if (!isImmortal() && m_node_hurt_interval.step(dtime, 1.0f)) { - u32 damage_per_second = 0; - std::string nodename; - // Lowest and highest damage points are 0.1 within collisionbox - float dam_top = m_prop.collisionbox.MaxEdge.Y - 0.1f; - - // Sequence of damage points, starting 0.1 above feet and progressing - // upwards in 1 node intervals, stopping below top damage point. - for (float dam_height = 0.1f; dam_height < dam_top; dam_height++) { - v3s16 p = floatToInt(m_base_position + - v3f(0.0f, dam_height * BS, 0.0f), BS); - MapNode n = m_env->getMap().getNode(p); - const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n); - if (c.damage_per_second > damage_per_second) { - damage_per_second = c.damage_per_second; - nodename = c.name; - } - } - - // Top damage point - v3s16 ptop = floatToInt(m_base_position + - v3f(0.0f, dam_top * BS, 0.0f), BS); - MapNode ntop = m_env->getMap().getNode(ptop); - const ContentFeatures &c = m_env->getGameDef()->ndef()->get(ntop); - if (c.damage_per_second > damage_per_second) { - damage_per_second = c.damage_per_second; - nodename = c.name; - } - - if (damage_per_second != 0 && m_hp > 0) { - s32 newhp = (s32)m_hp - (s32)damage_per_second; - PlayerHPChangeReason reason(PlayerHPChangeReason::NODE_DAMAGE, nodename); - setHP(newhp, reason); - m_env->getGameDef()->SendPlayerHPOrDie(this, reason); - } - } - - if (!m_properties_sent) { - m_properties_sent = true; - std::string str = getPropertyPacket(); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - m_env->getScriptIface()->player_event(this, "properties_changed"); - } - - // If attached, check that our parent is still there. If it isn't, detach. - if (m_attachment_parent_id && !isAttached()) { - m_attachment_parent_id = 0; - m_attachment_bone = ""; - m_attachment_position = v3f(0.0f, 0.0f, 0.0f); - m_attachment_rotation = v3f(0.0f, 0.0f, 0.0f); - setBasePosition(m_last_good_position); - m_env->getGameDef()->SendMovePlayer(m_peer_id); - } - - //dstream<<"PlayerSAO::step: dtime: "<getMaxLagEstimate() * 2.0f; - if(lag_pool_max < LAG_POOL_MIN) - lag_pool_max = LAG_POOL_MIN; - m_dig_pool.setMax(lag_pool_max); - m_move_pool.setMax(lag_pool_max); - - // Increment cheat prevention timers - m_dig_pool.add(dtime); - m_move_pool.add(dtime); - m_time_from_last_teleport += dtime; - m_time_from_last_punch += dtime; - m_nocheat_dig_time += dtime; - m_max_speed_override_time = MYMAX(m_max_speed_override_time - dtime, 0.0f); - - // Each frame, parent position is copied if the object is attached, - // otherwise it's calculated normally. - // If the object gets detached this comes into effect automatically from - // the last known origin. - if (isAttached()) { - v3f pos = m_env->getActiveObject(m_attachment_parent_id)->getBasePosition(); - m_last_good_position = pos; - setBasePosition(pos); - } - - if (!send_recommended) - return; - - if (m_position_not_sent) { - m_position_not_sent = false; - float update_interval = m_env->getSendRecommendedInterval(); - v3f pos; - // When attached, the position is only sent to clients where the - // parent isn't known - if (isAttached()) - pos = m_last_good_position; - else - pos = m_base_position; - - std::string str = gob_cmd_update_position( - pos, - v3f(0.0f, 0.0f, 0.0f), - v3f(0.0f, 0.0f, 0.0f), - m_rotation, - true, - false, - update_interval - ); - // create message and add to list - ActiveObjectMessage aom(getId(), false, str); - m_messages_out.push(aom); - } - - if (!m_armor_groups_sent) { - m_armor_groups_sent = true; - std::string str = gob_cmd_update_armor_groups( - m_armor_groups); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - - if (!m_physics_override_sent) { - m_physics_override_sent = true; - std::string str = gob_cmd_update_physics_override(m_physics_override_speed, - m_physics_override_jump, m_physics_override_gravity, - m_physics_override_sneak, m_physics_override_sneak_glitch, - m_physics_override_new_move); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - - if (!m_animation_sent) { - m_animation_sent = true; - std::string str = gob_cmd_update_animation( - m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - - if (!m_bone_position_sent) { - m_bone_position_sent = true; - for (std::unordered_map>::const_iterator - ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) { - std::string str = gob_cmd_update_bone_position((*ii).first, - (*ii).second.X, (*ii).second.Y); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - } - - if (!m_attachment_sent) { - m_attachment_sent = true; - std::string str = gob_cmd_update_attachment(m_attachment_parent_id, - m_attachment_bone, m_attachment_position, m_attachment_rotation); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } -} - -void PlayerSAO::setBasePosition(const v3f &position) -{ - if (m_player && position != m_base_position) - m_player->setDirty(true); - - // This needs to be ran for attachments too - ServerActiveObject::setBasePosition(position); - - // Updating is not wanted/required for player migration - if (m_env) { - m_position_not_sent = true; - } -} - -void PlayerSAO::setPos(const v3f &pos) -{ - if(isAttached()) - return; - - // Send mapblock of target location - v3s16 blockpos = v3s16(pos.X / MAP_BLOCKSIZE, pos.Y / MAP_BLOCKSIZE, pos.Z / MAP_BLOCKSIZE); - m_env->getGameDef()->SendBlock(m_peer_id, blockpos); - - setBasePosition(pos); - // Movement caused by this command is always valid - m_last_good_position = pos; - m_move_pool.empty(); - m_time_from_last_teleport = 0.0; - m_env->getGameDef()->SendMovePlayer(m_peer_id); -} - -void PlayerSAO::moveTo(v3f pos, bool continuous) -{ - if(isAttached()) - return; - - setBasePosition(pos); - // Movement caused by this command is always valid - m_last_good_position = pos; - m_move_pool.empty(); - m_time_from_last_teleport = 0.0; - m_env->getGameDef()->SendMovePlayer(m_peer_id); -} - -void PlayerSAO::setPlayerYaw(const float yaw) -{ - v3f rotation(0, yaw, 0); - if (m_player && yaw != m_rotation.Y) - m_player->setDirty(true); - - // Set player model yaw, not look view - UnitSAO::setRotation(rotation); -} - -void PlayerSAO::setFov(const float fov) -{ - if (m_player && fov != m_fov) - m_player->setDirty(true); - - m_fov = fov; -} - -void PlayerSAO::setWantedRange(const s16 range) -{ - if (m_player && range != m_wanted_range) - m_player->setDirty(true); - - m_wanted_range = range; -} - -void PlayerSAO::setPlayerYawAndSend(const float yaw) -{ - setPlayerYaw(yaw); - m_env->getGameDef()->SendMovePlayer(m_peer_id); -} - -void PlayerSAO::setLookPitch(const float pitch) -{ - if (m_player && pitch != m_pitch) - m_player->setDirty(true); - - m_pitch = pitch; -} - -void PlayerSAO::setLookPitchAndSend(const float pitch) -{ - setLookPitch(pitch); - m_env->getGameDef()->SendMovePlayer(m_peer_id); -} - -u16 PlayerSAO::punch(v3f dir, - const ToolCapabilities *toolcap, - ServerActiveObject *puncher, - float time_from_last_punch) -{ - if (!toolcap) - return 0; - - FATAL_ERROR_IF(!puncher, "Punch action called without SAO"); - - // No effect if PvP disabled or if immortal - if (isImmortal() || !g_settings->getBool("enable_pvp")) { - if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - std::string str = gob_cmd_punched(getHP()); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - return 0; - } - } - - s32 old_hp = getHP(); - HitParams hitparams = getHitParams(m_armor_groups, toolcap, - time_from_last_punch); - - PlayerSAO *playersao = m_player->getPlayerSAO(); - - bool damage_handled = m_env->getScriptIface()->on_punchplayer(playersao, - puncher, time_from_last_punch, toolcap, dir, - hitparams.hp); - - if (!damage_handled) { - setHP((s32)getHP() - (s32)hitparams.hp, - PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher)); - } else { // override client prediction - if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - std::string str = gob_cmd_punched(getHP()); - // create message and add to list - ActiveObjectMessage aom(getId(), true, str); - m_messages_out.push(aom); - } - } - - actionstream << puncher->getDescription() << " (id=" << puncher->getId() << - ", hp=" << puncher->getHP() << ") punched " << - getDescription() << " (id=" << m_id << ", hp=" << m_hp << - "), damage=" << (old_hp - (s32)getHP()) << - (damage_handled ? " (handled by Lua)" : "") << std::endl; - - return hitparams.wear; -} - -void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason) -{ - s32 oldhp = m_hp; - - hp = rangelim(hp, 0, m_prop.hp_max); - - if (oldhp != hp) { - s32 hp_change = m_env->getScriptIface()->on_player_hpchange(this, hp - oldhp, reason); - if (hp_change == 0) - return; - - hp = rangelim(oldhp + hp_change, 0, m_prop.hp_max); - } - - if (hp < oldhp && isImmortal()) - return; - - m_hp = hp; - - // Update properties on death - if ((hp == 0) != (oldhp == 0)) - m_properties_sent = false; -} - -void PlayerSAO::setBreath(const u16 breath, bool send) -{ - if (m_player && breath != m_breath) - m_player->setDirty(true); - - m_breath = rangelim(breath, 0, m_prop.breath_max); - - if (send) - m_env->getGameDef()->SendPlayerBreath(this); -} - -Inventory *PlayerSAO::getInventory() const -{ - return m_player ? &m_player->inventory : nullptr; -} - -InventoryLocation PlayerSAO::getInventoryLocation() const -{ - InventoryLocation loc; - loc.setPlayer(m_player->getName()); - return loc; -} - -u16 PlayerSAO::getWieldIndex() const -{ - return m_player->getWieldIndex(); -} - -ItemStack PlayerSAO::getWieldedItem(ItemStack *selected, ItemStack *hand) const -{ - return m_player->getWieldedItem(selected, hand); -} - -bool PlayerSAO::setWieldedItem(const ItemStack &item) -{ - InventoryList *mlist = m_player->inventory.getList(getWieldList()); - if (mlist) { - mlist->changeItem(m_player->getWieldIndex(), item); - return true; - } - return false; -} - -void PlayerSAO::disconnected() -{ - m_peer_id = PEER_ID_INEXISTENT; - m_pending_removal = true; -} - -void PlayerSAO::unlinkPlayerSessionAndSave() -{ - assert(m_player->getPlayerSAO() == this); - m_player->setPeerId(PEER_ID_INEXISTENT); - m_env->savePlayer(m_player); - m_player->setPlayerSAO(NULL); - m_env->removePlayer(m_player); -} - -std::string PlayerSAO::getPropertyPacket() -{ - m_prop.is_visible = (true); - return gob_cmd_set_properties(m_prop); -} - -void PlayerSAO::setMaxSpeedOverride(const v3f &vel) -{ - if (m_max_speed_override_time == 0.0f) - m_max_speed_override = vel; - else - m_max_speed_override += vel; - if (m_player) { - float accel = MYMIN(m_player->movement_acceleration_default, - m_player->movement_acceleration_air); - m_max_speed_override_time = m_max_speed_override.getLength() / accel / BS; - } -} - -bool PlayerSAO::checkMovementCheat() -{ - if (isAttached() || m_is_singleplayer || - g_settings->getBool("disable_anticheat")) { - m_last_good_position = m_base_position; - return false; - } - - bool cheated = false; - /* - Check player movements - - NOTE: Actually the server should handle player physics like the - client does and compare player's position to what is calculated - on our side. This is required when eg. players fly due to an - explosion. Altough a node-based alternative might be possible - too, and much more lightweight. - */ - - float override_max_H, override_max_V; - if (m_max_speed_override_time > 0.0f) { - override_max_H = MYMAX(fabs(m_max_speed_override.X), fabs(m_max_speed_override.Z)); - override_max_V = fabs(m_max_speed_override.Y); - } else { - override_max_H = override_max_V = 0.0f; - } - - float player_max_walk = 0; // horizontal movement - float player_max_jump = 0; // vertical upwards movement - - if (m_privs.count("fast") != 0) - player_max_walk = m_player->movement_speed_fast; // Fast speed - else - player_max_walk = m_player->movement_speed_walk; // Normal speed - player_max_walk *= m_physics_override_speed; - player_max_walk = MYMAX(player_max_walk, override_max_H); - - player_max_jump = m_player->movement_speed_jump * m_physics_override_jump; - // FIXME: Bouncy nodes cause practically unbound increase in Y speed, - // until this can be verified correctly, tolerate higher jumping speeds - player_max_jump *= 2.0; - player_max_jump = MYMAX(player_max_jump, override_max_V); - - // Don't divide by zero! - if (player_max_walk < 0.0001f) - player_max_walk = 0.0001f; - if (player_max_jump < 0.0001f) - player_max_jump = 0.0001f; - - v3f diff = (m_base_position - m_last_good_position); - float d_vert = diff.Y; - diff.Y = 0; - float d_horiz = diff.getLength(); - float required_time = d_horiz / player_max_walk; - - // FIXME: Checking downwards movement is not easily possible currently, - // the server could calculate speed differences to examine the gravity - if (d_vert > 0) { - // In certain cases (water, ladders) walking speed is applied vertically - float s = MYMAX(player_max_jump, player_max_walk); - required_time = MYMAX(required_time, d_vert / s); - } - - if (m_move_pool.grab(required_time)) { - m_last_good_position = m_base_position; - } else { - const float LAG_POOL_MIN = 5.0; - float lag_pool_max = m_env->getMaxLagEstimate() * 2.0; - lag_pool_max = MYMAX(lag_pool_max, LAG_POOL_MIN); - if (m_time_from_last_teleport > lag_pool_max) { - actionstream << "Player " << m_player->getName() - << " moved too fast; resetting position" - << std::endl; - cheated = true; - } - setBasePosition(m_last_good_position); - } - return cheated; -} - -bool PlayerSAO::getCollisionBox(aabb3f *toset) const -{ - //update collision box - toset->MinEdge = m_prop.collisionbox.MinEdge * BS; - toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS; - - toset->MinEdge += m_base_position; - toset->MaxEdge += m_base_position; - return true; -} - -bool PlayerSAO::getSelectionBox(aabb3f *toset) const -{ - if (!m_prop.is_visible || !m_prop.pointable) { - return false; - } - - toset->MinEdge = m_prop.selectionbox.MinEdge * BS; - toset->MaxEdge = m_prop.selectionbox.MaxEdge * BS; - - return true; -} - -float PlayerSAO::getZoomFOV() const -{ - return m_prop.zoom_fov; -} diff -Nru minetest-5.2.0/src/content_sao.h minetest-5.3.0/src/content_sao.h --- minetest-5.2.0/src/content_sao.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/content_sao.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,471 +0,0 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#pragma once - -#include "network/networkprotocol.h" -#include "util/numeric.h" -#include "serverobject.h" -#include "itemgroup.h" -#include "object_properties.h" -#include "constants.h" - -class UnitSAO: public ServerActiveObject -{ -public: - UnitSAO(ServerEnvironment *env, v3f pos); - virtual ~UnitSAO() = default; - - void setRotation(v3f rotation) { m_rotation = rotation; } - const v3f &getRotation() const { return m_rotation; } - v3f getRadRotation() { return m_rotation * core::DEGTORAD; } - - // Deprecated - f32 getRadYawDep() const { return (m_rotation.Y + 90.) * core::DEGTORAD; } - - u16 getHP() const { return m_hp; } - // Use a function, if isDead can be defined by other conditions - bool isDead() const { return m_hp == 0; } - - inline bool isAttached() const - { return getParent(); } - - inline bool isImmortal() const - { return itemgroup_get(getArmorGroups(), "immortal"); } - - void setArmorGroups(const ItemGroupList &armor_groups); - const ItemGroupList &getArmorGroups() const; - void setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop); - void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop); - void setAnimationSpeed(float frame_speed); - void setBonePosition(const std::string &bone, v3f position, v3f rotation); - void getBonePosition(const std::string &bone, v3f *position, v3f *rotation); - void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation); - void getAttachment(int *parent_id, std::string *bone, v3f *position, - v3f *rotation) const; - void clearChildAttachments(); - void clearParentAttachment(); - void addAttachmentChild(int child_id); - void removeAttachmentChild(int child_id); - const std::unordered_set &getAttachmentChildIds() const; - ServerActiveObject *getParent() const; - ObjectProperties* accessObjectProperties(); - void notifyObjectPropertiesModified(); -protected: - u16 m_hp = 1; - - v3f m_rotation; - - bool m_properties_sent = true; - ObjectProperties m_prop; - - ItemGroupList m_armor_groups; - bool m_armor_groups_sent = false; - - v2f m_animation_range; - float m_animation_speed = 0.0f; - float m_animation_blend = 0.0f; - bool m_animation_loop = true; - bool m_animation_sent = false; - bool m_animation_speed_sent = false; - - // Stores position and rotation for each bone name - std::unordered_map> m_bone_position; - bool m_bone_position_sent = false; - - int 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; - bool m_attachment_sent = false; -private: - void onAttach(int parent_id); - void onDetach(int parent_id); -}; - -/* - LuaEntitySAO needs some internals exposed. -*/ - -class LuaEntitySAO : public UnitSAO -{ -public: - LuaEntitySAO(ServerEnvironment *env, v3f pos, - const std::string &name, const std::string &state); - ~LuaEntitySAO(); - ActiveObjectType getType() const - { return ACTIVEOBJECT_TYPE_LUAENTITY; } - ActiveObjectType getSendType() const - { return ACTIVEOBJECT_TYPE_GENERIC; } - virtual void addedToEnvironment(u32 dtime_s); - static ServerActiveObject* create(ServerEnvironment *env, v3f pos, - const std::string &data); - void step(float dtime, bool send_recommended); - std::string getClientInitializationData(u16 protocol_version); - bool isStaticAllowed() const - { return m_prop.static_save; } - void getStaticData(std::string *result) const; - u16 punch(v3f dir, - const ToolCapabilities *toolcap = nullptr, - ServerActiveObject *puncher = nullptr, - float time_from_last_punch = 1000000.0f); - void rightClick(ServerActiveObject *clicker); - void setPos(const v3f &pos); - void moveTo(v3f pos, bool continuous); - float getMinimumSavedMovement(); - std::string getDescription(); - void setHP(s32 hp, const PlayerHPChangeReason &reason); - u16 getHP() const; - - /* LuaEntitySAO-specific */ - void setVelocity(v3f velocity); - void addVelocity(v3f velocity) - { - m_velocity += velocity; - } - v3f getVelocity(); - void setAcceleration(v3f acceleration); - v3f getAcceleration(); - - void setTextureMod(const std::string &mod); - std::string getTextureMod() const; - void setSprite(v2s16 p, int num_frames, float framelength, - bool select_horiz_by_yawpitch); - std::string getName(); - bool getCollisionBox(aabb3f *toset) const; - bool getSelectionBox(aabb3f *toset) const; - bool collideWithObjects() const; -private: - std::string getPropertyPacket(); - void sendPosition(bool do_interpolate, bool is_movement_end); - - std::string m_init_name; - std::string m_init_state; - bool m_registered = false; - - v3f m_velocity; - v3f m_acceleration; - - v3f m_last_sent_position; - v3f m_last_sent_velocity; - v3f m_last_sent_rotation; - float m_last_sent_position_timer = 0.0f; - float m_last_sent_move_precision = 0.0f; - std::string m_current_texture_modifier = ""; -}; - -/* - PlayerSAO needs some internals exposed. -*/ - -class LagPool -{ - float m_pool = 15.0f; - float m_max = 15.0f; -public: - LagPool() = default; - - void setMax(float new_max) - { - m_max = new_max; - if(m_pool > new_max) - m_pool = new_max; - } - - void add(float dtime) - { - m_pool -= dtime; - if(m_pool < 0) - m_pool = 0; - } - - void empty() - { - m_pool = m_max; - } - - bool grab(float dtime) - { - if(dtime <= 0) - return true; - if(m_pool + dtime > m_max) - return false; - m_pool += dtime; - return true; - } -}; - -class RemotePlayer; - -class PlayerSAO : public UnitSAO -{ -public: - PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t peer_id_, - bool is_singleplayer); - - ActiveObjectType getType() const - { return ACTIVEOBJECT_TYPE_PLAYER; } - ActiveObjectType getSendType() const - { return ACTIVEOBJECT_TYPE_GENERIC; } - std::string getDescription(); - - /* - Active object <-> environment interface - */ - - void addedToEnvironment(u32 dtime_s); - void removingFromEnvironment(); - bool isStaticAllowed() const { return false; } - std::string getClientInitializationData(u16 protocol_version); - void getStaticData(std::string *result) const; - void step(float dtime, bool send_recommended); - void setBasePosition(const v3f &position); - void setPos(const v3f &pos); - void moveTo(v3f pos, bool continuous); - void setPlayerYaw(const float yaw); - // Data should not be sent at player initialization - void setPlayerYawAndSend(const float yaw); - void setLookPitch(const float pitch); - // Data should not be sent at player initialization - void setLookPitchAndSend(const float pitch); - f32 getLookPitch() const { return m_pitch; } - f32 getRadLookPitch() const { return m_pitch * core::DEGTORAD; } - // Deprecated - f32 getRadLookPitchDep() const { return -1.0 * m_pitch * core::DEGTORAD; } - void setFov(const float pitch); - f32 getFov() const { return m_fov; } - void setWantedRange(const s16 range); - s16 getWantedRange() const { return m_wanted_range; } - - /* - Interaction interface - */ - - u16 punch(v3f dir, - const ToolCapabilities *toolcap, - ServerActiveObject *puncher, - float time_from_last_punch); - void rightClick(ServerActiveObject *clicker) {} - void setHP(s32 hp, const PlayerHPChangeReason &reason); - void setHPRaw(u16 hp) { m_hp = hp; } - s16 readDamage(); - u16 getBreath() const { return m_breath; } - void setBreath(const u16 breath, bool send = true); - - /* - Inventory interface - */ - Inventory *getInventory() const; - InventoryLocation getInventoryLocation() const; - void setInventoryModified() {} - std::string getWieldList() const { return "main"; } - u16 getWieldIndex() const; - ItemStack getWieldedItem(ItemStack *selected, ItemStack *hand = nullptr) const; - bool setWieldedItem(const ItemStack &item); - - /* - PlayerSAO-specific - */ - - void disconnected(); - - RemotePlayer *getPlayer() { return m_player; } - session_t getPeerID() const { return m_peer_id; } - - // Cheat prevention - - v3f getLastGoodPosition() const - { - return m_last_good_position; - } - float resetTimeFromLastPunch() - { - float r = m_time_from_last_punch; - m_time_from_last_punch = 0.0; - return r; - } - void noCheatDigStart(const v3s16 &p) - { - m_nocheat_dig_pos = p; - m_nocheat_dig_time = 0; - } - v3s16 getNoCheatDigPos() - { - return m_nocheat_dig_pos; - } - float getNoCheatDigTime() - { - return m_nocheat_dig_time; - } - void noCheatDigEnd() - { - m_nocheat_dig_pos = v3s16(32767, 32767, 32767); - } - LagPool& getDigPool() - { - return m_dig_pool; - } - void setMaxSpeedOverride(const v3f &vel); - // Returns true if cheated - bool checkMovementCheat(); - - // Other - - void updatePrivileges(const std::set &privs, - bool is_singleplayer) - { - m_privs = privs; - m_is_singleplayer = is_singleplayer; - } - - bool getCollisionBox(aabb3f *toset) const; - bool getSelectionBox(aabb3f *toset) const; - bool collideWithObjects() const { return true; } - - void finalize(RemotePlayer *player, const std::set &privs); - - v3f getEyePosition() const { return m_base_position + getEyeOffset(); } - v3f getEyeOffset() const; - float getZoomFOV() const; - - inline Metadata &getMeta() { return m_meta; } - -private: - std::string getPropertyPacket(); - void unlinkPlayerSessionAndSave(); - - RemotePlayer *m_player = nullptr; - session_t m_peer_id = 0; - - // Cheat prevention - LagPool m_dig_pool; - LagPool m_move_pool; - v3f m_last_good_position; - float m_time_from_last_teleport = 0.0f; - float m_time_from_last_punch = 0.0f; - v3s16 m_nocheat_dig_pos = v3s16(32767, 32767, 32767); - float m_nocheat_dig_time = 0.0f; - float m_max_speed_override_time = 0.0f; - v3f m_max_speed_override = v3f(0.0f, 0.0f, 0.0f); - - // Timers - IntervalLimiter m_breathing_interval; - IntervalLimiter m_drowning_interval; - IntervalLimiter m_node_hurt_interval; - - bool m_position_not_sent = false; - - // Cached privileges for enforcement - std::set m_privs; - bool m_is_singleplayer; - - u16 m_breath = PLAYER_MAX_BREATH_DEFAULT; - f32 m_pitch = 0.0f; - f32 m_fov = 0.0f; - s16 m_wanted_range = 0.0f; - - Metadata m_meta; -public: - float m_physics_override_speed = 1.0f; - float m_physics_override_jump = 1.0f; - float m_physics_override_gravity = 1.0f; - bool m_physics_override_sneak = true; - bool m_physics_override_sneak_glitch = false; - bool m_physics_override_new_move = true; - bool m_physics_override_sent = false; -}; - - -struct PlayerHPChangeReason { - enum Type : u8 { - SET_HP, - PLAYER_PUNCH, - FALL, - NODE_DAMAGE, - DROWNING, - RESPAWN - }; - - Type type = SET_HP; - bool from_mod = false; - int lua_reference = -1; - - // For PLAYER_PUNCH - ServerActiveObject *object = nullptr; - // For NODE_DAMAGE - std::string node; - - inline bool hasLuaReference() const - { - return lua_reference >= 0; - } - - bool setTypeFromString(const std::string &typestr) - { - if (typestr == "set_hp") - type = SET_HP; - else if (typestr == "punch") - type = PLAYER_PUNCH; - else if (typestr == "fall") - type = FALL; - else if (typestr == "node_damage") - type = NODE_DAMAGE; - else if (typestr == "drown") - type = DROWNING; - else if (typestr == "respawn") - type = RESPAWN; - else - return false; - - return true; - } - - std::string getTypeAsString() const - { - switch (type) { - case PlayerHPChangeReason::SET_HP: - return "set_hp"; - case PlayerHPChangeReason::PLAYER_PUNCH: - return "punch"; - case PlayerHPChangeReason::FALL: - return "fall"; - case PlayerHPChangeReason::NODE_DAMAGE: - return "node_damage"; - case PlayerHPChangeReason::DROWNING: - return "drown"; - case PlayerHPChangeReason::RESPAWN: - return "respawn"; - default: - return "?"; - } - } - - PlayerHPChangeReason(Type type): - type(type) - {} - - PlayerHPChangeReason(Type type, ServerActiveObject *object): - type(type), object(object) - {} - - PlayerHPChangeReason(Type type, std::string node): - type(type), node(node) - {} -}; diff -Nru minetest-5.2.0/src/craftdef.cpp minetest-5.3.0/src/craftdef.cpp --- minetest-5.2.0/src/craftdef.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/craftdef.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -1066,8 +1066,8 @@ } virtual void registerCraft(CraftDefinition *def, IGameDef *gamedef) { - verbosestream << "registerCraft: registering craft definition: " - << def->dump() << std::endl; + TRACESTREAM(<< "registerCraft: registering craft definition: " + << def->dump() << std::endl); m_craft_defs[(int) CRAFT_HASH_TYPE_UNHASHED][0].push_back(def); CraftInput input; diff -Nru minetest-5.2.0/src/database/database-files.cpp minetest-5.3.0/src/database/database-files.cpp --- minetest-5.2.0/src/database/database-files.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/database/database-files.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -20,11 +20,11 @@ #include #include #include "database-files.h" -#include "content_sao.h" #include "remoteplayer.h" #include "settings.h" #include "porting.h" #include "filesys.h" +#include "server/player_sao.h" #include "util/string.h" // !!! WARNING !!! diff -Nru minetest-5.2.0/src/database/database-leveldb.cpp minetest-5.3.0/src/database/database-leveldb.cpp --- minetest-5.2.0/src/database/database-leveldb.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/database/database-leveldb.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -26,6 +26,9 @@ #include "log.h" #include "filesys.h" #include "exceptions.h" +#include "remoteplayer.h" +#include "server/player_sao.h" +#include "util/serialize.h" #include "util/string.h" #include "leveldb/db.h" @@ -97,5 +100,210 @@ delete it; } -#endif // USE_LEVELDB +PlayerDatabaseLevelDB::PlayerDatabaseLevelDB(const std::string &savedir) +{ + leveldb::Options options; + options.create_if_missing = true; + leveldb::Status status = leveldb::DB::Open(options, + savedir + DIR_DELIM + "players.db", &m_database); + ENSURE_STATUS_OK(status); +} + +PlayerDatabaseLevelDB::~PlayerDatabaseLevelDB() +{ + delete m_database; +} +void PlayerDatabaseLevelDB::savePlayer(RemotePlayer *player) +{ + /* + u8 version = 1 + u16 hp + v3f position + f32 pitch + f32 yaw + u16 breath + u32 attribute_count + for each attribute { + std::string name + std::string (long) value + } + std::string (long) serialized_inventory + */ + + std::ostringstream os; + writeU8(os, 1); + + PlayerSAO *sao = player->getPlayerSAO(); + sanity_check(sao); + writeU16(os, sao->getHP()); + writeV3F32(os, sao->getBasePosition()); + writeF32(os, sao->getLookPitch()); + writeF32(os, sao->getRotation().Y); + writeU16(os, sao->getBreath()); + + StringMap stringvars = sao->getMeta().getStrings(); + writeU32(os, stringvars.size()); + for (const auto &it : stringvars) { + os << serializeString(it.first); + os << serializeLongString(it.second); + } + + player->inventory.serialize(os); + + leveldb::Status status = m_database->Put(leveldb::WriteOptions(), + player->getName(), os.str()); + ENSURE_STATUS_OK(status); + player->onSuccessfulSave(); +} + +bool PlayerDatabaseLevelDB::removePlayer(const std::string &name) +{ + leveldb::Status s = m_database->Delete(leveldb::WriteOptions(), name); + return s.ok(); +} + +bool PlayerDatabaseLevelDB::loadPlayer(RemotePlayer *player, PlayerSAO *sao) +{ + std::string raw; + leveldb::Status s = m_database->Get(leveldb::ReadOptions(), + player->getName(), &raw); + if (!s.ok()) + return false; + std::istringstream is(raw); + + if (readU8(is) > 1) + return false; + + sao->setHPRaw(readU16(is)); + sao->setBasePosition(readV3F32(is)); + sao->setLookPitch(readF32(is)); + sao->setPlayerYaw(readF32(is)); + sao->setBreath(readU16(is), false); + + u32 attribute_count = readU32(is); + for (u32 i = 0; i < attribute_count; i++) { + std::string name = deSerializeString(is); + std::string value = deSerializeLongString(is); + sao->getMeta().setString(name, value); + } + sao->getMeta().setModified(false); + + // This should always be last. + try { + player->inventory.deSerialize(is); + } catch (SerializationError &e) { + errorstream << "Failed to deserialize player inventory. player_name=" + << player->getName() << " " << e.what() << std::endl; + } + + return true; +} + +void PlayerDatabaseLevelDB::listPlayers(std::vector &res) +{ + leveldb::Iterator* it = m_database->NewIterator(leveldb::ReadOptions()); + res.clear(); + for (it->SeekToFirst(); it->Valid(); it->Next()) { + res.push_back(it->key().ToString()); + } + delete it; +} + +AuthDatabaseLevelDB::AuthDatabaseLevelDB(const std::string &savedir) +{ + leveldb::Options options; + options.create_if_missing = true; + leveldb::Status status = leveldb::DB::Open(options, + savedir + DIR_DELIM + "auth.db", &m_database); + ENSURE_STATUS_OK(status); +} + +AuthDatabaseLevelDB::~AuthDatabaseLevelDB() +{ + delete m_database; +} + +bool AuthDatabaseLevelDB::getAuth(const std::string &name, AuthEntry &res) +{ + std::string raw; + leveldb::Status s = m_database->Get(leveldb::ReadOptions(), name, &raw); + if (!s.ok()) + return false; + std::istringstream is(raw); + + /* + u8 version = 1 + std::string password + u16 number of privileges + for each privilege { + std::string privilege + } + s64 last_login + */ + + if (readU8(is) > 1) + return false; + + res.id = 1; + res.name = name; + res.password = deSerializeString(is); + + u16 privilege_count = readU16(is); + res.privileges.clear(); + res.privileges.reserve(privilege_count); + for (u16 i = 0; i < privilege_count; i++) { + res.privileges.push_back(deSerializeString(is)); + } + + res.last_login = readS64(is); + return true; +} + +bool AuthDatabaseLevelDB::saveAuth(const AuthEntry &authEntry) +{ + std::ostringstream os; + writeU8(os, 1); + os << serializeString(authEntry.password); + + size_t privilege_count = authEntry.privileges.size(); + FATAL_ERROR_IF(privilege_count > U16_MAX, + "Unsupported number of privileges"); + writeU16(os, privilege_count); + for (const std::string &privilege : authEntry.privileges) { + os << serializeString(privilege); + } + + writeS64(os, authEntry.last_login); + leveldb::Status s = m_database->Put(leveldb::WriteOptions(), + authEntry.name, os.str()); + return s.ok(); +} + +bool AuthDatabaseLevelDB::createAuth(AuthEntry &authEntry) +{ + return saveAuth(authEntry); +} + +bool AuthDatabaseLevelDB::deleteAuth(const std::string &name) +{ + leveldb::Status s = m_database->Delete(leveldb::WriteOptions(), name); + return s.ok(); +} + +void AuthDatabaseLevelDB::listNames(std::vector &res) +{ + leveldb::Iterator* it = m_database->NewIterator(leveldb::ReadOptions()); + res.clear(); + for (it->SeekToFirst(); it->Valid(); it->Next()) { + res.emplace_back(it->key().ToString()); + } + delete it; +} + +void AuthDatabaseLevelDB::reload() +{ + // No-op for LevelDB. +} + +#endif // USE_LEVELDB diff -Nru minetest-5.2.0/src/database/database-leveldb.h minetest-5.3.0/src/database/database-leveldb.h --- minetest-5.2.0/src/database/database-leveldb.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/database/database-leveldb.h 2020-07-09 21:13:21.000000000 +0000 @@ -45,4 +45,36 @@ leveldb::DB *m_database; }; +class PlayerDatabaseLevelDB : public PlayerDatabase +{ +public: + PlayerDatabaseLevelDB(const std::string &savedir); + ~PlayerDatabaseLevelDB(); + + void savePlayer(RemotePlayer *player); + bool loadPlayer(RemotePlayer *player, PlayerSAO *sao); + bool removePlayer(const std::string &name); + void listPlayers(std::vector &res); + +private: + leveldb::DB *m_database; +}; + +class AuthDatabaseLevelDB : public AuthDatabase +{ +public: + AuthDatabaseLevelDB(const std::string &savedir); + virtual ~AuthDatabaseLevelDB(); + + virtual bool getAuth(const std::string &name, AuthEntry &res); + virtual bool saveAuth(const AuthEntry &authEntry); + virtual bool createAuth(AuthEntry &authEntry); + virtual bool deleteAuth(const std::string &name); + virtual void listNames(std::vector &res); + virtual void reload(); + +private: + leveldb::DB *m_database; +}; + #endif // USE_LEVELDB diff -Nru minetest-5.2.0/src/database/database-postgresql.cpp minetest-5.3.0/src/database/database-postgresql.cpp --- minetest-5.2.0/src/database/database-postgresql.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/database/database-postgresql.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -36,8 +36,8 @@ #include "debug.h" #include "exceptions.h" #include "settings.h" -#include "content_sao.h" #include "remoteplayer.h" +#include "server/player_sao.h" Database_PostgreSQL::Database_PostgreSQL(const std::string &connect_string) : m_connect_string(connect_string) @@ -160,6 +160,11 @@ checkResults(PQexec(m_conn, "COMMIT;")); } +void Database_PostgreSQL::rollback() +{ + checkResults(PQexec(m_conn, "ROLLBACK;")); +} + MapDatabasePostgreSQL::MapDatabasePostgreSQL(const std::string &connect_string): Database_PostgreSQL(connect_string), MapDatabase() @@ -301,7 +306,7 @@ int numrows = PQntuples(results); for (int row = 0; row < numrows; ++row) - dst.push_back(pg_to_v3s16(results, 0, 0)); + dst.push_back(pg_to_v3s16(results, row, 0)); PQclear(results); } @@ -631,4 +636,174 @@ PQclear(results); } +AuthDatabasePostgreSQL::AuthDatabasePostgreSQL(const std::string &connect_string) : + Database_PostgreSQL(connect_string), AuthDatabase() +{ + connectToDatabase(); +} + +void AuthDatabasePostgreSQL::createDatabase() +{ + createTableIfNotExists("auth", + "CREATE TABLE auth (" + "id SERIAL," + "name TEXT UNIQUE," + "password TEXT," + "last_login INT NOT NULL DEFAULT 0," + "PRIMARY KEY (id)" + ");"); + + createTableIfNotExists("user_privileges", + "CREATE TABLE user_privileges (" + "id INT," + "privilege TEXT," + "PRIMARY KEY (id, privilege)," + "CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES auth (id) ON DELETE CASCADE" + ");"); +} + +void AuthDatabasePostgreSQL::initStatements() +{ + prepareStatement("auth_read", "SELECT id, name, password, last_login FROM auth WHERE name = $1"); + prepareStatement("auth_write", "UPDATE auth SET name = $1, password = $2, last_login = $3 WHERE id = $4"); + prepareStatement("auth_create", "INSERT INTO auth (name, password, last_login) VALUES ($1, $2, $3) RETURNING id"); + prepareStatement("auth_delete", "DELETE FROM auth WHERE name = $1"); + + prepareStatement("auth_list_names", "SELECT name FROM auth ORDER BY name DESC"); + + prepareStatement("auth_read_privs", "SELECT privilege FROM user_privileges WHERE id = $1"); + prepareStatement("auth_write_privs", "INSERT INTO user_privileges (id, privilege) VALUES ($1, $2)"); + prepareStatement("auth_delete_privs", "DELETE FROM user_privileges WHERE id = $1"); +} + +bool AuthDatabasePostgreSQL::getAuth(const std::string &name, AuthEntry &res) +{ + verifyDatabase(); + + const char *values[] = { name.c_str() }; + PGresult *result = execPrepared("auth_read", 1, values, false, false); + int numrows = PQntuples(result); + if (numrows == 0) { + PQclear(result); + return false; + } + + res.id = pg_to_uint(result, 0, 0); + res.name = std::string(PQgetvalue(result, 0, 1), PQgetlength(result, 0, 1)); + res.password = std::string(PQgetvalue(result, 0, 2), PQgetlength(result, 0, 2)); + res.last_login = pg_to_int(result, 0, 3); + + PQclear(result); + + std::string playerIdStr = itos(res.id); + const char *privsValues[] = { playerIdStr.c_str() }; + PGresult *results = execPrepared("auth_read_privs", 1, privsValues, false); + + numrows = PQntuples(results); + for (int row = 0; row < numrows; row++) + res.privileges.emplace_back(PQgetvalue(results, row, 0)); + + PQclear(results); + + return true; +} + +bool AuthDatabasePostgreSQL::saveAuth(const AuthEntry &authEntry) +{ + verifyDatabase(); + + beginSave(); + + std::string lastLoginStr = itos(authEntry.last_login); + std::string idStr = itos(authEntry.id); + const char *values[] = { + authEntry.name.c_str() , + authEntry.password.c_str(), + lastLoginStr.c_str(), + idStr.c_str(), + }; + execPrepared("auth_write", 4, values); + + writePrivileges(authEntry); + + endSave(); + return true; +} + +bool AuthDatabasePostgreSQL::createAuth(AuthEntry &authEntry) +{ + verifyDatabase(); + + std::string lastLoginStr = itos(authEntry.last_login); + const char *values[] = { + authEntry.name.c_str() , + authEntry.password.c_str(), + lastLoginStr.c_str() + }; + + beginSave(); + + PGresult *result = execPrepared("auth_create", 3, values, false, false); + + int numrows = PQntuples(result); + if (numrows == 0) { + errorstream << "Strange behaviour on auth creation, no ID returned." << std::endl; + PQclear(result); + rollback(); + return false; + } + + authEntry.id = pg_to_uint(result, 0, 0); + PQclear(result); + + writePrivileges(authEntry); + + endSave(); + return true; +} + +bool AuthDatabasePostgreSQL::deleteAuth(const std::string &name) +{ + verifyDatabase(); + + const char *values[] = { name.c_str() }; + execPrepared("auth_delete", 1, values); + + // privileges deleted by foreign key on delete cascade + return true; +} + +void AuthDatabasePostgreSQL::listNames(std::vector &res) +{ + verifyDatabase(); + + PGresult *results = execPrepared("auth_list_names", 0, + NULL, NULL, NULL, false, false); + + int numrows = PQntuples(results); + + for (int row = 0; row < numrows; ++row) + res.emplace_back(PQgetvalue(results, row, 0)); + + PQclear(results); +} + +void AuthDatabasePostgreSQL::reload() +{ + // noop for PgSQL +} + +void AuthDatabasePostgreSQL::writePrivileges(const AuthEntry &authEntry) +{ + std::string authIdStr = itos(authEntry.id); + const char *values[] = { authIdStr.c_str() }; + execPrepared("auth_delete_privs", 1, values); + + for (const std::string &privilege : authEntry.privileges) { + const char *values[] = { authIdStr.c_str(), privilege.c_str() }; + execPrepared("auth_write_privs", 2, values); + } +} + + #endif // USE_POSTGRESQL diff -Nru minetest-5.2.0/src/database/database-postgresql.h minetest-5.3.0/src/database/database-postgresql.h --- minetest-5.2.0/src/database/database-postgresql.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/database/database-postgresql.h 2020-07-09 21:13:21.000000000 +0000 @@ -34,6 +34,7 @@ void beginSave(); void endSave(); + void rollback(); bool initialized() const; @@ -144,3 +145,26 @@ private: bool playerDataExists(const std::string &playername); }; + +class AuthDatabasePostgreSQL : private Database_PostgreSQL, public AuthDatabase +{ +public: + AuthDatabasePostgreSQL(const std::string &connect_string); + virtual ~AuthDatabasePostgreSQL() = default; + + virtual void verifyDatabase() { Database_PostgreSQL::verifyDatabase(); } + + virtual bool getAuth(const std::string &name, AuthEntry &res); + virtual bool saveAuth(const AuthEntry &authEntry); + virtual bool createAuth(AuthEntry &authEntry); + virtual bool deleteAuth(const std::string &name); + virtual void listNames(std::vector &res); + virtual void reload(); + +protected: + virtual void createDatabase(); + virtual void initStatements(); + +private: + virtual void writePrivileges(const AuthEntry &authEntry); +}; diff -Nru minetest-5.2.0/src/database/database-sqlite3.cpp minetest-5.3.0/src/database/database-sqlite3.cpp --- minetest-5.2.0/src/database/database-sqlite3.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/database/database-sqlite3.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -33,8 +33,8 @@ #include "settings.h" #include "porting.h" #include "util/string.h" -#include "content_sao.h" #include "remoteplayer.h" +#include "server/player_sao.h" #include diff -Nru minetest-5.2.0/src/defaultsettings.cpp minetest-5.3.0/src/defaultsettings.cpp --- minetest-5.2.0/src/defaultsettings.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/defaultsettings.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -48,7 +48,7 @@ settings->setDefault("pitch_move", "false"); settings->setDefault("fast_move", "false"); settings->setDefault("noclip", "false"); - settings->setDefault("screenshot_path", "."); + settings->setDefault("screenshot_path", "screenshots"); settings->setDefault("screenshot_format", "png"); settings->setDefault("screenshot_quality", "0"); settings->setDefault("client_unload_unused_data_timeout", "600"); @@ -80,7 +80,7 @@ settings->setDefault("keymap_chat", "KEY_KEY_T"); settings->setDefault("keymap_cmd", "/"); settings->setDefault("keymap_cmd_local", "."); - settings->setDefault("keymap_minimap", "KEY_F9"); + settings->setDefault("keymap_minimap", "KEY_KEY_V"); settings->setDefault("keymap_console", "KEY_F10"); settings->setDefault("keymap_rangeselect", "KEY_KEY_R"); settings->setDefault("keymap_freemove", "KEY_KEY_K"); @@ -103,7 +103,7 @@ #endif settings->setDefault("keymap_toggle_debug", "KEY_F5"); settings->setDefault("keymap_toggle_profiler", "KEY_F6"); - settings->setDefault("keymap_camera_mode", "KEY_F7"); + settings->setDefault("keymap_camera_mode", "KEY_KEY_C"); settings->setDefault("keymap_screenshot", "KEY_F12"); settings->setDefault("keymap_increase_viewing_range_min", "+"); settings->setDefault("keymap_decrease_viewing_range_min", "-"); @@ -321,8 +321,12 @@ std::string font_size_str = std::to_string(DEFAULT_FONT_SIZE); #endif + // General font settings settings->setDefault("font_size", font_size_str); settings->setDefault("mono_font_size", font_size_str); + settings->setDefault("chat_font_size", "0"); // Default "font_size" + + // ContentDB settings->setDefault("contentdb_url", "https://content.minetest.net"); #ifdef __ANDROID__ settings->setDefault("contentdb_flag_blacklist", "nonfree, android_default"); @@ -334,6 +338,9 @@ // Server settings->setDefault("disable_escape_sequences", "false"); settings->setDefault("strip_color_codes", "false"); +#if USE_PROMETHEUS + settings->setDefault("prometheus_listener_address", "127.0.0.1:30000"); +#endif // Network settings->setDefault("enable_ipv6", "true"); @@ -397,6 +404,7 @@ settings->setDefault("remote_media", ""); settings->setDefault("debug_log_level", "action"); settings->setDefault("debug_log_size_max", "50"); + settings->setDefault("chat_log_level", "error"); settings->setDefault("emergequeue_limit_total", "512"); settings->setDefault("emergequeue_limit_diskonly", "64"); settings->setDefault("emergequeue_limit_generate", "64"); @@ -443,6 +451,7 @@ settings->setDefault("high_precision_fpu", "true"); settings->setDefault("enable_console", "false"); + settings->setDefault("screen_dpi", "72"); // Altered settings for macOS #if defined(__MACH__) && defined(__APPLE__) @@ -456,7 +465,7 @@ settings->setDefault("screen_h", "0"); settings->setDefault("fullscreen", "true"); settings->setDefault("touchtarget", "true"); - settings->setDefault("TMPFolder", porting::getDataPath("tmp" DIR_DELIM)); + settings->setDefault("TMPFolder", porting::path_cache); settings->setDefault("touchscreen_threshold","20"); settings->setDefault("fixed_virtual_joystick", "false"); settings->setDefault("virtual_joystick_triggers_aux", "false"); @@ -478,8 +487,8 @@ settings->setDefault("curl_verify_cert","false"); // Apply settings according to screen size - float x_inches = ((double) porting::getDisplaySize().X / - (160 * porting::getDisplayDensity())); + float x_inches = (float) porting::getDisplaySize().X / + (160.f * porting::getDisplayDensity()); if (x_inches < 3.7f) { settings->setDefault("hud_scaling", "0.6"); @@ -495,8 +504,5 @@ settings->setDefault("mono_font_size", "14"); } // Tablets >= 6.0 use non-Android defaults for these settings -#else - settings->setDefault("screen_dpi", "72"); #endif } - diff -Nru minetest-5.2.0/src/emerge.cpp minetest-5.3.0/src/emerge.cpp --- minetest-5.2.0/src/emerge.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/emerge.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -42,7 +42,6 @@ #include "profiler.h" #include "scripting_server.h" #include "server.h" -#include "serverobject.h" #include "settings.h" #include "voxel.h" @@ -110,6 +109,28 @@ VoxelArea *m_ignorevariable; }; +EmergeParams::~EmergeParams() +{ + infostream << "EmergeParams: destroying " << this << std::endl; + // Delete everything that was cloned on creation of EmergeParams + delete biomemgr; + delete oremgr; + delete decomgr; + delete schemmgr; +} + +EmergeParams::EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr, + const OreManager *oremgr, const DecorationManager *decomgr, + const SchematicManager *schemmgr) : + ndef(parent->ndef), + enable_mapgen_debug_info(parent->enable_mapgen_debug_info), + gen_notify_on(parent->gen_notify_on), + gen_notify_on_deco_ids(&parent->gen_notify_on_deco_ids), + biomemgr(biomemgr->clone()), oremgr(oremgr->clone()), + decomgr(decomgr->clone()), schemmgr(schemmgr->clone()) +{ +} + //// //// EmergeManager //// @@ -136,9 +157,9 @@ nthreads = Thread::getNumberOfProcessors() - 2; if (nthreads < 1) nthreads = 1; - verbosestream << "Using " << nthreads << " emerge threads." << std::endl; m_qlimit_total = g_settings->getU16("emergequeue_limit_total"); + // FIXME: these fallback values are probably not good if (!g_settings->getU16NoEx("emergequeue_limit_diskonly", m_qlimit_diskonly)) m_qlimit_diskonly = nthreads * 5 + 1; if (!g_settings->getU16NoEx("emergequeue_limit_generate", m_qlimit_generate)) @@ -184,14 +205,48 @@ } +BiomeManager *EmergeManager::getWritableBiomeManager() +{ + FATAL_ERROR_IF(!m_mapgens.empty(), + "Writable managers can only be returned before mapgen init"); + return biomemgr; +} + +OreManager *EmergeManager::getWritableOreManager() +{ + FATAL_ERROR_IF(!m_mapgens.empty(), + "Writable managers can only be returned before mapgen init"); + return oremgr; +} + +DecorationManager *EmergeManager::getWritableDecorationManager() +{ + FATAL_ERROR_IF(!m_mapgens.empty(), + "Writable managers can only be returned before mapgen init"); + return decomgr; +} + +SchematicManager *EmergeManager::getWritableSchematicManager() +{ + FATAL_ERROR_IF(!m_mapgens.empty(), + "Writable managers can only be returned before mapgen init"); + return schemmgr; +} + + void EmergeManager::initMapgens(MapgenParams *params) { FATAL_ERROR_IF(!m_mapgens.empty(), "Mapgen already initialised."); mgparams = params; - for (u32 i = 0; i != m_threads.size(); i++) - m_mapgens.push_back(Mapgen::createMapgen(params->mgtype, params, this)); + for (u32 i = 0; i != m_threads.size(); i++) { + EmergeParams *p = new EmergeParams( + this, biomemgr, oremgr, decomgr, schemmgr); + infostream << "EmergeManager: Created params " << p + << " for thread " << i << std::endl; + m_mapgens.push_back(Mapgen::createMapgen(params->mgtype, params, p)); + } } @@ -201,8 +256,9 @@ return nullptr; for (u32 i = 0; i != m_threads.size(); i++) { - if (m_threads[i]->isCurrentThread()) - return m_threads[i]->m_mapgen; + EmergeThread *t = m_threads[i]; + if (t->isRunning() && t->isCurrentThread()) + return t->m_mapgen; } return nullptr; @@ -588,8 +644,7 @@ /* Clear generate notifier events */ - Mapgen *mg = m_emerge->getCurrentMapgen(); - mg->gennotify.clearEvents(); + m_mapgen->gennotify.clearEvents(); EMERGE_DBG_OUT("ended up with: " << analyze_block(block)); diff -Nru minetest-5.2.0/src/emerge.h minetest-5.3.0/src/emerge.h --- minetest-5.2.0/src/emerge.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/emerge.h 2020-07-09 21:13:21.000000000 +0000 @@ -44,6 +44,7 @@ class DecorationManager; class SchematicManager; class Server; +class ModApiMapgen; // Structure containing inputs/outputs for chunk generation struct BlockMakeData { @@ -86,7 +87,36 @@ EmergeCallbackList callbacks; }; +class EmergeParams { + friend class EmergeManager; +public: + EmergeParams() = delete; + ~EmergeParams(); + DISABLE_CLASS_COPY(EmergeParams); + + const NodeDefManager *ndef; // shared + bool enable_mapgen_debug_info; + + u32 gen_notify_on; + const std::set *gen_notify_on_deco_ids; // shared + + BiomeManager *biomemgr; + OreManager *oremgr; + DecorationManager *decomgr; + SchematicManager *schemmgr; + +private: + EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr, + const OreManager *oremgr, const DecorationManager *decomgr, + const SchematicManager *schemmgr); +}; + class EmergeManager { + /* The mod API needs unchecked access to allow: + * - using decomgr or oremgr to place decos/ores + * - using schemmgr to load and place schematics + */ + friend class ModApiMapgen; public: const NodeDefManager *ndef; bool enable_mapgen_debug_info; @@ -106,17 +136,22 @@ // Environment is not created until after script initialization. MapSettingsManager *map_settings_mgr; - // Managers of various map generation-related components - BiomeManager *biomemgr; - OreManager *oremgr; - DecorationManager *decomgr; - SchematicManager *schemmgr; - // Methods EmergeManager(Server *server); ~EmergeManager(); DISABLE_CLASS_COPY(EmergeManager); + // no usage restrictions + const BiomeManager *getBiomeManager() const { return biomemgr; } + const OreManager *getOreManager() const { return oremgr; } + const DecorationManager *getDecorationManager() const { return decomgr; } + const SchematicManager *getSchematicManager() const { return schemmgr; } + // only usable before mapgen init + BiomeManager *getWritableBiomeManager(); + OreManager *getWritableOreManager(); + DecorationManager *getWritableDecorationManager(); + SchematicManager *getWritableSchematicManager(); + void initMapgens(MapgenParams *mgparams); void startThreads(); @@ -160,6 +195,13 @@ u16 m_qlimit_diskonly; u16 m_qlimit_generate; + // Managers of various map generation-related components + // Note that each Mapgen gets a copy(!) of these to work with + BiomeManager *biomemgr; + OreManager *oremgr; + DecorationManager *decomgr; + SchematicManager *schemmgr; + // Requires m_queue_mutex held EmergeThread *getOptimalThread(); diff -Nru minetest-5.2.0/src/environment.cpp minetest-5.3.0/src/environment.cpp --- minetest-5.2.0/src/environment.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/environment.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -21,7 +21,6 @@ #include "environment.h" #include "collision.h" #include "raycast.h" -#include "serverobject.h" #include "scripting_server.h" #include "server.h" #include "daynightratio.h" @@ -83,6 +82,24 @@ return m_time_of_day_f; } +bool Environment::line_of_sight(v3f pos1, v3f pos2, v3s16 *p) +{ + // Iterate trough nodes on the line + voxalgo::VoxelLineIterator iterator(pos1 / BS, (pos2 - pos1) / BS); + do { + MapNode n = getMap().getNode(iterator.m_current_node_pos); + + // Return non-air + if (n.param0 != CONTENT_AIR) { + if (p) + *p = iterator.m_current_node_pos; + return false; + } + iterator.next(); + } while (iterator.m_current_index <= iterator.m_last_index); + return true; +} + /* Check if a node is pointable */ diff -Nru minetest-5.2.0/src/environment.h minetest-5.3.0/src/environment.h --- minetest-5.2.0/src/environment.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/environment.h 2020-07-09 21:13:21.000000000 +0000 @@ -77,6 +77,16 @@ u32 getDayCount(); /*! + * Returns false if the given line intersects with a + * non-air node, true otherwise. + * \param pos1 start of the line + * \param pos2 end of the line + * \param p output, position of the first non-air node + * the line intersects + */ + bool line_of_sight(v3f pos1, v3f pos2, v3s16 *p = nullptr); + + /*! * Gets the objects pointed by the shootline as * pointed things. * If this is a client environment, the local player diff -Nru minetest-5.2.0/src/filesys.cpp minetest-5.3.0/src/filesys.cpp --- minetest-5.2.0/src/filesys.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/filesys.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -691,6 +691,12 @@ const char *GetFilenameFromPath(const char *path) { const char *filename = strrchr(path, DIR_DELIM_CHAR); + // Consistent with IsDirDelimiter this function handles '/' too + if (DIR_DELIM_CHAR != '/') { + const char *tmp = strrchr(path, '/'); + if (tmp && tmp > filename) + filename = tmp; + } return filename ? filename + 1 : path; } diff -Nru minetest-5.2.0/src/genericobject.cpp minetest-5.3.0/src/genericobject.cpp --- minetest-5.2.0/src/genericobject.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/genericobject.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,207 +0,0 @@ -/* -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 "genericobject.h" -#include -#include "util/serialize.h" - -std::string gob_cmd_set_properties(const ObjectProperties &prop) -{ - std::ostringstream os(std::ios::binary); - writeU8(os, GENERIC_CMD_SET_PROPERTIES); - prop.serialize(os); - return os.str(); -} - -ObjectProperties gob_read_set_properties(std::istream &is) -{ - ObjectProperties prop; - prop.deSerialize(is); - return prop; -} - -std::string gob_cmd_update_position( - v3f position, - v3f velocity, - v3f acceleration, - v3f rotation, - bool do_interpolate, - bool is_movement_end, - f32 update_interval -){ - std::ostringstream os(std::ios::binary); - // command - writeU8(os, GENERIC_CMD_UPDATE_POSITION); - // pos - writeV3F32(os, position); - // velocity - writeV3F32(os, velocity); - // acceleration - writeV3F32(os, acceleration); - // rotation - writeV3F32(os, rotation); - // do_interpolate - writeU8(os, do_interpolate); - // is_end_position (for interpolation) - writeU8(os, is_movement_end); - // update_interval (for interpolation) - writeF32(os, update_interval); - return os.str(); -} - -std::string gob_cmd_set_texture_mod(const std::string &mod) -{ - std::ostringstream os(std::ios::binary); - // command - writeU8(os, GENERIC_CMD_SET_TEXTURE_MOD); - // parameters - os< - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public 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 -#include "irrlichttypes_bloated.h" -#include -#include "itemgroup.h" - -enum GenericCMD { - GENERIC_CMD_SET_PROPERTIES, - GENERIC_CMD_UPDATE_POSITION, - GENERIC_CMD_SET_TEXTURE_MOD, - GENERIC_CMD_SET_SPRITE, - GENERIC_CMD_PUNCHED, - GENERIC_CMD_UPDATE_ARMOR_GROUPS, - GENERIC_CMD_SET_ANIMATION, - GENERIC_CMD_SET_BONE_POSITION, - GENERIC_CMD_ATTACH_TO, - GENERIC_CMD_SET_PHYSICS_OVERRIDE, - GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES, - GENERIC_CMD_SPAWN_INFANT, - GENERIC_CMD_SET_ANIMATION_SPEED -}; - -#include "object_properties.h" -std::string gob_cmd_set_properties(const ObjectProperties &prop); -ObjectProperties gob_read_set_properties(std::istream &is); - -std::string gob_cmd_update_position( - v3f position, - v3f velocity, - v3f acceleration, - v3f rotation, - bool do_interpolate, - bool is_movement_end, - f32 update_interval -); - -std::string gob_cmd_set_texture_mod(const std::string &mod); - -std::string gob_cmd_set_sprite( - v2s16 p, - u16 num_frames, - f32 framelength, - bool select_horiz_by_yawpitch -); - -std::string gob_cmd_punched(u16 result_hp); - -std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups); - -std::string gob_cmd_update_physics_override(float physics_override_speed, - float physics_override_jump, float physics_override_gravity, - bool sneak, bool sneak_glitch, bool new_move); - -std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend, bool frame_loop); - -std::string gob_cmd_update_animation_speed(float frame_speed); - -std::string gob_cmd_update_bone_position(const std::string &bone, v3f position, - v3f rotation); - -std::string gob_cmd_update_attachment(int parent_id, const std::string &bone, - v3f position, v3f rotation); - -std::string gob_cmd_update_nametag_attributes(video::SColor color); - -std::string gob_cmd_update_infant(u16 id, u8 type, - const std::string &client_initialization_data); diff -Nru minetest-5.2.0/src/gettext.cpp minetest-5.3.0/src/gettext.cpp --- minetest-5.2.0/src/gettext.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gettext.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -217,7 +217,10 @@ #endif #endif - static std::string name = lowercase(PROJECT_NAME); + std::string name = lowercase(PROJECT_NAME); + infostream << "Gettext: domainname=\"" << name + << "\" path=\"" << path << "\"" << std::endl; + bindtextdomain(name.c_str(), path); textdomain(name.c_str()); diff -Nru minetest-5.2.0/src/gui/CMakeLists.txt minetest-5.3.0/src/gui/CMakeLists.txt --- minetest-5.2.0/src/gui/CMakeLists.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/CMakeLists.txt 2020-07-09 21:13:21.000000000 +0000 @@ -16,6 +16,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/guiPasswordChange.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiPathSelectMenu.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 diff -Nru minetest-5.2.0/src/gui/guiButton.cpp minetest-5.3.0/src/gui/guiButton.cpp --- minetest-5.2.0/src/gui/guiButton.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiButton.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -14,6 +14,7 @@ #include "irrlicht_changes/static_text.h" #include "porting.h" #include "StyleSpec.h" +#include "util/numeric.h" using namespace irr; using namespace gui; @@ -26,14 +27,15 @@ //! constructor GUIButton::GUIButton(IGUIEnvironment* environment, IGUIElement* parent, - s32 id, core::rect rectangle, bool noclip) + s32 id, core::rect rectangle, ISimpleTextureSource *tsrc, + bool noclip) : IGUIButton(environment, parent, id, rectangle), SpriteBank(0), OverrideFont(0), OverrideColorEnabled(false), OverrideColor(video::SColor(101,255,255,255)), ClickTime(0), HoverTime(0), FocusTime(0), ClickShiftState(false), ClickControlState(false), IsPushButton(false), Pressed(false), - UseAlphaChannel(false), DrawBorder(true), ScaleImage(false) + UseAlphaChannel(false), DrawBorder(true), ScaleImage(false), TSrc(tsrc) { setNotClipped(noclip); @@ -44,14 +46,6 @@ // PATCH for (size_t i = 0; i < 4; i++) { Colors[i] = Environment->getSkin()->getColor((EGUI_DEFAULT_COLOR)i); - HoveredColors[i] = irr::video::SColor(Colors[i].getAlpha(), - core::clamp(Colors[i].getRed() * COLOR_HOVERED_MOD, 0, 255), - core::clamp(Colors[i].getGreen() * COLOR_HOVERED_MOD, 0, 255), - core::clamp(Colors[i].getBlue() * COLOR_HOVERED_MOD, 0, 255)); - PressedColors[i] = irr::video::SColor(Colors[i].getAlpha(), - core::clamp(Colors[i].getRed() * COLOR_PRESSED_MOD, 0, 255), - core::clamp(Colors[i].getGreen() * COLOR_PRESSED_MOD, 0, 255), - core::clamp(Colors[i].getBlue() * COLOR_PRESSED_MOD, 0, 255)); } StaticText = gui::StaticText::add(Environment, Text.c_str(), core::rect(0,0,rectangle.getWidth(),rectangle.getHeight()), false, false, this, id); StaticText->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); @@ -262,6 +256,13 @@ return; // PATCH + // Track hovered state, if it has changed then we need to update the style. + bool hovered = isHovered(); + if (hovered != WasHovered) { + WasHovered = hovered; + setFromState(); + } + GUISkin* skin = dynamic_cast(Environment->getSkin()); video::IVideoDriver* driver = Environment->getVideoDriver(); // END PATCH @@ -271,21 +272,24 @@ if (!Pressed) { // PATCH - skin->drawColored3DButtonPaneStandard(this, AbsoluteRect, &AbsoluteClippingRect, - isHovered() ? HoveredColors : Colors); + skin->drawColored3DButtonPaneStandard(this, AbsoluteRect, + &AbsoluteClippingRect, Colors); // END PATCH } else { // PATCH - skin->drawColored3DButtonPanePressed(this, - AbsoluteRect, &AbsoluteClippingRect, PressedColors); + skin->drawColored3DButtonPanePressed(this, AbsoluteRect, + &AbsoluteClippingRect, Colors); // END PATCH } } const core::position2di buttonCenter(AbsoluteRect.getCenter()); - EGUI_BUTTON_IMAGE_STATE imageState = getImageState(Pressed); + // PATCH + // The image changes based on the state, so we use the default every time. + EGUI_BUTTON_IMAGE_STATE imageState = EGBIS_IMAGE_UP; + // END PATCH if ( ButtonImages[(u32)imageState].Texture ) { core::position2d pos(buttonCenter); @@ -548,18 +552,6 @@ setImage(gui::EGBIS_IMAGE_DOWN, image, pos); } -void GUIButton::setHoveredImage(video::ITexture* image) -{ - setImage(gui::EGBIS_IMAGE_UP_MOUSEOVER, image); - setImage(gui::EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER, image); -} - -void GUIButton::setHoveredImage(video::ITexture* image, const core::rect& pos) -{ - setImage(gui::EGBIS_IMAGE_UP_MOUSEOVER, image, pos); - setImage(gui::EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER, image, pos); -} - //! Sets the text displayed by the button void GUIButton::setText(const wchar_t* text) { @@ -600,24 +592,7 @@ { ClickTime = porting::getTimeMs(); Pressed = pressed; - - GUISkin* skin = dynamic_cast(Environment->getSkin()); - - for(IGUIElement *child : getChildren()) - { - core::rect originalRect = child->getRelativePosition(); - if (Pressed) { - child->setRelativePosition(originalRect + - core::dimension2d( - skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X), - skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y))); - } else { - child->setRelativePosition(originalRect - - core::dimension2d( - skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X), - skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y))); - } - } + setFromState(); } } @@ -729,10 +704,12 @@ } // PATCH -GUIButton* GUIButton::addButton(IGUIEnvironment *environment, const core::rect& rectangle, - IGUIElement* parent, s32 id, const wchar_t* text, const wchar_t *tooltiptext) +GUIButton* GUIButton::addButton(IGUIEnvironment *environment, + const core::rect& rectangle, ISimpleTextureSource *tsrc, + IGUIElement* parent, s32 id, const wchar_t* text, + const wchar_t *tooltiptext) { - GUIButton* button = new GUIButton(environment, parent ? parent : environment->getRootGUIElement(), id, rectangle); + GUIButton* button = new GUIButton(environment, parent ? parent : environment->getRootGUIElement(), id, rectangle, tsrc); if (text) button->setText(text); @@ -749,76 +726,111 @@ for (size_t i = 0; i < 4; i++) { video::SColor base = Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i); Colors[i] = base.getInterpolated(color, d); - HoveredColors[i] = irr::video::SColor(Colors[i].getAlpha(), - core::clamp(Colors[i].getRed() * COLOR_HOVERED_MOD, 0, 255), - core::clamp(Colors[i].getGreen() * COLOR_HOVERED_MOD, 0, 255), - core::clamp(Colors[i].getBlue() * COLOR_HOVERED_MOD, 0, 255)); - PressedColors[i] = irr::video::SColor(Colors[i].getAlpha(), - core::clamp(Colors[i].getRed() * COLOR_PRESSED_MOD, 0, 255), - core::clamp(Colors[i].getGreen() * COLOR_PRESSED_MOD, 0, 255), - core::clamp(Colors[i].getBlue() * COLOR_PRESSED_MOD, 0, 255)); - } -} -void GUIButton::setHoveredColor(video::SColor color) -{ - float d = 0.65f; - for (size_t i = 0; i < 4; i++) { - video::SColor base = Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i); - HoveredColors[i] = base.getInterpolated(color, d); } } -void GUIButton::setPressedColor(video::SColor color) + +//! Set element properties from a StyleSpec corresponding to the button state +void GUIButton::setFromState() { - float d = 0.65f; - for (size_t i = 0; i < 4; i++) { - video::SColor base = Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i); - PressedColors[i] = base.getInterpolated(color, d); - } + StyleSpec::State state = StyleSpec::STATE_DEFAULT; + + if (isPressed()) + state = static_cast(state | StyleSpec::STATE_PRESSED); + + if (isHovered()) + state = static_cast(state | StyleSpec::STATE_HOVERED); + + setFromStyle(StyleSpec::getStyleFromStatePropagation(Styles, state)); } //! Set element properties from a StyleSpec -void GUIButton::setFromStyle(const StyleSpec& style, ISimpleTextureSource *tsrc) +void GUIButton::setFromStyle(const StyleSpec& style) { + bool hovered = (style.getState() & StyleSpec::STATE_HOVERED) != 0; + bool pressed = (style.getState() & StyleSpec::STATE_PRESSED) != 0; + if (style.isNotDefault(StyleSpec::BGCOLOR)) { + setColor(style.getColor(StyleSpec::BGCOLOR)); - } - if (style.isNotDefault(StyleSpec::BGCOLOR_HOVERED)) { - setHoveredColor(style.getColor(StyleSpec::BGCOLOR_HOVERED)); - } - if (style.isNotDefault(StyleSpec::BGCOLOR_PRESSED)) { - setPressedColor(style.getColor(StyleSpec::BGCOLOR_PRESSED)); + + // If we have a propagated hover/press color, we need to automatically + // lighten/darken it + if (!Styles[style.getState()].isNotDefault(StyleSpec::BGCOLOR)) { + for (size_t i = 0; i < 4; i++) { + if (pressed) { + Colors[i] = multiplyColorValue(Colors[i], COLOR_PRESSED_MOD); + } else if (hovered) { + Colors[i] = multiplyColorValue(Colors[i], COLOR_HOVERED_MOD); + } + } + } + + } else { + for (size_t i = 0; i < 4; i++) { + video::SColor base = + Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i); + if (pressed) { + Colors[i] = multiplyColorValue(base, COLOR_PRESSED_MOD); + } else if (hovered) { + Colors[i] = multiplyColorValue(base, COLOR_HOVERED_MOD); + } else { + Colors[i] = base; + } + } } if (style.isNotDefault(StyleSpec::TEXTCOLOR)) { setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR)); + } else { + setOverrideColor(video::SColor(255,255,255,255)); + OverrideColorEnabled = false; } - setNotClipped(style.getBool(StyleSpec::NOCLIP, isNotClipped())); - setDrawBorder(style.getBool(StyleSpec::BORDER, DrawBorder)); + setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); + setDrawBorder(style.getBool(StyleSpec::BORDER, true)); setUseAlphaChannel(style.getBool(StyleSpec::ALPHA, true)); - const core::position2di buttonCenter(AbsoluteRect.getCenter()); - core::position2d geom(buttonCenter); if (style.isNotDefault(StyleSpec::BGIMG)) { - video::ITexture *texture = style.getTexture(StyleSpec::BGIMG, tsrc); - + video::ITexture *texture = style.getTexture(StyleSpec::BGIMG, + getTextureSource()); setImage(guiScalingImageButton( - Environment->getVideoDriver(), texture, geom.X, geom.Y)); + Environment->getVideoDriver(), texture, + AbsoluteRect.getWidth(), AbsoluteRect.getHeight())); setScaleImage(true); + } else { + setImage(nullptr); } - if (style.isNotDefault(StyleSpec::BGIMG_HOVERED)) { - video::ITexture *hovered_texture = style.getTexture(StyleSpec::BGIMG_HOVERED, tsrc); - setHoveredImage(guiScalingImageButton( - Environment->getVideoDriver(), hovered_texture, geom.X, geom.Y)); - setScaleImage(true); - } - if (style.isNotDefault(StyleSpec::BGIMG_PRESSED)) { - video::ITexture *pressed_texture = style.getTexture(StyleSpec::BGIMG_PRESSED, tsrc); + BgMiddle = style.getRect(StyleSpec::BGIMG_MIDDLE, BgMiddle); - setPressedImage(guiScalingImageButton( - Environment->getVideoDriver(), pressed_texture, geom.X, geom.Y)); - setScaleImage(true); + // Child padding and offset + Padding = style.getRect(StyleSpec::PADDING, core::rect()); + Padding = core::rect( + Padding.UpperLeftCorner + BgMiddle.UpperLeftCorner, + Padding.LowerRightCorner + BgMiddle.LowerRightCorner); + + GUISkin* skin = dynamic_cast(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)); + ContentOffset = style.getVector2i(StyleSpec::CONTENT_OFFSET, isPressed() + ? defaultPressOffset + : core::vector2d(0)); + + core::rect childBounds( + Padding.UpperLeftCorner.X + ContentOffset.X, + Padding.UpperLeftCorner.Y + ContentOffset.Y, + AbsoluteRect.getWidth() + Padding.LowerRightCorner.X + ContentOffset.X, + AbsoluteRect.getHeight() + Padding.LowerRightCorner.Y + ContentOffset.Y); + + for (IGUIElement *child : getChildren()) { + child->setRelativePosition(childBounds); } - BgMiddle = style.getRect(StyleSpec::BGIMG_MIDDLE, BgMiddle); +} + +//! Set the styles used for each state +void GUIButton::setStyles(const std::array& styles) +{ + Styles = styles; + setFromState(); } // END PATCH diff -Nru minetest-5.2.0/src/gui/guiButton.h minetest-5.3.0/src/gui/guiButton.h --- minetest-5.2.0/src/gui/guiButton.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiButton.h 2020-07-09 21:13:21.000000000 +0000 @@ -13,6 +13,7 @@ #include "ITexture.h" #include "SColor.h" #include "guiSkin.h" +#include "StyleSpec.h" using namespace irr; @@ -67,7 +68,6 @@ #endif class ISimpleTextureSource; -class StyleSpec; class GUIButton : public gui::IGUIButton { @@ -75,7 +75,8 @@ //! constructor GUIButton(gui::IGUIEnvironment* environment, gui::IGUIElement* parent, - s32 id, core::rect rectangle, bool noclip=false); + s32 id, core::rect rectangle, ISimpleTextureSource *tsrc, + bool noclip=false); //! destructor virtual ~GUIButton(); @@ -125,16 +126,10 @@ //! Sets an image which should be displayed on the button when it is in pressed state. virtual void setPressedImage(video::ITexture* image, const core::rect& pos) override; - //! Sets an image which should be displayed on the button when it is in hovered state. - virtual void setHoveredImage(video::ITexture* image=nullptr); - //! Sets the text displayed by the button virtual void setText(const wchar_t* text) override; // END PATCH - //! Sets an image which should be displayed on the button when it is in hovered state. - virtual void setHoveredImage(video::ITexture* image, const core::rect& pos); - //! Sets the sprite bank used by the button virtual void setSpriteBank(gui::IGUISpriteBank* bank=0) override; @@ -225,22 +220,29 @@ void setColor(video::SColor color); // PATCH - void setHoveredColor(video::SColor color); - void setPressedColor(video::SColor color); + //! Set element properties from a StyleSpec corresponding to the button state + void setFromState(); //! Set element properties from a StyleSpec - virtual void setFromStyle(const StyleSpec& style, ISimpleTextureSource *tsrc); + virtual void setFromStyle(const StyleSpec& style); + + //! Set the styles used for each state + void setStyles(const std::array& styles); // END PATCH //! Do not drop returned handle - static GUIButton* addButton(gui::IGUIEnvironment *environment, const core::rect& rectangle, - IGUIElement* parent, s32 id, const wchar_t* text, const wchar_t *tooltiptext=L""); + static GUIButton* addButton(gui::IGUIEnvironment *environment, + const core::rect& rectangle, ISimpleTextureSource *tsrc, + IGUIElement* parent, s32 id, const wchar_t* text, + const wchar_t *tooltiptext=L""); protected: void drawSprite(gui::EGUI_BUTTON_STATE state, u32 startTime, const core::position2di& center); gui::EGUI_BUTTON_IMAGE_STATE getImageState(bool pressed) const; + ISimpleTextureSource *getTextureSource() { return TSrc; } + struct ButtonImage { ButtonImage() : Texture(0), SourceRect(core::rect(0,0,0,0)) @@ -308,6 +310,8 @@ ButtonImage ButtonImages[gui::EGBIS_COUNT]; + std::array Styles; + gui::IGUIFont* OverrideFont; bool OverrideColorEnabled; @@ -326,11 +330,13 @@ video::SColor Colors[4]; // PATCH - video::SColor HoveredColors[4]; - video::SColor PressedColors[4]; + bool WasHovered = false; + ISimpleTextureSource *TSrc; gui::IGUIStaticText *StaticText; core::rect BgMiddle; + core::rect Padding; + core::vector2d ContentOffset; // END PATCH }; diff -Nru minetest-5.2.0/src/gui/guiButtonImage.cpp minetest-5.3.0/src/gui/guiButtonImage.cpp --- minetest-5.2.0/src/gui/guiButtonImage.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiButtonImage.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -30,8 +30,9 @@ using namespace gui; GUIButtonImage::GUIButtonImage(gui::IGUIEnvironment *environment, - gui::IGUIElement *parent, s32 id, core::rect rectangle, bool noclip) - : GUIButton (environment, parent, id, rectangle, noclip) + gui::IGUIElement *parent, s32 id, core::rect rectangle, + ISimpleTextureSource *tsrc, bool noclip) + : GUIButton (environment, parent, id, rectangle, tsrc, noclip) { m_image = Environment->addImage( core::rect(0,0,rectangle.getWidth(),rectangle.getHeight()), this); @@ -39,100 +40,37 @@ sendToBack(m_image); } -bool GUIButtonImage::OnEvent(const SEvent& event) -{ - bool result = GUIButton::OnEvent(event); - - EGUI_BUTTON_IMAGE_STATE imageState = getImageState(isPressed(), m_foreground_images); - video::ITexture *texture = m_foreground_images[(u32)imageState].Texture; - if (texture != nullptr) - { - m_image->setImage(texture); - } - - m_image->setVisible(texture != nullptr); - - return result; -} - -void GUIButtonImage::setForegroundImage(EGUI_BUTTON_IMAGE_STATE state, - video::ITexture *image, const core::rect &sourceRect) +void GUIButtonImage::setForegroundImage(video::ITexture *image) { - if (state >= EGBIS_COUNT) + if (image == m_foreground_image) return; - if (image) + if (image != nullptr) image->grab(); - u32 stateIdx = (u32)state; - if (m_foreground_images[stateIdx].Texture) - m_foreground_images[stateIdx].Texture->drop(); - - m_foreground_images[stateIdx].Texture = image; - m_foreground_images[stateIdx].SourceRect = sourceRect; - - EGUI_BUTTON_IMAGE_STATE imageState = getImageState(isPressed(), m_foreground_images); - if (imageState == stateIdx) - m_image->setImage(image); -} - -void GUIButtonImage::setForegroundImage(video::ITexture *image) -{ - setForegroundImage(gui::EGBIS_IMAGE_UP, image); -} - -void GUIButtonImage::setForegroundImage(video::ITexture *image, const core::rect &pos) -{ - setForegroundImage(gui::EGBIS_IMAGE_UP, image, pos); -} - -void GUIButtonImage::setPressedForegroundImage(video::ITexture *image) -{ - setForegroundImage(gui::EGBIS_IMAGE_DOWN, image); -} - -void GUIButtonImage::setPressedForegroundImage(video::ITexture *image, const core::rect &pos) -{ - setForegroundImage(gui::EGBIS_IMAGE_DOWN, image, pos); -} - -void GUIButtonImage::setHoveredForegroundImage(video::ITexture *image) -{ - setForegroundImage(gui::EGBIS_IMAGE_UP_MOUSEOVER, image); - setForegroundImage(gui::EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER, image); -} + if (m_foreground_image != nullptr) + m_foreground_image->drop(); -void GUIButtonImage::setHoveredForegroundImage(video::ITexture *image, const core::rect &pos) -{ - setForegroundImage(gui::EGBIS_IMAGE_UP_MOUSEOVER, image, pos); - setForegroundImage(gui::EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER, image, pos); + m_foreground_image = image; + m_image->setImage(image); } -void GUIButtonImage::setFromStyle(const StyleSpec &style, ISimpleTextureSource *tsrc) +//! Set element properties from a StyleSpec +void GUIButtonImage::setFromStyle(const StyleSpec& style) { - GUIButton::setFromStyle(style, tsrc); + GUIButton::setFromStyle(style); video::IVideoDriver *driver = Environment->getVideoDriver(); - const core::position2di buttonCenter(AbsoluteRect.getCenter()); - core::position2d geom(buttonCenter); if (style.isNotDefault(StyleSpec::FGIMG)) { - video::ITexture *texture = style.getTexture(StyleSpec::FGIMG, tsrc); - - setForegroundImage(guiScalingImageButton(driver, texture, geom.X, geom.Y)); - setScaleImage(true); - } - if (style.isNotDefault(StyleSpec::FGIMG_HOVERED)) { - video::ITexture *hovered_texture = style.getTexture(StyleSpec::FGIMG_HOVERED, tsrc); - - setHoveredForegroundImage(guiScalingImageButton(driver, hovered_texture, geom.X, geom.Y)); - setScaleImage(true); - } - if (style.isNotDefault(StyleSpec::FGIMG_PRESSED)) { - video::ITexture *pressed_texture = style.getTexture(StyleSpec::FGIMG_PRESSED, tsrc); + video::ITexture *texture = style.getTexture(StyleSpec::FGIMG, + getTextureSource()); - setPressedForegroundImage(guiScalingImageButton(driver, pressed_texture, geom.X, geom.Y)); + setForegroundImage(guiScalingImageButton(driver, texture, + AbsoluteRect.getWidth(), AbsoluteRect.getHeight())); setScaleImage(true); + } else { + setForegroundImage(nullptr); } } @@ -143,11 +81,12 @@ } GUIButtonImage *GUIButtonImage::addButton(IGUIEnvironment *environment, - const core::rect &rectangle, IGUIElement *parent, s32 id, - const wchar_t *text, const wchar_t *tooltiptext) + const core::rect &rectangle, ISimpleTextureSource *tsrc, + IGUIElement *parent, s32 id, const wchar_t *text, + const wchar_t *tooltiptext) { GUIButtonImage *button = new GUIButtonImage(environment, - parent ? parent : environment->getRootGUIElement(), id, rectangle); + parent ? parent : environment->getRootGUIElement(), id, rectangle, tsrc); if (text) button->setText(text); diff -Nru minetest-5.2.0/src/gui/guiButtonImage.h minetest-5.3.0/src/gui/guiButtonImage.h --- minetest-5.2.0/src/gui/guiButtonImage.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiButtonImage.h 2020-07-09 21:13:21.000000000 +0000 @@ -17,6 +17,8 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#pragma once + #include "guiButton.h" #include "IGUIButton.h" @@ -27,33 +29,23 @@ public: //! constructor GUIButtonImage(gui::IGUIEnvironment *environment, gui::IGUIElement *parent, - s32 id, core::rect rectangle, bool noclip = false); - - virtual bool OnEvent(const SEvent& event) override; - - void setForegroundImage(gui::EGUI_BUTTON_IMAGE_STATE state, - video::ITexture *image = nullptr, - const core::rect &sourceRect = core::rect(0, 0, 0, 0)); + s32 id, core::rect rectangle, ISimpleTextureSource *tsrc, + bool noclip = false); void setForegroundImage(video::ITexture *image = nullptr); - void setForegroundImage(video::ITexture *image, const core::rect &pos); - - void setPressedForegroundImage(video::ITexture *image = nullptr); - void setPressedForegroundImage(video::ITexture *image, const core::rect &pos); - - void setHoveredForegroundImage(video::ITexture *image = nullptr); - void setHoveredForegroundImage(video::ITexture *image, const core::rect &pos); - virtual void setFromStyle(const StyleSpec &style, ISimpleTextureSource *tsrc) override; + //! Set element properties from a StyleSpec + virtual void setFromStyle(const StyleSpec& style) override; virtual void setScaleImage(bool scaleImage=true) override; //! Do not drop returned handle static GUIButtonImage *addButton(gui::IGUIEnvironment *environment, - const core::rect &rectangle, IGUIElement *parent, s32 id, - const wchar_t *text, const wchar_t *tooltiptext = L""); + const core::rect &rectangle, ISimpleTextureSource *tsrc, + IGUIElement *parent, s32 id, const wchar_t *text, + const wchar_t *tooltiptext = L""); private: - ButtonImage m_foreground_images[gui::EGBIS_COUNT]; + video::ITexture *m_foreground_image = nullptr; gui::IGUIImage *m_image; }; diff -Nru minetest-5.2.0/src/gui/guiButtonItemImage.cpp minetest-5.3.0/src/gui/guiButtonItemImage.cpp --- minetest-5.2.0/src/gui/guiButtonItemImage.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiButtonItemImage.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -28,9 +28,11 @@ using namespace irr; using namespace gui; -GUIButtonItemImage::GUIButtonItemImage(gui::IGUIEnvironment *environment, gui::IGUIElement *parent, - s32 id, core::rect rectangle, std::string item, Client *client, bool noclip) - : GUIButton (environment, parent, id, rectangle, noclip) +GUIButtonItemImage::GUIButtonItemImage(gui::IGUIEnvironment *environment, + gui::IGUIElement *parent, s32 id, core::rect rectangle, + ISimpleTextureSource *tsrc, std::string item, Client *client, + bool noclip) + : GUIButton (environment, parent, id, rectangle, tsrc, noclip) { m_image = new GUIItemImage(environment, this, id, core::rect(0,0,rectangle.getWidth(),rectangle.getHeight()), @@ -42,12 +44,13 @@ } GUIButtonItemImage *GUIButtonItemImage::addButton(IGUIEnvironment *environment, - const core::rect &rectangle, IGUIElement *parent, s32 id, - const wchar_t *text, std::string item, Client *client) + const core::rect &rectangle, ISimpleTextureSource *tsrc, + IGUIElement *parent, s32 id, const wchar_t *text, std::string item, + Client *client) { GUIButtonItemImage *button = new GUIButtonItemImage(environment, parent ? parent : environment->getRootGUIElement(), - id, rectangle, item, client); + id, rectangle, tsrc, item, client); if (text) button->setText(text); diff -Nru minetest-5.2.0/src/gui/guiButtonItemImage.h minetest-5.3.0/src/gui/guiButtonItemImage.h --- minetest-5.2.0/src/gui/guiButtonItemImage.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiButtonItemImage.h 2020-07-09 21:13:21.000000000 +0000 @@ -17,6 +17,8 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#pragma once + #include "guiButton.h" #include "IGUIButton.h" @@ -30,13 +32,14 @@ public: //! constructor GUIButtonItemImage(gui::IGUIEnvironment *environment, gui::IGUIElement *parent, - s32 id, core::rect rectangle, std::string item, - Client *client, bool noclip = false); + s32 id, core::rect rectangle, ISimpleTextureSource *tsrc, + std::string item, Client *client, bool noclip = false); //! Do not drop returned handle static GUIButtonItemImage *addButton(gui::IGUIEnvironment *environment, - const core::rect &rectangle, IGUIElement *parent, s32 id, - const wchar_t *text, std::string item, Client *client); + const core::rect &rectangle, ISimpleTextureSource *tsrc, + IGUIElement *parent, s32 id, const wchar_t *text, std::string item, + Client *client); private: std::string m_item_name; diff -Nru minetest-5.2.0/src/gui/guiChatConsole.cpp minetest-5.3.0/src/gui/guiChatConsole.cpp --- minetest-5.2.0/src/gui/guiChatConsole.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiChatConsole.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -74,7 +74,9 @@ m_background_color.setBlue(clamp_u8(myround(console_color.Z))); } - m_font = g_fontengine->getFont(FONT_SIZE_UNSPECIFIED, FM_Mono); + u16 chat_font_size = g_settings->getU16("chat_font_size"); + m_font = g_fontengine->getFont(chat_font_size != 0 ? + chat_font_size : FONT_SIZE_UNSPECIFIED, FM_Mono); if (!m_font) { errorstream << "GUIChatConsole: Unable to load mono font" << std::endl; diff -Nru minetest-5.2.0/src/gui/guiConfirmRegistration.cpp minetest-5.3.0/src/gui/guiConfirmRegistration.cpp --- minetest-5.2.0/src/gui/guiConfirmRegistration.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiConfirmRegistration.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -40,10 +40,10 @@ GUIConfirmRegistration::GUIConfirmRegistration(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, IMenuManager *menumgr, Client *client, const std::string &playername, const std::string &password, - bool *aborted) : + bool *aborted, ISimpleTextureSource *tsrc) : GUIModalMenu(env, parent, id, menumgr), m_client(client), m_playername(playername), m_password(password), - m_aborted(aborted) + m_aborted(aborted), m_tsrc(tsrc) { #ifdef __ANDROID__ m_touchscreen_visible = false; @@ -130,14 +130,14 @@ core::rect rect2(0, 0, 230 * s, 35 * s); rect2 = rect2 + v2s32(size.X / 2 - 220 * s, ypos); text = wgettext("Register and Join"); - GUIButton::addButton(Environment, rect2, this, ID_confirm, text); + GUIButton::addButton(Environment, rect2, m_tsrc, this, ID_confirm, text); delete[] text; } { core::rect rect2(0, 0, 120 * s, 35 * s); rect2 = rect2 + v2s32(size.X / 2 + 70 * s, ypos); text = wgettext("Cancel"); - GUIButton::addButton(Environment, rect2, this, ID_cancel, text); + GUIButton::addButton(Environment, rect2, m_tsrc, this, ID_cancel, text); delete[] text; } { diff -Nru minetest-5.2.0/src/gui/guiConfirmRegistration.h minetest-5.3.0/src/gui/guiConfirmRegistration.h --- minetest-5.2.0/src/gui/guiConfirmRegistration.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiConfirmRegistration.h 2020-07-09 21:13:21.000000000 +0000 @@ -25,6 +25,7 @@ #include class Client; +class ISimpleTextureSource; class GUIConfirmRegistration : public GUIModalMenu { @@ -32,7 +33,7 @@ GUIConfirmRegistration(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, IMenuManager *menumgr, Client *client, const std::string &playername, const std::string &password, - bool *aborted); + bool *aborted, ISimpleTextureSource *tsrc); ~GUIConfirmRegistration(); void removeChildren(); @@ -63,4 +64,5 @@ const std::string &m_password; bool *m_aborted = nullptr; std::wstring m_pass_confirm = L""; + ISimpleTextureSource *m_tsrc; }; diff -Nru minetest-5.2.0/src/gui/guiEngine.cpp minetest-5.3.0/src/gui/guiEngine.cpp --- minetest-5.2.0/src/gui/guiEngine.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiEngine.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -144,10 +144,10 @@ //create soundmanager MenuMusicFetcher soundfetcher; #if USE_SOUND - if (g_settings->getBool("enable_sound")) + if (g_settings->getBool("enable_sound") && g_sound_manager_singleton.get()) m_sound_manager = createOpenALSoundManager(g_sound_manager_singleton.get(), &soundfetcher); #endif - if(!m_sound_manager) + if (!m_sound_manager) m_sound_manager = &dummySoundManager; //create topleft header diff -Nru minetest-5.2.0/src/gui/guiFormSpecMenu.cpp minetest-5.3.0/src/gui/guiFormSpecMenu.cpp --- minetest-5.2.0/src/gui/guiFormSpecMenu.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiFormSpecMenu.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -65,6 +65,7 @@ #include "guiInventoryList.h" #include "guiItemImage.h" #include "guiScrollBar.h" +#include "guiScrollContainer.h" #include "guiTable.h" #include "intlGUIEditBox.h" #include "guiHyperText.h" @@ -143,6 +144,8 @@ tooltip_rect_it.first->drop(); for (auto &clickthrough_it : m_clickthrough_elements) clickthrough_it->drop(); + for (auto &scroll_container_it : m_scroll_containers) + scroll_container_it.second->drop(); delete m_selected_item; delete m_form_src; @@ -351,6 +354,102 @@ } } +void GUIFormSpecMenu::parseScrollContainer(parserData *data, const std::string &element) +{ + std::vector parts = split(element, ';'); + + if (parts.size() < 4 || + (parts.size() > 5 && m_formspec_version <= FORMSPEC_API_VERSION)) { + errorstream << "Invalid scroll_container start element (" << parts.size() + << "): '" << element << "'" << std::endl; + return; + } + + std::vector v_pos = split(parts[0], ','); + std::vector v_geom = split(parts[1], ','); + std::string scrollbar_name = parts[2]; + std::string orientation = parts[3]; + f32 scroll_factor = 0.1f; + if (parts.size() >= 5 && !parts[4].empty()) + scroll_factor = stof(parts[4]); + + MY_CHECKPOS("scroll_container", 0); + MY_CHECKGEOM("scroll_container", 1); + + v2s32 pos = getRealCoordinateBasePos(v_pos); + v2s32 geom = getRealCoordinateGeometry(v_geom); + + if (orientation == "vertical") + scroll_factor *= -imgsize.Y; + else if (orientation == "horizontal") + scroll_factor *= -imgsize.X; + else + warningstream << "GUIFormSpecMenu::parseScrollContainer(): " + << "Invalid scroll_container orientation: " << orientation + << std::endl; + + // old parent (at first: this) + // ^ is parent of clipper + // ^ is parent of mover + // ^ is parent of other elements + + // make clipper + core::rect rect_clipper = core::rect(pos, pos + geom); + + gui::IGUIElement *clipper = new gui::IGUIElement(EGUIET_ELEMENT, Environment, + data->current_parent, 0, rect_clipper); + + // make mover + FieldSpec spec_mover( + "", + L"", + L"", + 258 + m_fields.size() + ); + + core::rect rect_mover = core::rect(0, 0, geom.X, geom.Y); + + GUIScrollContainer *mover = new GUIScrollContainer(Environment, + clipper, spec_mover.fid, rect_mover, orientation, scroll_factor); + + data->current_parent = mover; + + m_scroll_containers.emplace_back(scrollbar_name, mover); + + m_fields.push_back(spec_mover); + + clipper->drop(); + + // remove interferring offset of normal containers + container_stack.push(pos_offset); + pos_offset.X = 0.0f; + pos_offset.Y = 0.0f; +} + +void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data) +{ + if (data->current_parent == this || data->current_parent->getParent() == this || + container_stack.empty()) { + errorstream << "Invalid scroll_container end element, " + << "no matching scroll_container start element" << std::endl; + return; + } + + if (pos_offset.getLengthSQ() != 0.0f) { + // pos_offset is only set by containers and scroll_containers. + // scroll_containers always set it to 0,0 which means that if it is + // not 0,0, it is a normal container that was opened last, not a + // scroll_container + errorstream << "Invalid scroll_container end element, " + << "an inner container was left open" << std::endl; + return; + } + + data->current_parent = data->current_parent->getParent()->getParent(); + pos_offset = container_stack.top(); + container_stack.pop(); +} + void GUIFormSpecMenu::parseList(parserData *data, const std::string &element) { if (m_client == 0) { @@ -390,38 +489,10 @@ start_i = stoi(startindex); if (geom.X < 0 || geom.Y < 0 || start_i < 0) { - errorstream<< "Invalid list element: '" << element << "'" << std::endl; + errorstream << "Invalid list element: '" << element << "'" << std::endl; return; } - // check for the existence of inventory and list - Inventory *inv = m_invmgr->getInventory(loc); - if (!inv) { - warningstream << "GUIFormSpecMenu::parseList(): " - << "The inventory location " - << "\"" << loc.dump() << "\" doesn't exist" - << std::endl; - return; - } - InventoryList *ilist = inv->getList(listname); - if (!ilist) { - warningstream << "GUIFormSpecMenu::parseList(): " - << "The inventory list \"" << listname << "\" " - << "@ \"" << loc.dump() << "\" doesn't exist" - << std::endl; - return; - } - - // trim geom if it is larger than the actual inventory size - s32 list_size = (s32)ilist->getSize(); - if (list_size < geom.X * geom.Y + start_i) { - list_size -= MYMAX(start_i, 0); - geom.Y = list_size / geom.X; - geom.Y += list_size % geom.X > 0 ? 1 : 0; - if (geom.Y <= 1) - geom.X = list_size; - } - if (!data->explicit_size) warningstream << "invalid use of list without a size[] element" << std::endl; @@ -443,9 +514,9 @@ pos.X + (geom.X - 1) * slot_spacing.X + imgsize.X, pos.Y + (geom.Y - 1) * slot_spacing.Y + imgsize.Y); - GUIInventoryList *e = new GUIInventoryList(Environment, this, spec.fid, - rect, m_invmgr, loc, listname, geom, start_i, imgsize, slot_spacing, - this, data->inventorylist_options, m_font); + GUIInventoryList *e = new GUIInventoryList(Environment, data->current_parent, + spec.fid, rect, m_invmgr, loc, listname, geom, start_i, imgsize, + slot_spacing, this, data->inventorylist_options, m_font); m_inventorylists.push_back(e); m_fields.push_back(spec); @@ -550,10 +621,10 @@ spec.ftype = f_CheckBox; - gui::IGUICheckBox *e = Environment->addCheckBox(fselected, rect, this, - spec.fid, spec.flabel.c_str()); + gui::IGUICheckBox *e = Environment->addCheckBox(fselected, rect, + data->current_parent, spec.fid, spec.flabel.c_str()); - auto style = getStyleForElement("checkbox", name); + auto style = getDefaultStyleForElement("checkbox", name); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); if (spec.fname == data->focused_fieldname) { @@ -610,10 +681,10 @@ spec.ftype = f_ScrollBar; spec.send = true; - GUIScrollBar *e = new GUIScrollBar(Environment, this, spec.fid, rect, - is_horizontal, true); + GUIScrollBar *e = new GUIScrollBar(Environment, data->current_parent, + spec.fid, rect, is_horizontal, true); - auto style = getStyleForElement("scrollbar", name); + auto style = getDefaultStyleForElement("scrollbar", name); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); e->setArrowsVisible(data->scrollbar_options.arrow_visiblity); @@ -737,10 +808,11 @@ 1 ); core::rect rect(pos, pos + geom); - gui::IGUIImage *e = Environment->addImage(rect, this, spec.fid, 0, true); + gui::IGUIImage *e = Environment->addImage(rect, data->current_parent, + spec.fid, 0, true); e->setImage(texture); e->setScaleImage(true); - auto style = getStyleForElement("image", spec.fname); + auto style = getDefaultStyleForElement("image", spec.fname); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3)); m_fields.push_back(spec); @@ -774,9 +846,9 @@ L"", 258 + m_fields.size() ); - gui::IGUIImage *e = Environment->addImage(texture, pos, true, this, - spec.fid, 0); - auto style = getStyleForElement("image", spec.fname); + gui::IGUIImage *e = Environment->addImage(texture, pos, true, + data->current_parent, spec.fid, 0); + auto style = getDefaultStyleForElement("image", spec.fname); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3)); m_fields.push_back(spec); @@ -841,9 +913,11 @@ if (parts.size() >= 7) e->setFrameIndex(stoi(parts[6]) - 1); - auto style = getStyleForElement("animated_image", spec.fname, "image"); + auto style = getDefaultStyleForElement("animated_image", spec.fname, "image"); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - e->drop(); + + // Animated images should let events through + m_clickthrough_elements.push_back(e); m_fields.push_back(spec); } @@ -886,9 +960,9 @@ ); spec.ftype = f_ItemImage; - GUIItemImage *e = new GUIItemImage(Environment, this, spec.fid, + GUIItemImage *e = new GUIItemImage(Environment, data->current_parent, spec.fid, core::rect(pos, pos + geom), name, m_font, m_client); - auto style = getStyleForElement("item_image", spec.fname); + auto style = getDefaultStyleForElement("item_image", spec.fname); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); // item images should let events through @@ -949,10 +1023,11 @@ if(type == "button_exit") spec.is_exit = true; - GUIButton *e = GUIButton::addButton(Environment, rect, this, spec.fid, spec.flabel.c_str()); + 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" : ""); - e->setFromStyle(style, m_tsrc); + e->setStyles(style); if (spec.fname == data->focused_fieldname) { Environment->setFocus(e); @@ -1140,7 +1215,8 @@ } //now really show table - GUITable *e = new GUITable(Environment, this, spec.fid, rect, m_tsrc); + GUITable *e = new GUITable(Environment, data->current_parent, spec.fid, + rect, m_tsrc); if (spec.fname == data->focused_fieldname) { Environment->setFocus(e); @@ -1155,7 +1231,7 @@ if (!str_initial_selection.empty() && str_initial_selection != "0") e->setSelected(stoi(str_initial_selection)); - auto style = getStyleForElement("table", name); + auto style = getDefaultStyleForElement("table", name); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); m_tables.emplace_back(spec, e); @@ -1216,7 +1292,8 @@ } //now really show list - GUITable *e = new GUITable(Environment, this, spec.fid, rect, m_tsrc); + GUITable *e = new GUITable(Environment, data->current_parent, spec.fid, + rect, m_tsrc); if (spec.fname == data->focused_fieldname) { Environment->setFocus(e); @@ -1231,7 +1308,7 @@ if (!str_initial_selection.empty() && str_initial_selection != "0") e->setSelected(stoi(str_initial_selection)); - auto style = getStyleForElement("textlist", name); + auto style = getDefaultStyleForElement("textlist", name); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); m_tables.emplace_back(spec, e); @@ -1292,7 +1369,8 @@ spec.send = true; //now really show list - gui::IGUIComboBox *e = Environment->addComboBox(rect, this, spec.fid); + gui::IGUIComboBox *e = Environment->addComboBox(rect, data->current_parent, + spec.fid); if (spec.fname == data->focused_fieldname) { Environment->setFocus(e); @@ -1306,7 +1384,7 @@ if (!str_initial_selection.empty()) e->setSelected(stoi(str_initial_selection)-1); - auto style = getStyleForElement("dropdown", name); + auto style = getDefaultStyleForElement("dropdown", name); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); m_fields.push_back(spec); @@ -1378,7 +1456,8 @@ ); spec.send = true; - gui::IGUIEditBox * e = Environment->addEditBox(0, rect, true, this, spec.fid); + gui::IGUIEditBox *e = Environment->addEditBox(0, rect, true, + data->current_parent, spec.fid); if (spec.fname == data->focused_fieldname) { Environment->setFocus(e); @@ -1389,12 +1468,12 @@ rect.UpperLeftCorner.Y -= font_height; rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height; gui::StaticText::add(Environment, spec.flabel.c_str(), rect, false, true, - this, 0); + data->current_parent, 0); } e->setPasswordBox(true,L'*'); - auto style = getStyleForElement("pwdfield", name, "field"); + auto style = getDefaultStyleForElement("pwdfield", name, "field"); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); e->setDrawBorder(style.getBool(StyleSpec::BORDER, true)); e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF))); @@ -1424,7 +1503,7 @@ if (!is_editable && !is_multiline) { // spec field id to 0, this stops submit searching for a value that isn't there gui::StaticText::add(Environment, spec.flabel.c_str(), rect, false, true, - this, spec.fid); + data->current_parent, 0); return; } @@ -1442,19 +1521,19 @@ if (use_intl_edit_box && g_settings->getBool("freetype")) { e = new gui::intlGUIEditBox(spec.fdefault.c_str(), true, Environment, - this, spec.fid, rect, is_editable, is_multiline); + data->current_parent, spec.fid, rect, is_editable, is_multiline); } else { if (is_multiline) { - e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true, - Environment, this, spec.fid, rect, is_editable, true); + e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true, Environment, + data->current_parent, spec.fid, rect, is_editable, true); } else if (is_editable) { - e = Environment->addEditBox(spec.fdefault.c_str(), rect, true, this, - spec.fid); + e = Environment->addEditBox(spec.fdefault.c_str(), rect, true, + data->current_parent, spec.fid); e->grab(); } } - auto style = getStyleForElement(is_multiline ? "textarea" : "field", spec.fname); + auto style = getDefaultStyleForElement(is_multiline ? "textarea" : "field", spec.fname); if (e) { if (is_editable && spec.fname == data->focused_fieldname) @@ -1490,7 +1569,7 @@ rect.UpperLeftCorner.Y -= font_height; rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height; IGUIElement *t = gui::StaticText::add(Environment, spec.flabel.c_str(), - rect, false, true, this, 0); + rect, false, true, data->current_parent, 0); if (t) t->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); @@ -1670,8 +1749,8 @@ ); spec.ftype = f_HyperText; - GUIHyperText *e = new GUIHyperText(spec.flabel.c_str(), Environment, this, - spec.fid, rect, m_client, m_tsrc); + GUIHyperText *e = new GUIHyperText(spec.flabel.c_str(), Environment, + data->current_parent, spec.fid, rect, m_client, m_tsrc); e->drop(); m_fields.push_back(spec); @@ -1749,10 +1828,11 @@ 4 ); gui::IGUIStaticText *e = gui::StaticText::add(Environment, - spec.flabel.c_str(), rect, false, false, this, spec.fid); + spec.flabel.c_str(), rect, false, false, data->current_parent, + spec.fid); e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER); - auto style = getStyleForElement("label", spec.fname); + auto style = getDefaultStyleForElement("label", spec.fname); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF))); @@ -1829,10 +1909,10 @@ 258 + m_fields.size() ); gui::IGUIStaticText *e = gui::StaticText::add(Environment, spec.flabel.c_str(), - rect, false, false, this, spec.fid); + rect, false, false, data->current_parent, spec.fid); e->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER); - auto style = getStyleForElement("vertlabel", spec.fname, "label"); + auto style = getDefaultStyleForElement("vertlabel", spec.fname, "label"); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF))); @@ -1863,17 +1943,8 @@ MY_CHECKPOS("imagebutton",0); MY_CHECKGEOM("imagebutton",1); - bool noclip = false; - bool drawborder = true; std::string pressed_image_name; - if (parts.size() >= 7) { - if (parts[5] == "true") - noclip = true; - if (parts[6] == "false") - drawborder = false; - } - if (parts.size() >= 8) { pressed_image_name = parts[7]; } @@ -1911,35 +1982,30 @@ if (type == "image_button_exit") spec.is_exit = true; - GUIButtonImage *e = GUIButtonImage::addButton(Environment, rect, this, spec.fid, spec.flabel.c_str()); + GUIButtonImage *e = GUIButtonImage::addButton(Environment, rect, m_tsrc, + data->current_parent, spec.fid, spec.flabel.c_str()); if (spec.fname == data->focused_fieldname) { Environment->setFocus(e); } auto style = getStyleForElement("image_button", spec.fname); - e->setFromStyle(style, m_tsrc); - // We explicitly handle these arguments *after* the style properties in - // order to override them if they are provided + // Override style properties with values specified directly in the element if (!image_name.empty()) - { - video::ITexture *texture = m_tsrc->getTexture(image_name); - e->setForegroundImage(guiScalingImageButton( - Environment->getVideoDriver(), texture, geom.X, geom.Y)); - } - if (!pressed_image_name.empty()) { - video::ITexture *pressed_texture = m_tsrc->getTexture(pressed_image_name); - e->setPressedForegroundImage(guiScalingImageButton( - Environment->getVideoDriver(), pressed_texture, geom.X, geom.Y)); - } - e->setScaleImage(true); + style[StyleSpec::STATE_DEFAULT].set(StyleSpec::FGIMG, image_name); + + if (!pressed_image_name.empty()) + style[StyleSpec::STATE_PRESSED].set(StyleSpec::FGIMG, pressed_image_name); if (parts.size() >= 7) { - e->setNotClipped(noclip); - e->setDrawBorder(drawborder); + style[StyleSpec::STATE_DEFAULT].set(StyleSpec::NOCLIP, parts[5]); + style[StyleSpec::STATE_DEFAULT].set(StyleSpec::BORDER, parts[6]); } + e->setStyles(style); + e->setScaleImage(true); + m_fields.push_back(spec); return; } @@ -1961,7 +2027,7 @@ // Width is not here because tabs are the width of the text, and // there's no reason to change that. unsigned int i = 0; - std::vector v_geom = {"1", "0.75"}; // Dummy width and default height + std::vector v_geom = {"1", "1"}; // Dummy width and height bool auto_width = true; if (parts.size() == 7) { i++; @@ -2005,6 +2071,9 @@ pos = getRealCoordinateBasePos(v_pos); geom = getRealCoordinateGeometry(v_geom); + // Set default height + if (parts.size() <= 6) + geom.Y = m_btn_height * 2; pos.Y -= geom.Y; // TabHeader base pos is the bottom, not the top. if (auto_width) geom.X = DesiredRect.getWidth(); // Set automatic width @@ -2023,8 +2092,8 @@ core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); - gui::IGUITabControl *e = Environment->addTabControl(rect, this, - show_background, show_border, spec.fid); + gui::IGUITabControl *e = Environment->addTabControl(rect, + data->current_parent, show_background, show_border, spec.fid); e->setAlignment(irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_LOWERRIGHT); e->setTabHeight(geom.Y); @@ -2033,7 +2102,7 @@ Environment->setFocus(e); } - auto style = getStyleForElement("tabheader", name); + auto style = getDefaultStyleForElement("tabheader", name); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, true)); for (const std::string &button : buttons) { @@ -2059,7 +2128,6 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data, const std::string &element) { - if (m_client == 0) { warningstream << "invalid use of item_image_button with m_client==0" << std::endl; @@ -2118,10 +2186,12 @@ 2 ); - GUIButtonItemImage *e_btn = GUIButtonItemImage::addButton(Environment, rect, this, spec_btn.fid, spec_btn.flabel.c_str(), item_name, m_client); + GUIButtonItemImage *e_btn = GUIButtonItemImage::addButton(Environment, + rect, m_tsrc, data->current_parent, spec_btn.fid, spec_btn.flabel.c_str(), + item_name, m_client); auto style = getStyleForElement("item_image_button", spec_btn.fname, "image_button"); - e_btn->setFromStyle(style, m_tsrc); + e_btn->setStyles(style); if (spec_btn.fname == data->focused_fieldname) { Environment->setFocus(e_btn); @@ -2175,9 +2245,10 @@ core::rect rect(pos, pos + geom); - GUIBox *e = new GUIBox(Environment, this, spec.fid, rect, tmp_color); + GUIBox *e = new GUIBox(Environment, data->current_parent, spec.fid, + rect, tmp_color); - auto style = getStyleForElement("box", spec.fname); + auto style = getDefaultStyleForElement("box", spec.fname); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3)); e->drop(); @@ -2327,7 +2398,7 @@ core::rect rect(pos, pos + geom); gui::IGUIElement *e = new gui::IGUIElement(EGUIET_ELEMENT, Environment, - this, fieldspec.fid, rect); + data->current_parent, fieldspec.fid, rect); // the element the rect tooltip is bound to should not block mouse-clicks e->setVisible(false); @@ -2469,6 +2540,7 @@ StyleSpec spec; + // Parse properties for (size_t i = 1; i < parts.size(); i++) { size_t equal_pos = parts[i].find('='); if (equal_pos == std::string::npos) { @@ -2490,7 +2562,7 @@ << "'" << std::endl; property_warned.insert(propname); } - return false; + continue; } spec.set(prop, value); @@ -2500,16 +2572,92 @@ for (size_t sel = 0; sel < selectors.size(); sel++) { std::string selector = trim(selectors[sel]); - if (selector.empty()) { - errorstream << "Invalid style element (Empty selector): '" << element - << "'" << std::endl; + // Copy the style properties to a new StyleSpec + // This allows a separate state mask per-selector + StyleSpec selector_spec = spec; + + // Parse state information, if it exists + bool state_valid = true; + size_t state_pos = selector.find(':'); + if (state_pos != std::string::npos) { + std::string state_str = selector.substr(state_pos + 1); + selector = selector.substr(0, state_pos); + + if (state_str.empty()) { + errorstream << "Invalid style element (Invalid state): '" << element + << "'" << std::endl; + state_valid = false; + } else { + std::vector states = split(state_str, '+'); + for (std::string &state : states) { + StyleSpec::State converted = StyleSpec::getStateByName(state); + if (converted == StyleSpec::STATE_INVALID) { + infostream << "Unknown style state " << state << + " in element '" << element << "'" << std::endl; + state_valid = false; + break; + } + + selector_spec.addState(converted); + } + } + } + + if (!state_valid) { + // Skip this selector continue; } if (style_type) { - theme_by_type[selector] |= spec; + theme_by_type[selector].push_back(selector_spec); } else { - theme_by_name[selector] |= spec; + theme_by_name[selector].push_back(selector_spec); + } + + // Backwards-compatibility for existing _hovered/_pressed properties + if (selector_spec.hasProperty(StyleSpec::BGCOLOR_HOVERED) + || selector_spec.hasProperty(StyleSpec::BGIMG_HOVERED) + || selector_spec.hasProperty(StyleSpec::FGIMG_HOVERED)) { + StyleSpec hover_spec; + hover_spec.addState(StyleSpec::STATE_HOVERED); + + if (selector_spec.hasProperty(StyleSpec::BGCOLOR_HOVERED)) { + hover_spec.set(StyleSpec::BGCOLOR, selector_spec.get(StyleSpec::BGCOLOR_HOVERED, "")); + } + if (selector_spec.hasProperty(StyleSpec::BGIMG_HOVERED)) { + hover_spec.set(StyleSpec::BGIMG, selector_spec.get(StyleSpec::BGIMG_HOVERED, "")); + } + if (selector_spec.hasProperty(StyleSpec::FGIMG_HOVERED)) { + hover_spec.set(StyleSpec::FGIMG, selector_spec.get(StyleSpec::FGIMG_HOVERED, "")); + } + + if (style_type) { + theme_by_type[selector].push_back(hover_spec); + } else { + theme_by_name[selector].push_back(hover_spec); + } + } + if (selector_spec.hasProperty(StyleSpec::BGCOLOR_PRESSED) + || selector_spec.hasProperty(StyleSpec::BGIMG_PRESSED) + || selector_spec.hasProperty(StyleSpec::FGIMG_PRESSED)) { + StyleSpec press_spec; + press_spec.addState(StyleSpec::STATE_PRESSED); + + if (selector_spec.hasProperty(StyleSpec::BGCOLOR_PRESSED)) { + press_spec.set(StyleSpec::BGCOLOR, selector_spec.get(StyleSpec::BGCOLOR_PRESSED, "")); + } + if (selector_spec.hasProperty(StyleSpec::BGIMG_PRESSED)) { + press_spec.set(StyleSpec::BGIMG, selector_spec.get(StyleSpec::BGIMG_PRESSED, "")); + } + if (selector_spec.hasProperty(StyleSpec::FGIMG_PRESSED)) { + press_spec.set(StyleSpec::FGIMG, selector_spec.get(StyleSpec::FGIMG_PRESSED, "")); + } + + if (style_type) { + theme_by_type[selector].push_back(press_spec); + } else { + theme_by_name[selector].push_back(press_spec); + } } } @@ -2525,24 +2673,12 @@ if (parseVersionDirect(element)) return; - std::vector parts = split(element,'['); - - // ugly workaround to keep compatibility - if (parts.size() > 2) { - if (trim(parts[0]) == "image") { - for (unsigned int i=2;i< parts.size(); i++) { - parts[1] += "[" + parts[i]; - } - } - else { return; } - } - - if (parts.size() < 2) { + size_t pos = element.find('['); + if (pos == std::string::npos) return; - } - std::string type = trim(parts[0]); - std::string description = trim(parts[1]); + std::string type = trim(element.substr(0, pos)); + std::string description = element.substr(pos+1); if (type == "container") { parseContainer(data, description); @@ -2709,6 +2845,16 @@ return; } + if (type == "scroll_container") { + parseScrollContainer(data, description); + return; + } + + if (type == "scroll_container_end") { + parseScrollContainerEnd(data); + return; + } + // Ignore others infostream << "Unknown DrawSpec: type=" << type << ", data=\"" << description << "\"" << std::endl; @@ -2765,8 +2911,10 @@ tooltip_rect_it.first->drop(); for (auto &clickthrough_it : m_clickthrough_elements) clickthrough_it->drop(); + for (auto &scroll_container_it : m_scroll_containers) + scroll_container_it.second->drop(); - mydata.size= v2s32(100,100); + mydata.size = v2s32(100, 100); mydata.screensize = screensize; mydata.offset = v2f32(0.5f, 0.5f); mydata.anchor = v2f32(0.5f, 0.5f); @@ -2775,6 +2923,9 @@ // Base position of contents of form mydata.basepos = getBasePos(); + // the parent for the parsed elements + mydata.current_parent = this; + m_inventorylists.clear(); m_backgrounds.clear(); m_tables.clear(); @@ -2785,6 +2936,7 @@ m_tooltip_rects.clear(); m_inventory_rings.clear(); m_dropdowns.clear(); + m_scroll_containers.clear(); theme_by_name.clear(); theme_by_type.clear(); m_clickthrough_elements.clear(); @@ -3051,11 +3203,24 @@ parseElement(&mydata, elements[i]); } - if (!container_stack.empty()) { + if (mydata.current_parent != this) { + errorstream << "Invalid formspec string: scroll_container was never closed!" + << std::endl; + } else if (!container_stack.empty()) { errorstream << "Invalid formspec string: container was never closed!" << std::endl; } + // get the scrollbar elements for scroll_containers + for (const std::pair &c : m_scroll_containers) { + for (const std::pair &b : m_scrollbars) { + if (c.first == b.first.fname) { + c.second->setScrollBar(b.second); + break; + } + } + } + // If there are fields without explicit size[], add a "Proceed" // button and adjust size to fit all the fields. if (mydata.simple_field_count > 0 && !mydata.explicit_size) { @@ -3080,7 +3245,7 @@ size.X / 2 - 70 + 140, pos.Y + m_btn_height * 2 ); const wchar_t *text = wgettext("Proceed"); - GUIButton::addButton(Environment, mydata.rect, this, 257, text); + GUIButton::addButton(Environment, mydata.rect, m_tsrc, this, 257, text); delete[] text; } } @@ -3146,28 +3311,24 @@ if (!hasAndroidUIInput()) return false; + // still waiting + if (porting::getInputDialogState() == -1) + return true; + std::string fieldname = m_jni_field_name; m_jni_field_name.clear(); - for (std::vector::iterator iter = m_fields.begin(); - iter != m_fields.end(); ++iter) { - - if (iter->fname != fieldname) { + for (const FieldSpec &field : m_fields) { + if (field.fname != fieldname) continue; - } - IGUIElement *tochange = getElementFromId(iter->fid, true); - if (tochange == 0) { - return false; - } + IGUIElement *element = getElementFromId(field.fid, true); - if (tochange->getType() != irr::gui::EGUIET_EDIT_BOX) { + if (!element || element->getType() != irr::gui::EGUIET_EDIT_BOX) return false; - } std::string text = porting::getInputDialogValue(); - - ((gui::IGUIEditBox *)tochange)->setText(utf8_to_wide(text).c_str()); + ((gui::IGUIEditBox *)element)->setText(utf8_to_wide(text).c_str()); } return false; } @@ -3314,8 +3475,12 @@ bool hovered_element_found = false; if (hovered != NULL) { - s32 id = hovered->getID(); + if (m_show_debug) { + core::rect rect = hovered->getAbsoluteClippingRect(); + driver->draw2DRectangle(0x22FFFF00, rect, &rect); + } + s32 id = hovered->getID(); u64 delta = 0; if (id == -1) { m_old_tooltip_id = id; @@ -3395,6 +3560,10 @@ tooltip_offset_y = 0; if (m_pointer.X > (s32)screenSize.X / 2) tooltip_offset_x = -(tooltip_offset_x + tooltip_width); + + // Hide tooltip after ETIE_LEFT_UP + if (m_pointer.X == 0) + return; #endif // Calculate and set the tooltip position @@ -3837,6 +4006,10 @@ (kp == getKeySetting("keymap_screenshot"))) { m_client->makeScreenshot(); } + + if (event.KeyInput.PressedDown && kp == getKeySetting("keymap_toggle_debug")) + m_show_debug = !m_show_debug; + if (event.KeyInput.PressedDown && (event.KeyInput.Key==KEY_RETURN || event.KeyInput.Key==KEY_UP || @@ -4344,6 +4517,12 @@ } } + if (event.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED) { + // move scroll_containers + for (const std::pair &c : m_scroll_containers) + c.second->onScrollEvent(event.GUIEvent.Caller); + } + if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) { if (event.GUIEvent.Caller->getID() > 257) { bool close_on_enter = true; @@ -4432,25 +4611,46 @@ return L""; } -StyleSpec GUIFormSpecMenu::getStyleForElement(const std::string &type, +StyleSpec GUIFormSpecMenu::getDefaultStyleForElement(const std::string &type, const std::string &name, const std::string &parent_type) { - StyleSpec ret; + return getStyleForElement(type, name, parent_type)[StyleSpec::STATE_DEFAULT]; +} + +std::array GUIFormSpecMenu::getStyleForElement( + const std::string &type, const std::string &name, const std::string &parent_type) +{ + std::array ret; + + auto it = theme_by_type.find("*"); + if (it != theme_by_type.end()) { + for (const StyleSpec &spec : it->second) + ret[(u32)spec.getState()] |= spec; + } + + it = theme_by_name.find("*"); + if (it != theme_by_name.end()) { + for (const StyleSpec &spec : it->second) + ret[(u32)spec.getState()] |= spec; + } if (!parent_type.empty()) { - auto it = theme_by_type.find(parent_type); + it = theme_by_type.find(parent_type); if (it != theme_by_type.end()) { - ret |= it->second; + for (const StyleSpec &spec : it->second) + ret[(u32)spec.getState()] |= spec; } } - auto it = theme_by_type.find(type); + it = theme_by_type.find(type); if (it != theme_by_type.end()) { - ret |= it->second; + for (const StyleSpec &spec : it->second) + ret[(u32)spec.getState()] |= spec; } it = theme_by_name.find(name); if (it != theme_by_name.end()) { - ret |= it->second; + for (const StyleSpec &spec : it->second) + ret[(u32)spec.getState()] |= spec; } return ret; diff -Nru minetest-5.2.0/src/gui/guiFormSpecMenu.h minetest-5.3.0/src/gui/guiFormSpecMenu.h --- minetest-5.2.0/src/gui/guiFormSpecMenu.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiFormSpecMenu.h 2020-07-09 21:13:21.000000000 +0000 @@ -39,6 +39,7 @@ class Client; class GUIScrollBar; class TexturePool; +class GUIScrollContainer; typedef enum { f_Button, @@ -274,11 +275,13 @@ v2s32 getRealCoordinateBasePos(const std::vector &v_pos); v2s32 getRealCoordinateGeometry(const std::vector &v_geom); - std::unordered_map theme_by_type; - std::unordered_map theme_by_name; + std::unordered_map> theme_by_type; + std::unordered_map> theme_by_name; std::unordered_set property_warned; - StyleSpec getStyleForElement(const std::string &type, + StyleSpec getDefaultStyleForElement(const std::string &type, + const std::string &name="", const std::string &parent_type=""); + std::array getStyleForElement(const std::string &type, const std::string &name="", const std::string &parent_type=""); v2s32 padding; @@ -308,6 +311,7 @@ std::vector> m_scrollbars; std::vector>> m_dropdowns; std::vector m_clickthrough_elements; + std::vector> m_scroll_containers; GUIInventoryList::ItemSpec *m_selected_item = nullptr; u16 m_selected_amount = 0; @@ -341,6 +345,7 @@ u16 m_formspec_version = 1; std::string m_focused_element = ""; JoystickController *m_joystick; + bool m_show_debug = false; typedef struct { bool explicit_size; @@ -356,6 +361,7 @@ std::string focused_fieldname; GUITable::TableOptions table_options; GUITable::TableColumns table_columns; + gui::IGUIElement *current_parent = nullptr; GUIInventoryList::Options inventorylist_options; @@ -388,6 +394,8 @@ void parseSize(parserData* data, const std::string &element); void parseContainer(parserData* data, const std::string &element); void parseContainerEnd(parserData* data); + void parseScrollContainer(parserData *data, const std::string &element); + void parseScrollContainerEnd(parserData *data); void parseList(parserData* data, const std::string &element); void parseListRing(parserData* data, const std::string &element); void parseCheckbox(parserData* data, const std::string &element); diff -Nru minetest-5.2.0/src/gui/guiHyperText.cpp minetest-5.3.0/src/gui/guiHyperText.cpp --- minetest-5.2.0/src/gui/guiHyperText.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiHyperText.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -917,20 +917,20 @@ // Draw text in a rectangle with a given offset. Items are actually placed in // relative (to upper left corner) coordinates. -void TextDrawer::draw(const core::rect &dest_rect, +void TextDrawer::draw(const core::rect &clip_rect, const core::position2d &dest_offset) { irr::video::IVideoDriver *driver = m_environment->getVideoDriver(); - core::position2d offset = dest_rect.UpperLeftCorner + dest_offset; + core::position2d offset = dest_offset; offset.Y += m_voffset; if (m_text.background_type == ParsedText::BACKGROUND_COLOR) - driver->draw2DRectangle(m_text.background_color, dest_rect); + driver->draw2DRectangle(m_text.background_color, clip_rect); for (auto &p : m_text.m_paragraphs) { for (auto &el : p.elements) { core::rect rect(el.pos + offset, el.dim); - if (!rect.isRectCollided(dest_rect)) + if (!rect.isRectCollided(clip_rect)) continue; switch (el.type) { @@ -947,7 +947,7 @@ if (el.type == ParsedText::ELEMENT_TEXT) el.font->draw(el.text, rect, color, false, true, - &dest_rect); + &clip_rect); if (el.underline && el.drawwidth) { s32 linepos = el.pos.Y + offset.Y + @@ -958,7 +958,7 @@ el.pos.X + offset.X + el.drawwidth, linepos + (el.baseline >> 3)); - driver->draw2DRectangle(color, linerect, &dest_rect); + driver->draw2DRectangle(color, linerect, &clip_rect); } } break; @@ -972,7 +972,7 @@ irr::core::rect( core::position2d(0, 0), texture->getOriginalSize()), - &dest_rect, 0, true); + &clip_rect, 0, true); } break; case ParsedText::ELEMENT_ITEM: { @@ -982,7 +982,7 @@ drawItemStack( m_environment->getVideoDriver(), - g_fontengine->getFont(), item, rect, &dest_rect, + g_fontengine->getFont(), item, rect, &clip_rect, m_client, IT_ROT_OTHER, el.angle, el.rotation ); } break; @@ -1094,6 +1094,7 @@ m_text_scrollpos.Y = -m_vscrollbar->getPos(); m_drawer.draw(m_display_text_rect, m_text_scrollpos); checkHover(event.MouseInput.X, event.MouseInput.Y); + return true; } else if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) { ParsedText::Element *element = getElementAt( @@ -1151,7 +1152,8 @@ m_vscrollbar->setPos(0); m_vscrollbar->setVisible(false); } - m_drawer.draw(m_display_text_rect, m_text_scrollpos); + m_drawer.draw(AbsoluteClippingRect, + m_display_text_rect.UpperLeftCorner + m_text_scrollpos); // draw children IGUIElement::draw(); diff -Nru minetest-5.2.0/src/gui/guiHyperText.h minetest-5.3.0/src/gui/guiHyperText.h --- minetest-5.2.0/src/gui/guiHyperText.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiHyperText.h 2020-07-09 21:13:21.000000000 +0000 @@ -174,7 +174,7 @@ void place(const core::rect &dest_rect); inline s32 getHeight() { return m_height; }; - void draw(const core::rect &dest_rect, + void draw(const core::rect &clip_rect, const core::position2d &dest_offset); ParsedText::Element *getElementAt(core::position2d pos); ParsedText::Tag *m_hovertag; diff -Nru minetest-5.2.0/src/gui/guiInventoryList.cpp minetest-5.3.0/src/gui/guiInventoryList.cpp --- minetest-5.2.0/src/gui/guiInventoryList.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiInventoryList.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -47,7 +47,8 @@ m_fs_menu(fs_menu), m_options(options), m_font(font), - m_hovered_i(-1) + m_hovered_i(-1), + m_already_warned(false) { } @@ -58,20 +59,27 @@ Inventory *inv = m_invmgr->getInventory(m_inventoryloc); if (!inv) { - warningstream << "GUIInventoryList::draw(): " - << "The inventory location " - << "\"" << m_inventoryloc.dump() << "\" doesn't exist anymore" - << std::endl; + if (!m_already_warned) { + warningstream << "GUIInventoryList::draw(): " + << "The inventory location " + << "\"" << m_inventoryloc.dump() << "\" doesn't exist" + << std::endl; + m_already_warned = true; + } return; } InventoryList *ilist = inv->getList(m_listname); if (!ilist) { - warningstream << "GUIInventoryList::draw(): " - << "The inventory list \"" << m_listname << "\" @ \"" - << m_inventoryloc.dump() << "\" doesn't exist anymore" - << std::endl; + if (!m_already_warned) { + warningstream << "GUIInventoryList::draw(): " + << "The inventory list \"" << m_listname << "\" @ \"" + << m_inventoryloc.dump() << "\" doesn't exist" + << std::endl; + m_already_warned = true; + } return; } + m_already_warned = false; video::IVideoDriver *driver = Environment->getVideoDriver(); Client *client = m_fs_menu->getClient(); @@ -80,9 +88,11 @@ core::rect imgrect(0, 0, m_slot_size.X, m_slot_size.Y); v2s32 base_pos = AbsoluteRect.UpperLeftCorner; + const s32 list_size = (s32)ilist->getSize(); + for (s32 i = 0; i < m_geom.X * m_geom.Y; i++) { s32 item_i = i + m_start_item_i; - if (item_i >= (s32)ilist->getSize()) + if (item_i >= list_size) break; v2s32 p((i % m_geom.X) * m_slot_spacing.X, @@ -192,10 +202,19 @@ s32 GUIInventoryList::getItemIndexAtPos(v2s32 p) const { + // no item if no gui element at pointer if (!IsVisible || AbsoluteClippingRect.getArea() <= 0 || !AbsoluteClippingRect.isPointInside(p)) return -1; + // there can not be an item if the inventory or the inventorylist does not exist + Inventory *inv = m_invmgr->getInventory(m_inventoryloc); + if (!inv) + return -1; + InventoryList *ilist = inv->getList(m_listname); + if (!ilist) + return -1; + core::rect imgrect(0, 0, m_slot_size.X, m_slot_size.Y); v2s32 base_pos = AbsoluteRect.UpperLeftCorner; @@ -210,7 +229,8 @@ rect.clipAgainst(AbsoluteClippingRect); - if (rect.getArea() > 0 && rect.isPointInside(p)) + if (rect.getArea() > 0 && rect.isPointInside(p) && + i + m_start_item_i < (s32)ilist->getSize()) return i + m_start_item_i; return -1; diff -Nru minetest-5.2.0/src/gui/guiInventoryList.h minetest-5.3.0/src/gui/guiInventoryList.h --- minetest-5.2.0/src/gui/guiInventoryList.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiInventoryList.h 2020-07-09 21:13:21.000000000 +0000 @@ -107,7 +107,7 @@ const InventoryLocation m_inventoryloc; const std::string m_listname; - // specifies the width and height of the inventorylist in itemslots + // the specified width and height of the shown inventorylist in itemslots const v2s32 m_geom; // the first item's index in inventory const s32 m_start_item_i; @@ -127,4 +127,7 @@ // the index of the hovered item; -1 if no item is hovered s32 m_hovered_i; + + // we do not want to write a warning on every draw + bool m_already_warned; }; diff -Nru minetest-5.2.0/src/gui/guiKeyChangeMenu.cpp minetest-5.3.0/src/gui/guiKeyChangeMenu.cpp --- minetest-5.2.0/src/gui/guiKeyChangeMenu.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiKeyChangeMenu.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -82,8 +82,10 @@ }; GUIKeyChangeMenu::GUIKeyChangeMenu(gui::IGUIEnvironment* env, - gui::IGUIElement* parent, s32 id, IMenuManager *menumgr) : -GUIModalMenu(env, parent, id, menumgr) + gui::IGUIElement* parent, s32 id, IMenuManager *menumgr, + ISimpleTextureSource *tsrc) : + GUIModalMenu(env, parent, id, menumgr), + m_tsrc(tsrc) { init_keys(); } @@ -157,7 +159,7 @@ core::rect rect(0, 0, 100 * s, 30 * s); rect += topleft + v2s32(offset.X + 150 * s, offset.Y - 5 * s); const wchar_t *text = wgettext(k->key.name()); - k->button = GUIButton::addButton(Environment, rect, this, k->id, text); + k->button = GUIButton::addButton(Environment, rect, m_tsrc, this, k->id, text); delete[] text; } if ((i + 1) % KMaxButtonPerColumns == 0) { @@ -217,14 +219,14 @@ core::rect rect(0, 0, 100 * s, 30 * s); rect += topleft + v2s32(size.X / 2 - 105 * s, size.Y - 40 * s); const wchar_t *text = wgettext("Save"); - GUIButton::addButton(Environment, rect, this, GUI_ID_BACK_BUTTON, text); + GUIButton::addButton(Environment, rect, m_tsrc, this, GUI_ID_BACK_BUTTON, text); delete[] text; } { core::rect rect(0, 0, 100 * s, 30 * s); rect += topleft + v2s32(size.X / 2 + 5 * s, size.Y - 40 * s); const wchar_t *text = wgettext("Cancel"); - GUIButton::addButton(Environment, rect, this, GUI_ID_ABORT_BUTTON, text); + GUIButton::addButton(Environment, rect, m_tsrc, this, GUI_ID_ABORT_BUTTON, text); delete[] text; } } diff -Nru minetest-5.2.0/src/gui/guiKeyChangeMenu.h minetest-5.3.0/src/gui/guiKeyChangeMenu.h --- minetest-5.2.0/src/gui/guiKeyChangeMenu.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiKeyChangeMenu.h 2020-07-09 21:13:21.000000000 +0000 @@ -28,6 +28,8 @@ #include #include +class ISimpleTextureSource; + struct key_setting { int id; @@ -41,7 +43,7 @@ { public: GUIKeyChangeMenu(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, - IMenuManager *menumgr); + IMenuManager *menumgr, ISimpleTextureSource *tsrc); ~GUIKeyChangeMenu(); void removeChildren(); @@ -74,4 +76,5 @@ key_setting *active_key = nullptr; gui::IGUIStaticText *key_used_text = nullptr; std::vector key_settings; + ISimpleTextureSource *m_tsrc; }; diff -Nru minetest-5.2.0/src/gui/guiPasswordChange.cpp minetest-5.3.0/src/gui/guiPasswordChange.cpp --- minetest-5.2.0/src/gui/guiPasswordChange.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiPasswordChange.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -38,10 +38,12 @@ GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, IMenuManager *menumgr, - Client* client + Client* client, + ISimpleTextureSource *tsrc ): GUIModalMenu(env, parent, id, menumgr), - m_client(client) + m_client(client), + m_tsrc(tsrc) { } @@ -146,14 +148,14 @@ core::rect rect(0, 0, 100 * s, 30 * s); rect = rect + v2s32(size.X / 4 + 56 * s, ypos); text = wgettext("Change"); - GUIButton::addButton(Environment, rect, this, ID_change, text); + GUIButton::addButton(Environment, rect, m_tsrc, this, ID_change, text); delete[] text; } { core::rect rect(0, 0, 100 * s, 30 * s); rect = rect + v2s32(size.X / 4 + 185 * s, ypos); text = wgettext("Cancel"); - GUIButton::addButton(Environment, rect, this, ID_cancel, text); + GUIButton::addButton(Environment, rect, m_tsrc, this, ID_cancel, text); delete[] text; } diff -Nru minetest-5.2.0/src/gui/guiPasswordChange.h minetest-5.3.0/src/gui/guiPasswordChange.h --- minetest-5.2.0/src/gui/guiPasswordChange.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiPasswordChange.h 2020-07-09 21:13:21.000000000 +0000 @@ -23,12 +23,14 @@ #include class Client; +class ISimpleTextureSource; class GUIPasswordChange : public GUIModalMenu { public: GUIPasswordChange(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, - IMenuManager *menumgr, Client *client); + IMenuManager *menumgr, Client *client, + ISimpleTextureSource *tsrc); ~GUIPasswordChange(); void removeChildren(); @@ -57,4 +59,5 @@ std::wstring m_oldpass = L""; std::wstring m_newpass = L""; std::wstring m_newpass_confirm = L""; + ISimpleTextureSource *m_tsrc; }; diff -Nru minetest-5.2.0/src/gui/guiScrollContainer.cpp minetest-5.3.0/src/gui/guiScrollContainer.cpp --- minetest-5.2.0/src/gui/guiScrollContainer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/gui/guiScrollContainer.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,70 @@ +/* +Minetest +Copyright (C) 2020 DS + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "guiScrollContainer.h" + +GUIScrollContainer::GUIScrollContainer(gui::IGUIEnvironment *env, + gui::IGUIElement *parent, s32 id, const core::rect &rectangle, + const std::string &orientation, f32 scrollfactor) : + gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle), + m_scrollbar(nullptr), m_scrollfactor(scrollfactor) +{ + if (orientation == "vertical") + m_orientation = VERTICAL; + else if (orientation == "horizontal") + m_orientation = HORIZONTAL; + else + m_orientation = UNDEFINED; +} + +bool GUIScrollContainer::OnEvent(const SEvent &event) +{ + if (event.EventType == EET_MOUSE_INPUT_EVENT && + event.MouseInput.Event == EMIE_MOUSE_WHEEL && + !event.MouseInput.isLeftPressed() && m_scrollbar) { + Environment->setFocus(m_scrollbar); + bool retval = m_scrollbar->OnEvent(event); + + // a hacky fix for updating the hovering and co. + IGUIElement *hovered_elem = getElementFromPoint(core::position2d( + event.MouseInput.X, event.MouseInput.Y)); + SEvent mov_event = event; + mov_event.MouseInput.Event = EMIE_MOUSE_MOVED; + Environment->postEventFromUser(mov_event); + if (hovered_elem) + hovered_elem->OnEvent(mov_event); + + return retval; + } + + return IGUIElement::OnEvent(event); +} + +void GUIScrollContainer::updateScrolling() +{ + s32 pos = m_scrollbar->getPos(); + core::rect rect = getRelativePosition(); + + if (m_orientation == VERTICAL) + rect.UpperLeftCorner.Y = pos * m_scrollfactor; + else if (m_orientation == HORIZONTAL) + rect.UpperLeftCorner.X = pos * m_scrollfactor; + + setRelativePosition(rect); +} diff -Nru minetest-5.2.0/src/gui/guiScrollContainer.h minetest-5.3.0/src/gui/guiScrollContainer.h --- minetest-5.2.0/src/gui/guiScrollContainer.h 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/gui/guiScrollContainer.h 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,60 @@ +/* +Minetest +Copyright (C) 2020 DS + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "irrlichttypes_extrabloated.h" +#include "util/string.h" +#include "guiScrollBar.h" + +class GUIScrollContainer : public gui::IGUIElement +{ +public: + GUIScrollContainer(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, + const core::rect &rectangle, const std::string &orientation, + f32 scrollfactor); + + virtual bool OnEvent(const SEvent &event) override; + + inline void onScrollEvent(gui::IGUIElement *caller) + { + if (caller == m_scrollbar) + updateScrolling(); + } + + inline void setScrollBar(GUIScrollBar *scrollbar) + { + m_scrollbar = scrollbar; + updateScrolling(); + } + +private: + enum OrientationEnum + { + VERTICAL, + HORIZONTAL, + UNDEFINED + }; + + GUIScrollBar *m_scrollbar; + OrientationEnum m_orientation; + f32 m_scrollfactor; + + void updateScrolling(); +}; diff -Nru minetest-5.2.0/src/gui/guiVolumeChange.cpp minetest-5.3.0/src/gui/guiVolumeChange.cpp --- minetest-5.2.0/src/gui/guiVolumeChange.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiVolumeChange.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -38,9 +38,10 @@ GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, - IMenuManager *menumgr + IMenuManager *menumgr, ISimpleTextureSource *tsrc ): - GUIModalMenu(env, parent, id, menumgr) + GUIModalMenu(env, parent, id, menumgr), + m_tsrc(tsrc) { } @@ -104,7 +105,7 @@ core::rect rect(0, 0, 80 * s, 30 * s); rect = rect + v2s32(size.X / 2 - 80 * s / 2, size.Y / 2 + 55 * s); const wchar_t *text = wgettext("Exit"); - GUIButton::addButton(Environment, rect, this, ID_soundExitButton, text); + GUIButton::addButton(Environment, rect, m_tsrc, this, ID_soundExitButton, text); delete[] text; } { diff -Nru minetest-5.2.0/src/gui/guiVolumeChange.h minetest-5.3.0/src/gui/guiVolumeChange.h --- minetest-5.2.0/src/gui/guiVolumeChange.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/guiVolumeChange.h 2020-07-09 21:13:21.000000000 +0000 @@ -23,12 +23,14 @@ #include "modalMenu.h" #include +class ISimpleTextureSource; + class GUIVolumeChange : public GUIModalMenu { public: GUIVolumeChange(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, - IMenuManager *menumgr); + IMenuManager *menumgr, ISimpleTextureSource *tsrc); ~GUIVolumeChange(); void removeChildren(); @@ -46,4 +48,7 @@ protected: std::wstring getLabelByID(s32 id) { return L""; } std::string getNameByID(s32 id) { return ""; } + +private: + ISimpleTextureSource *m_tsrc; }; diff -Nru minetest-5.2.0/src/gui/modalMenu.cpp minetest-5.3.0/src/gui/modalMenu.cpp --- minetest-5.2.0/src/gui/modalMenu.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/modalMenu.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -28,8 +28,7 @@ #include "touchscreengui.h" #endif -// clang-format off -GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, +GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, IMenuManager *menumgr) : IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, core::rect(0, 0, 100, 100)), @@ -153,8 +152,8 @@ if (((gui::IGUIEditBox *)hovered)->isPasswordBox()) type = 3; - porting::showInputDialog(gettext("ok"), "", - wide_to_utf8(((gui::IGUIEditBox *)hovered)->getText()), type); + porting::showInputDialog(gettext("OK"), "", + wide_to_utf8(((gui::IGUIEditBox *)hovered)->getText()), type); return retval; } } @@ -167,18 +166,17 @@ if (!root) { errorstream << "GUIModalMenu::preprocessEvent" - << " unable to get root element" << std::endl; + << " unable to get root element" << std::endl; return false; } - gui::IGUIElement *hovered = root->getElementFromPoint( - core::position2d(event.TouchInput.X, event.TouchInput.Y)); + gui::IGUIElement *hovered = + root->getElementFromPoint(core::position2d( + event.TouchInput.X, event.TouchInput.Y)); translated.MouseInput.X = event.TouchInput.X; translated.MouseInput.Y = event.TouchInput.Y; translated.MouseInput.Control = false; - bool dont_send_event = false; - if (event.TouchInput.touchedCount == 1) { switch (event.TouchInput.Event) { case ETIE_PRESSED_DOWN: @@ -205,11 +203,7 @@ m_down_pos = v2s32(0, 0); break; default: - dont_send_event = true; - // this is not supposed to happen - errorstream << "GUIModalMenu::preprocessEvent" - << " unexpected usecase Event=" - << event.TouchInput.Event << std::endl; + break; } } else if ((event.TouchInput.touchedCount == 2) && (event.TouchInput.Event == ETIE_PRESSED_DOWN)) { @@ -219,50 +213,37 @@ translated.MouseInput.ButtonStates = EMBSM_LEFT | EMBSM_RIGHT; translated.MouseInput.X = m_pointer.X; translated.MouseInput.Y = m_pointer.Y; - if (hovered) { + if (hovered) hovered->OnEvent(translated); - } translated.MouseInput.Event = EMIE_RMOUSE_LEFT_UP; translated.MouseInput.ButtonStates = EMBSM_LEFT; - if (hovered) { + if (hovered) hovered->OnEvent(translated); - } - dont_send_event = true; - } - // ignore unhandled 2 touch events ... accidental moving for example - else if (event.TouchInput.touchedCount == 2) { - dont_send_event = true; - } - else if (event.TouchInput.touchedCount > 2) { - errorstream << "GUIModalMenu::preprocessEvent" - << " to many multitouch events " - << event.TouchInput.touchedCount << " ignoring them" - << std::endl; - } - if (dont_send_event) { + return true; + } else { + // ignore unhandled 2 touch events (accidental moving for example) return true; } // check if translated event needs to be preprocessed again - if (preprocessEvent(translated)) { + if (preprocessEvent(translated)) return true; - } + if (hovered) { grab(); bool retval = hovered->OnEvent(translated); - if (event.TouchInput.Event == ETIE_LEFT_UP) { + if (event.TouchInput.Event == ETIE_LEFT_UP) // reset pointer m_pointer = v2s32(0, 0); - } + drop(); return retval; } } - // clang-format on #endif return false; } @@ -271,14 +252,12 @@ bool GUIModalMenu::hasAndroidUIInput() { // no dialog shown - if (m_jni_field_name.empty()) { + if (m_jni_field_name.empty()) return false; - } // still waiting - if (porting::getInputDialogState() == -1) { + if (porting::getInputDialogState() == -1) return true; - } // no value abort dialog processing if (porting::getInputDialogState() != 0) { diff -Nru minetest-5.2.0/src/gui/StyleSpec.h minetest-5.3.0/src/gui/StyleSpec.h --- minetest-5.2.0/src/gui/StyleSpec.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/StyleSpec.h 2020-07-09 21:13:21.000000000 +0000 @@ -18,6 +18,7 @@ */ #include "client/tile.h" // ITextureSource +#include "debug.h" #include "irrlichttypes_extrabloated.h" #include "util/string.h" #include @@ -31,25 +32,36 @@ { TEXTCOLOR, BGCOLOR, - BGCOLOR_HOVERED, - BGCOLOR_PRESSED, + BGCOLOR_HOVERED, // Note: Deprecated property + BGCOLOR_PRESSED, // Note: Deprecated property NOCLIP, BORDER, BGIMG, - BGIMG_HOVERED, + BGIMG_HOVERED, // Note: Deprecated property BGIMG_MIDDLE, - BGIMG_PRESSED, + BGIMG_PRESSED, // Note: Deprecated property FGIMG, - FGIMG_HOVERED, - FGIMG_PRESSED, + FGIMG_HOVERED, // Note: Deprecated property + FGIMG_PRESSED, // Note: Deprecated property ALPHA, + CONTENT_OFFSET, + PADDING, NUM_PROPERTIES, NONE }; + enum State + { + STATE_DEFAULT = 0, + STATE_HOVERED = 1 << 0, + STATE_PRESSED = 1 << 1, + NUM_STATES = 1 << 2, + STATE_INVALID = 1 << 3, + }; private: std::array property_set{}; std::array properties; + State state_map = STATE_DEFAULT; public: static Property GetPropertyByName(const std::string &name) @@ -82,6 +94,10 @@ return FGIMG_PRESSED; } else if (name == "alpha") { return ALPHA; + } else if (name == "content_offset") { + return CONTENT_OFFSET; + } else if (name == "padding") { + return PADDING; } else { return NONE; } @@ -99,6 +115,49 @@ property_set[prop] = true; } + //! Parses a name and returns the corresponding state enum + static State getStateByName(const std::string &name) + { + if (name == "default") { + return STATE_DEFAULT; + } else if (name == "hovered") { + return STATE_HOVERED; + } else if (name == "pressed") { + return STATE_PRESSED; + } else { + return STATE_INVALID; + } + } + + //! Gets the state that this style is intended for + State getState() const + { + return state_map; + } + + //! Set the given state on this style + void addState(State state) + { + FATAL_ERROR_IF(state >= NUM_STATES, "Out-of-bounds state received"); + + state_map = static_cast(state_map | state); + } + + //! Using a list of styles mapped to state values, calculate the final + // combined style for a state by propagating values in its component states + static StyleSpec getStyleFromStatePropagation(const std::array &styles, State state) + { + StyleSpec temp = styles[StyleSpec::STATE_DEFAULT]; + temp.state_map = state; + for (int i = StyleSpec::STATE_DEFAULT + 1; i <= state; i++) { + if ((state & i) != 0) { + temp = temp | styles[i]; + } + } + + return temp; + } + video::SColor getColor(Property prop, video::SColor def) const { const auto &val = properties[prop]; @@ -143,6 +202,29 @@ return rect; } + irr::core::vector2d getVector2i(Property prop, irr::core::vector2d def) const + { + const auto &val = properties[prop]; + if (val.empty()) + return def; + + irr::core::vector2d vec; + if (!parseVector2i(val, &vec)) + return def; + + return vec; + } + + irr::core::vector2d getVector2i(Property prop) const + { + const auto &val = properties[prop]; + FATAL_ERROR_IF(val.empty(), "Unexpected missing property"); + + irr::core::vector2d vec; + parseVector2i(val, &vec); + return vec; + } + video::ITexture *getTexture(Property prop, ISimpleTextureSource *tsrc, video::ITexture *def) const { @@ -233,4 +315,29 @@ return true; } + + bool parseVector2i(const std::string &value, irr::core::vector2d *parsed_vec) const + { + irr::core::vector2d vec; + std::vector v_vector = split(value, ','); + + if (v_vector.size() == 1) { + s32 x = stoi(v_vector[0]); + vec.X = x; + vec.Y = x; + } else if (v_vector.size() == 2) { + s32 x = stoi(v_vector[0]); + s32 y = stoi(v_vector[1]); + vec.X = x; + vec.Y = y; + } else { + warningstream << "Invalid vector2d string format: \"" << value + << "\"" << std::endl; + return false; + } + + *parsed_vec = vec; + + return true; + } }; diff -Nru minetest-5.2.0/src/gui/touchscreengui.cpp minetest-5.3.0/src/gui/touchscreengui.cpp --- minetest-5.2.0/src/gui/touchscreengui.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/touchscreengui.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -34,19 +34,16 @@ #include -// Very slow button repeat frequency (in seconds) -#define SLOW_BUTTON_REPEAT (1.0f) - using namespace irr::core; -const char **touchgui_button_imagenames = (const char *[]) { +const char **button_imagenames = (const char *[]) { "jump_btn.png", "down.png", "zoom.png", "aux_btn.png" }; -const char **touchgui_joystick_imagenames = (const char *[]) { +const char **joystick_imagenames = (const char *[]) { "joystick_off.png", "joystick_bg.png", "joystick_center.png" @@ -113,15 +110,17 @@ case range_id: key = "rangeselect"; break; + default: + break; } - assert(key != ""); + assert(!key.empty()); return keyname_to_keycode(g_settings->get("keymap_" + key).c_str()); } TouchScreenGUI *g_touchscreengui; static void load_button_texture(button_info *btn, const char *path, - rect button_rect, ISimpleTextureSource *tsrc, video::IVideoDriver *driver) + const rect &button_rect, ISimpleTextureSource *tsrc, video::IVideoDriver *driver) { unsigned int tid; video::ITexture *texture = guiScalingImageButton(driver, @@ -141,7 +140,7 @@ } btn->guibutton->setDrawBorder(false); btn->guibutton->setText(L""); - } + } } AutoHideButtonBar::AutoHideButtonBar(IrrlichtDevice *device, @@ -153,8 +152,8 @@ } void AutoHideButtonBar::init(ISimpleTextureSource *tsrc, - const char *starter_img, int button_id, v2s32 UpperLeft, - v2s32 LowerRight, autohide_button_bar_dir dir, float timeout) + const char *starter_img, int button_id, const v2s32 &UpperLeft, + const v2s32 &LowerRight, autohide_button_bar_dir dir, float timeout) { m_texturesource = tsrc; @@ -166,7 +165,7 @@ irr::core::rect current_button = rect(UpperLeft.X, UpperLeft.Y, LowerRight.X, LowerRight.Y); - m_starter.guibutton = m_guienv->addButton(current_button, 0, button_id, L"", 0); + m_starter.guibutton = m_guienv->addButton(current_button, nullptr, button_id, L"", nullptr); m_starter.guibutton->grab(); m_starter.repeatcounter = -1; m_starter.keycode = KEY_OEM_8; // use invalid keycode as it's not relevant @@ -201,16 +200,14 @@ } int button_size = 0; - if ((m_dir == AHBB_Dir_Top_Bottom) || (m_dir == AHBB_Dir_Bottom_Top)) { + if ((m_dir == AHBB_Dir_Top_Bottom) || (m_dir == AHBB_Dir_Bottom_Top)) button_size = m_lower_right.X - m_upper_left.X; - } else { + else button_size = m_lower_right.Y - m_upper_left.Y; - } irr::core::rect current_button; if ((m_dir == AHBB_Dir_Right_Left) || (m_dir == AHBB_Dir_Left_Right)) { - int x_start = 0; int x_end = 0; @@ -227,8 +224,8 @@ current_button = rect(x_start, m_upper_left.Y, x_end, m_lower_right.Y); } else { - int y_start = 0; - int y_end = 0; + double y_start = 0; + double y_end = 0; if (m_dir == AHBB_Dir_Top_Bottom) { y_start = m_lower_right.X + (button_size * 1.25 * m_buttons.size()) @@ -240,12 +237,13 @@ y_start = y_end - button_size; } - current_button = rect(m_upper_left.X, y_start, m_lower_right.Y, - y_end); + current_button = rect(m_upper_left.X, y_start, + m_lower_right.Y, y_end); } - button_info *btn = new button_info(); - btn->guibutton = m_guienv->addButton(current_button, 0, button_id, caption, 0); + auto *btn = new button_info(); + btn->guibutton = m_guienv->addButton(current_button, + nullptr, button_id, caption, nullptr); btn->guibutton->grab(); btn->guibutton->setVisible(false); btn->guibutton->setEnabled(false); @@ -275,26 +273,23 @@ { IGUIElement *rootguielement = m_guienv->getRootGUIElement(); - if (rootguielement == NULL) { + if (rootguielement == nullptr) return false; - } gui::IGUIElement *element = rootguielement->getElementFromPoint( core::position2d(event.TouchInput.X, event.TouchInput.Y)); - if (element == NULL) { + if (element == nullptr) return false; - } if (m_active) { // check for all buttons in vector - - std::vector::iterator iter = m_buttons.begin(); + auto iter = m_buttons.begin(); while (iter != m_buttons.end()) { if ((*iter)->guibutton == element) { - SEvent *translated = new SEvent(); + auto *translated = new SEvent(); memset(translated, 0, sizeof(SEvent)); translated->EventType = irr::EET_KEY_INPUT_EVENT; translated->KeyInput.Key = (*iter)->keycode; @@ -341,7 +336,7 @@ m_active = true; m_timeout = 0; - std::vector::iterator iter = m_buttons.begin(); + auto iter = m_buttons.begin(); while (iter != m_buttons.end()) { (*iter)->guibutton->setVisible(true); @@ -355,41 +350,13 @@ return false; } -bool AutoHideButtonBar::isReleaseButton(int eventID) -{ - std::vector::iterator id = std::find(m_starter.ids.begin(), - m_starter.ids.end(), eventID); - - if (id != m_starter.ids.end()) { - m_starter.ids.erase(id); - return true; - } - - std::vector::iterator iter = m_buttons.begin(); - - while (iter != m_buttons.end()) { - std::vector::iterator id = std::find((*iter)->ids.begin(), - (*iter)->ids.end(), eventID); - - if (id != (*iter)->ids.end()) { - (*iter)->ids.erase(id); - // TODO handle settings button release - return true; - } - ++iter; - } - - return false; -} - void AutoHideButtonBar::step(float dtime) { if (m_active) { m_timeout += dtime; - if (m_timeout > m_timeout_value) { + if (m_timeout > m_timeout_value) deactivate(); - } } } @@ -401,11 +368,11 @@ } m_active = false; - std::vector::iterator iter = m_buttons.begin(); + auto iter = m_buttons.begin(); while (iter != m_buttons.end()) { - (*iter)->guibutton->setVisible(false); - (*iter)->guibutton->setEnabled(false); + (*iter)->guibutton->setVisible(false); + (*iter)->guibutton->setEnabled(false); ++iter; } } @@ -416,7 +383,7 @@ m_starter.guibutton->setVisible(false); m_starter.guibutton->setEnabled(false); - std::vector::iterator iter = m_buttons.begin(); + auto iter = m_buttons.begin(); while (iter != m_buttons.end()) { (*iter)->guibutton->setVisible(false); @@ -430,7 +397,7 @@ m_visible = true; if (m_active) { - std::vector::iterator iter = m_buttons.begin(); + auto iter = m_buttons.begin(); while (iter != m_buttons.end()) { (*iter)->guibutton->setVisible(true); @@ -450,24 +417,26 @@ m_settingsbar(device, receiver), m_rarecontrolsbar(device, receiver) { - for (unsigned int i=0; i < after_last_element_id; i++) { - m_buttons[i].guibutton = 0; - m_buttons[i].repeatcounter = -1; - m_buttons[i].repeatdelay = BUTTON_REPEAT_DELAY; + for (auto &button : m_buttons) { + button.guibutton = nullptr; + button.repeatcounter = -1; + button.repeatdelay = BUTTON_REPEAT_DELAY; } m_touchscreen_threshold = g_settings->getU16("touchscreen_threshold"); m_fixed_joystick = g_settings->getBool("fixed_virtual_joystick"); m_joystick_triggers_special1 = g_settings->getBool("virtual_joystick_triggers_aux"); m_screensize = m_device->getVideoDriver()->getScreenSize(); + button_size = MYMIN(m_screensize.Y / 4.5f, + porting::getDisplayDensity() * + g_settings->getFloat("hud_scaling") * 65.0f); } -void TouchScreenGUI::initButton(touch_gui_button_id id, rect button_rect, - std::wstring caption, bool immediate_release, float repeat_delay) +void TouchScreenGUI::initButton(touch_gui_button_id id, const rect &button_rect, + const std::wstring &caption, bool immediate_release, float repeat_delay) { - button_info *btn = &m_buttons[id]; - btn->guibutton = m_guienv->addButton(button_rect, 0, id, caption.c_str()); + btn->guibutton = m_guienv->addButton(button_rect, nullptr, id, caption.c_str()); btn->guibutton->grab(); btn->repeatcounter = -1; btn->repeatdelay = repeat_delay; @@ -475,42 +444,29 @@ btn->immediate_release = immediate_release; btn->ids.clear(); - load_button_texture(btn, touchgui_button_imagenames[id], button_rect, + load_button_texture(btn, button_imagenames[id], button_rect, m_texturesource, m_device->getVideoDriver()); } -button_info *TouchScreenGUI::initJoystickButton(touch_gui_button_id id, rect button_rect, - int texture_id, bool visible) +button_info *TouchScreenGUI::initJoystickButton(touch_gui_button_id id, + const rect &button_rect, int texture_id, bool visible) { - button_info *btn = new button_info(); - btn->guibutton = m_guienv->addButton(button_rect, 0, id, L"O"); + auto *btn = new button_info(); + btn->guibutton = m_guienv->addButton(button_rect, nullptr, id, L"O"); btn->guibutton->setVisible(visible); btn->guibutton->grab(); btn->ids.clear(); - load_button_texture(btn, touchgui_joystick_imagenames[texture_id], button_rect, - m_texturesource, m_device->getVideoDriver()); + load_button_texture(btn, joystick_imagenames[texture_id], + button_rect, m_texturesource, m_device->getVideoDriver()); return btn; } -static int getMaxControlPadSize(float density) { - return 200 * density * g_settings->getFloat("hud_scaling"); -} - -int TouchScreenGUI::getGuiButtonSize() -{ - u32 control_pad_size = MYMIN((2 * m_screensize.Y) / 3, - getMaxControlPadSize(porting::getDisplayDensity())); - - return control_pad_size / 3; -} - void TouchScreenGUI::init(ISimpleTextureSource *tsrc) { assert(tsrc); - u32 button_size = getGuiButtonSize(); m_visible = true; m_texturesource = tsrc; @@ -608,35 +564,31 @@ m_rarecontrolsbar.addButton(chat_id, L"Chat", "chat_btn.png"); m_rarecontrolsbar.addButton(inventory_id, L"inv", "inventory_btn.png"); m_rarecontrolsbar.addButton(drop_id, L"drop", "drop_btn.png"); - } touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y) { IGUIElement *rootguielement = m_guienv->getRootGUIElement(); - if (rootguielement != NULL) { + if (rootguielement != nullptr) { gui::IGUIElement *element = rootguielement->getElementFromPoint(core::position2d(x, y)); - if (element) { - for (unsigned int i=0; i < after_last_element_id; i++) { - if (element == m_buttons[i].guibutton) { + if (element) + for (unsigned int i = 0; i < after_last_element_id; i++) + if (element == m_buttons[i].guibutton) return (touch_gui_button_id) i; - } - } - } } + return after_last_element_id; } -touch_gui_button_id TouchScreenGUI::getButtonID(int eventID) +touch_gui_button_id TouchScreenGUI::getButtonID(size_t eventID) { - for (unsigned int i=0; i < after_last_element_id; i++) { + for (unsigned int i = 0; i < after_last_element_id; i++) { button_info *btn = &m_buttons[i]; - std::vector::iterator id = - std::find(btn->ids.begin(), btn->ids.end(), eventID); + auto id = std::find(btn->ids.begin(), btn->ids.end(), eventID); if (id != btn->ids.end()) return (touch_gui_button_id) i; @@ -648,55 +600,30 @@ bool TouchScreenGUI::isHUDButton(const SEvent &event) { // check if hud item is pressed - for (std::map >::iterator iter = m_hud_rects.begin(); - iter != m_hud_rects.end(); ++iter) { - if (iter->second.isPointInside( - v2s32(event.TouchInput.X, - event.TouchInput.Y) - )) { - if ( iter->first < 8) { - SEvent *translated = new SEvent(); - memset(translated, 0, sizeof(SEvent)); - translated->EventType = irr::EET_KEY_INPUT_EVENT; - translated->KeyInput.Key = (irr::EKEY_CODE) (KEY_KEY_1 + iter->first); - translated->KeyInput.Control = false; - translated->KeyInput.Shift = false; - translated->KeyInput.PressedDown = true; - m_receiver->OnEvent(*translated); - m_hud_ids[event.TouchInput.ID] = translated->KeyInput.Key; - delete translated; - return true; - } + for (auto &hud_rect : m_hud_rects) { + if (hud_rect.second.isPointInside(v2s32(event.TouchInput.X, + event.TouchInput.Y))) { + auto *translated = new SEvent(); + memset(translated, 0, sizeof(SEvent)); + translated->EventType = irr::EET_KEY_INPUT_EVENT; + translated->KeyInput.Key = (irr::EKEY_CODE) (KEY_KEY_1 + hud_rect.first); + translated->KeyInput.Control = false; + translated->KeyInput.Shift = false; + translated->KeyInput.PressedDown = true; + m_receiver->OnEvent(*translated); + m_hud_ids[event.TouchInput.ID] = translated->KeyInput.Key; + delete translated; + return true; } } return false; } -bool TouchScreenGUI::isReleaseHUDButton(int eventID) -{ - std::map::iterator iter = m_hud_ids.find(eventID); - - if (iter != m_hud_ids.end()) { - SEvent *translated = new SEvent(); - memset(translated, 0, sizeof(SEvent)); - translated->EventType = irr::EET_KEY_INPUT_EVENT; - translated->KeyInput.Key = iter->second; - translated->KeyInput.PressedDown = false; - translated->KeyInput.Control = false; - translated->KeyInput.Shift = false; - m_receiver->OnEvent(*translated); - m_hud_ids.erase(iter); - delete translated; - return true; - } - return false; -} - void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button, - int eventID, bool action) + size_t eventID, bool action) { button_info *btn = &m_buttons[button]; - SEvent *translated = new SEvent(); + auto *translated = new SEvent(); memset(translated, 0, sizeof(SEvent)); translated->EventType = irr::EET_KEY_INPUT_EVENT; translated->KeyInput.Key = btn->keycode; @@ -717,16 +644,16 @@ translated->KeyInput.Key = btn->keycode; m_receiver->OnEvent(*translated); } + // remove event if ((!action) || (btn->immediate_release)) { - - std::vector::iterator pos = - std::find(btn->ids.begin(), btn->ids.end(), eventID); + auto pos = std::find(btn->ids.begin(), btn->ids.end(), eventID); // has to be in touch list assert(pos != btn->ids.end()); btn->ids.erase(pos); - if (btn->ids.size() > 0) { return; } + if (!btn->ids.empty()) + return; translated->KeyInput.PressedDown = false; btn->repeatcounter = -1; @@ -735,30 +662,21 @@ delete translated; } - -void TouchScreenGUI::handleReleaseEvent(int evt_id) +void TouchScreenGUI::handleReleaseEvent(size_t evt_id) { touch_gui_button_id button = getButtonID(evt_id); - // handle button events + if (button != after_last_element_id) { + // handle button events handleButtonEvent(button, evt_id, false); - } - // handle hud button events - else if (isReleaseHUDButton(evt_id)) { - // nothing to do here - } else if (m_settingsbar.isReleaseButton(evt_id)) { - // nothing to do here - } else if (m_rarecontrolsbar.isReleaseButton(evt_id)) { - // nothing to do here - } - // handle the point used for moving view - else if (evt_id == m_move_id) { + } else if (evt_id == m_move_id) { + // handle the point used for moving view m_move_id = -1; // if this pointer issued a mouse event issue symmetric release here if (m_move_sent_as_mouse_event) { - SEvent *translated = new SEvent; + auto *translated = new SEvent; memset(translated, 0, sizeof(SEvent)); translated->EventType = EET_MOUSE_INPUT_EVENT; translated->MouseInput.X = m_move_downlocation.X; @@ -769,32 +687,31 @@ translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP; m_receiver->OnEvent(*translated); delete translated; - } - else { + } else { // do double tap detection doubleTapDetection(); } } + // handle joystick else if (evt_id == m_joystick_id) { m_joystick_id = -1; // reset joystick - for (unsigned int i = 0; i < 4; i ++) + for (unsigned int i = 0; i < 4; i++) m_joystick_status[i] = false; applyJoystickStatus(); m_joystick_btn_off->guibutton->setVisible(true); m_joystick_btn_bg->guibutton->setVisible(false); m_joystick_btn_center->guibutton->setVisible(false); - } - else { + } else { infostream << "TouchScreenGUI::translateEvent released unknown button: " << evt_id << std::endl; } - for (std::vector::iterator iter = m_known_ids.begin(); + for (auto iter = m_known_ids.begin(); iter != m_known_ids.end(); ++iter) { if (iter->id == evt_id) { m_known_ids.erase(iter); @@ -806,27 +723,28 @@ void TouchScreenGUI::translateEvent(const SEvent &event) { if (!m_visible) { - infostream << "TouchScreenGUI::translateEvent got event but not visible?!" << std::endl; + infostream + << "TouchScreenGUI::translateEvent got event but not visible!" + << std::endl; return; } - if (event.EventType != EET_TOUCH_INPUT_EVENT) { + if (event.EventType != EET_TOUCH_INPUT_EVENT) return; - } if (event.TouchInput.Event == ETIE_PRESSED_DOWN) { - - /* add to own copy of eventlist ... - * android would provide this information but irrlicht guys don't + /* + * Add to own copy of event list... + * android would provide this information but Irrlicht guys don't * wanna design a efficient interface */ - id_status toadd; + id_status toadd{}; toadd.id = event.TouchInput.ID; toadd.X = event.TouchInput.X; toadd.Y = event.TouchInput.Y; m_known_ids.push_back(toadd); - int eventID = event.TouchInput.ID; + size_t eventID = event.TouchInput.ID; touch_gui_button_id button = getButtonID(event.TouchInput.X, event.TouchInput.Y); @@ -846,21 +764,19 @@ } else if (m_rarecontrolsbar.isButton(event)) { m_settingsbar.deactivate(); // already handled in isSettingsBarButton() - } - // handle non button events - else { + } else { + // handle non button events m_settingsbar.deactivate(); m_rarecontrolsbar.deactivate(); - u32 button_size = getGuiButtonSize(); - s32 dxj = event.TouchInput.X - button_size * 5 / 2; - s32 dyj = event.TouchInput.Y - m_screensize.Y + button_size * 5 / 2; + s32 dxj = event.TouchInput.X - button_size * 5.0f / 2.0f; + s32 dyj = event.TouchInput.Y - m_screensize.Y + button_size * 5.0f / 2.0f; /* Select joystick when left 1/3 of screen dragged or * when joystick tapped (fixed joystick position) */ if ((m_fixed_joystick && dxj * dxj + dyj * dyj <= button_size * button_size * 1.5 * 1.5) || - (!m_fixed_joystick && event.TouchInput.X < m_screensize.X / 3)) { + (!m_fixed_joystick && event.TouchInput.X < m_screensize.X / 3.0f)) { // If we don't already have a starting point for joystick make this the one. if (m_joystick_id == -1) { m_joystick_id = event.TouchInput.ID; @@ -871,14 +787,14 @@ m_joystick_btn_center->guibutton->setVisible(true); // If it's a fixed joystick, don't move the joystick "button". - if (!m_fixed_joystick) { + if (!m_fixed_joystick) m_joystick_btn_bg->guibutton->setRelativePosition(v2s32( - event.TouchInput.X - button_size * 3 / 2, - event.TouchInput.Y - button_size * 3 / 2)); - } + event.TouchInput.X - button_size * 3.0f / 2.0f, + event.TouchInput.Y - button_size * 3.0f / 2.0f)); + m_joystick_btn_center->guibutton->setRelativePosition(v2s32( - event.TouchInput.X - button_size / 2, - event.TouchInput.Y - button_size / 2)); + event.TouchInput.X - button_size / 2.0f, + event.TouchInput.Y - button_size / 2.0f)); } } else { // If we don't already have a moving point make this the moving one. @@ -895,17 +811,15 @@ m_pointerpos[event.TouchInput.ID] = v2s32(event.TouchInput.X, event.TouchInput.Y); } else if (event.TouchInput.Event == ETIE_LEFT_UP) { - verbosestream << "Up event for pointerid: " << event.TouchInput.ID << std::endl; + verbosestream + << "Up event for pointerid: " << event.TouchInput.ID << std::endl; handleReleaseEvent(event.TouchInput.ID); - } - else { + } else { assert(event.TouchInput.Event == ETIE_MOVED); - int move_idx = event.TouchInput.ID; if (m_pointerpos[event.TouchInput.ID] == - v2s32(event.TouchInput.X, event.TouchInput.Y)) { + v2s32(event.TouchInput.X, event.TouchInput.Y)) return; - } if (m_move_id != -1) { if ((event.TouchInput.ID == m_move_id) && @@ -928,9 +842,7 @@ s32 dy = Y - m_pointerpos[event.TouchInput.ID].Y; // adapt to similar behaviour as pc screen - double d = g_settings->getFloat("mouse_sensitivity") * 4; - double old_yaw = m_camera_yaw_change; - double old_pitch = m_camera_pitch; + double d = g_settings->getFloat("mouse_sensitivity") * 3.0f; m_camera_yaw_change -= dx * d; m_camera_pitch = MYMIN(MYMAX(m_camera_pitch + (dy * d), -180), 180); @@ -942,8 +854,7 @@ ->getRayFromScreenCoordinates(v2s32(X, Y)); m_pointerpos[event.TouchInput.ID] = v2s32(X, Y); } - } - else if ((event.TouchInput.ID == m_move_id) && + } else if ((event.TouchInput.ID == m_move_id) && (m_move_sent_as_mouse_event)) { m_shootline = m_device ->getSceneManager() @@ -954,7 +865,6 @@ } if (m_joystick_id != -1 && event.TouchInput.ID == m_joystick_id) { - u32 button_size = getGuiButtonSize(); s32 X = event.TouchInput.X; s32 Y = event.TouchInput.Y; @@ -967,8 +877,8 @@ double distance_sq = dx * dx + dy * dy; - s32 dxj = event.TouchInput.X - button_size * 5 / 2; - s32 dyj = event.TouchInput.Y - m_screensize.Y + button_size * 5 / 2; + s32 dxj = event.TouchInput.X - button_size * 5.0f / 2.0f; + s32 dyj = event.TouchInput.Y - m_screensize.Y + button_size * 5.0f / 2.0f; bool inside_joystick = (dxj * dxj + dyj * dyj <= button_size * button_size * 1.5 * 1.5); if (m_joystick_has_really_moved || @@ -986,8 +896,8 @@ angle = fmod(angle + 180 + 22.5, 360); // reset state before applying - for (unsigned int i = 0; i < 5; i ++) - m_joystick_status[i] = false; + for (bool & joystick_status : m_joystick_status) + joystick_status = false; if (distance <= m_touchscreen_threshold) { // do nothing @@ -1016,8 +926,8 @@ if (distance > button_size) { m_joystick_status[j_special1] = true; // move joystick "button" - s32 ndx = (s32) button_size * dx / distance - (s32) button_size / 2; - s32 ndy = (s32) button_size * dy / distance - (s32) button_size / 2; + s32 ndx = button_size * dx / distance - button_size / 2.0f; + s32 ndy = button_size * dy / distance - button_size / 2.0f; if (m_fixed_joystick) { m_joystick_btn_center->guibutton->setRelativePosition(v2s32( button_size * 5 / 2 + ndx, @@ -1028,64 +938,54 @@ m_pointerpos[event.TouchInput.ID].Y + ndy)); } } else { - m_joystick_btn_center->guibutton->setRelativePosition(v2s32( - X - button_size / 2, Y - button_size / 2)); + m_joystick_btn_center->guibutton->setRelativePosition( + v2s32(X - button_size / 2, Y - button_size / 2)); } } } - if (m_move_id == -1 && m_joystick_id == -1) { + if (m_move_id == -1 && m_joystick_id == -1) handleChangedButton(event); - } } } void TouchScreenGUI::handleChangedButton(const SEvent &event) { for (unsigned int i = 0; i < after_last_element_id; i++) { - - if (m_buttons[i].ids.empty()) { + if (m_buttons[i].ids.empty()) continue; - } - for (std::vector::iterator iter = m_buttons[i].ids.begin(); - iter != m_buttons[i].ids.end(); ++iter) { + for (auto iter = m_buttons[i].ids.begin(); + iter != m_buttons[i].ids.end(); ++iter) { if (event.TouchInput.ID == *iter) { - int current_button_id = getButtonID(event.TouchInput.X, event.TouchInput.Y); - if (current_button_id == i) { + if (current_button_id == i) continue; - } // remove old button handleButtonEvent((touch_gui_button_id) i, *iter, false); - if (current_button_id == after_last_element_id) { + if (current_button_id == after_last_element_id) return; - } + handleButtonEvent((touch_gui_button_id) current_button_id, *iter, true); return; - } } } int current_button_id = getButtonID(event.TouchInput.X, event.TouchInput.Y); - if (current_button_id == after_last_element_id) { + if (current_button_id == after_last_element_id) return; - } button_info *btn = &m_buttons[current_button_id]; if (std::find(btn->ids.begin(), btn->ids.end(), event.TouchInput.ID) == btn->ids.end()) - { handleButtonEvent((touch_gui_button_id) current_button_id, event.TouchInput.ID, true); - } - } bool TouchScreenGUI::doubleTapDetection() @@ -1102,14 +1002,15 @@ return false; double distance = sqrt( - (m_key_events[0].x - m_key_events[1].x) * (m_key_events[0].x - m_key_events[1].x) + - (m_key_events[0].y - m_key_events[1].y) * (m_key_events[0].y - m_key_events[1].y)); - + (m_key_events[0].x - m_key_events[1].x) * + (m_key_events[0].x - m_key_events[1].x) + + (m_key_events[0].y - m_key_events[1].y) * + (m_key_events[0].y - m_key_events[1].y)); if (distance > (20 + m_touchscreen_threshold)) return false; - SEvent *translated = new SEvent(); + auto *translated = new SEvent(); memset(translated, 0, sizeof(SEvent)); translated->EventType = EET_MOUSE_INPUT_EVENT; translated->MouseInput.X = m_key_events[0].x; @@ -1129,17 +1030,16 @@ m_receiver->OnEvent(*translated); translated->MouseInput.ButtonStates = 0; - translated->MouseInput.Event = EMIE_RMOUSE_LEFT_UP; + translated->MouseInput.Event = EMIE_RMOUSE_LEFT_UP; verbosestream << "TouchScreenGUI::translateEvent right click release" << std::endl; m_receiver->OnEvent(*translated); delete translated; return true; - } void TouchScreenGUI::applyJoystickStatus() { - for (unsigned int i = 0; i < 5; i ++) { + for (unsigned int i = 0; i < 5; i++) { if (i == 4 && !m_joystick_triggers_special1) continue; @@ -1158,50 +1058,48 @@ TouchScreenGUI::~TouchScreenGUI() { - for (unsigned int i = 0; i < after_last_element_id; i++) { - button_info *btn = &m_buttons[i]; - if (btn->guibutton) { - btn->guibutton->drop(); - btn->guibutton = NULL; + for (auto &button : m_buttons) { + if (button.guibutton) { + button.guibutton->drop(); + button.guibutton = nullptr; } } if (m_joystick_btn_off->guibutton) { m_joystick_btn_off->guibutton->drop(); - m_joystick_btn_off->guibutton = NULL; + m_joystick_btn_off->guibutton = nullptr; } if (m_joystick_btn_bg->guibutton) { m_joystick_btn_bg->guibutton->drop(); - m_joystick_btn_bg->guibutton = NULL; + m_joystick_btn_bg->guibutton = nullptr; } if (m_joystick_btn_center->guibutton) { m_joystick_btn_center->guibutton->drop(); - m_joystick_btn_center->guibutton = NULL; + m_joystick_btn_center->guibutton = nullptr; } } void TouchScreenGUI::step(float dtime) { // simulate keyboard repeats - for (unsigned int i = 0; i < after_last_element_id; i++) { - button_info *btn = &m_buttons[i]; - - if (btn->ids.size() > 0) { - btn->repeatcounter += dtime; + for (auto &button : m_buttons) { + if (!button.ids.empty()) { + button.repeatcounter += dtime; // in case we're moving around digging does not happen if (m_move_id != -1) m_move_has_really_moved = true; - if (btn->repeatcounter < btn->repeatdelay) continue; + if (button.repeatcounter < button.repeatdelay) + continue; - btn->repeatcounter = 0; + button.repeatcounter = 0; SEvent translated; memset(&translated, 0, sizeof(SEvent)); translated.EventType = irr::EET_KEY_INPUT_EVENT; - translated.KeyInput.Key = btn->keycode; + translated.KeyInput.Key = button.keycode; translated.KeyInput.PressedDown = false; m_receiver->OnEvent(translated); @@ -1211,7 +1109,12 @@ } // joystick - applyJoystickStatus(); + for (unsigned int i = 0; i < 4; i++) { + if (m_joystick_status[i]) { + applyJoystickStatus(); + break; + } + } // if a new placed pointer isn't moved for some time start digging if ((m_move_id != -1) && @@ -1259,22 +1162,18 @@ void TouchScreenGUI::Toggle(bool visible) { m_visible = visible; - for (unsigned int i = 0; i < after_last_element_id; i++) { - button_info *btn = &m_buttons[i]; - if (btn->guibutton) { - btn->guibutton->setVisible(visible); - } + for (auto &button : m_buttons) { + if (button.guibutton) + button.guibutton->setVisible(visible); } - if (m_joystick_btn_off->guibutton) { + if (m_joystick_btn_off->guibutton) m_joystick_btn_off->guibutton->setVisible(visible); - } // clear all active buttons if (!visible) { - while (m_known_ids.size() > 0) { + while (!m_known_ids.empty()) handleReleaseEvent(m_known_ids.begin()->id); - } m_settingsbar.hide(); m_rarecontrolsbar.hide(); diff -Nru minetest-5.2.0/src/gui/touchscreengui.h minetest-5.3.0/src/gui/touchscreengui.h --- minetest-5.2.0/src/gui/touchscreengui.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/gui/touchscreengui.h 2020-07-09 21:13:21.000000000 +0000 @@ -80,21 +80,22 @@ } autohide_button_bar_dir; #define MIN_DIG_TIME_MS 500 -#define MAX_TOUCH_COUNT 64 #define BUTTON_REPEAT_DELAY 0.2f - #define SETTINGS_BAR_Y_OFFSET 5 #define RARE_CONTROLS_BAR_Y_OFFSET 5 -extern const char **touchgui_button_imagenames; -extern const char **touchgui_joystick_imagenames; +// Very slow button repeat frequency +#define SLOW_BUTTON_REPEAT 1.0f + +extern const char **button_imagenames; +extern const char **joystick_imagenames; struct button_info { float repeatcounter; float repeatdelay; irr::EKEY_CODE keycode; - std::vector ids; + std::vector ids; IGUIButton *guibutton = nullptr; bool immediate_release; @@ -109,8 +110,8 @@ AutoHideButtonBar(IrrlichtDevice *device, IEventReceiver *receiver); void init(ISimpleTextureSource *tsrc, const char *starter_img, int button_id, - v2s32 UpperLeft, v2s32 LowerRight, autohide_button_bar_dir dir, - float timeout); + const v2s32 &UpperLeft, const v2s32 &LowerRight, + autohide_button_bar_dir dir, float timeout); ~AutoHideButtonBar(); @@ -125,9 +126,6 @@ // detect settings bar button events bool isButton(const SEvent &event); - // handle released hud buttons - bool isReleaseButton(int eventID); - // step handler void step(float dtime); @@ -182,7 +180,7 @@ double getPitch() { return m_camera_pitch; } - /*! + /* * Returns a line which describes what the player is pointing at. * The starting point and looking direction are significant, * the line should be scaled to match its length to the actual distance @@ -206,9 +204,10 @@ IEventReceiver *m_receiver; ISimpleTextureSource *m_texturesource; v2u32 m_screensize; + s32 button_size; double m_touchscreen_threshold; std::map> m_hud_rects; - std::map m_hud_ids; + std::map m_hud_ids; bool m_visible; // is the gui visible // value in degree @@ -220,7 +219,7 @@ forward_id, backward_id, left_id, right_id, special1_id}; bool m_joystick_status[5] = {false, false, false, false, false}; - /*! + /* * A line starting at the camera and pointing towards the * selected object. * The line ends on the camera's far plane. @@ -248,23 +247,24 @@ touch_gui_button_id getButtonID(s32 x, s32 y); // gui button by eventID - touch_gui_button_id getButtonID(int eventID); + touch_gui_button_id getButtonID(size_t eventID); // check if a button has changed void handleChangedButton(const SEvent &event); // initialize a button - void initButton(touch_gui_button_id id, rect button_rect, - std::wstring caption, bool immediate_release, + void initButton(touch_gui_button_id id, const rect &button_rect, + const std::wstring &caption, bool immediate_release, float repeat_delay = BUTTON_REPEAT_DELAY); // initialize a joystick button - button_info *initJoystickButton(touch_gui_button_id id, rect button_rect, - int texture_id, bool visible = true); + button_info *initJoystickButton(touch_gui_button_id id, + const rect &button_rect, int texture_id, + bool visible = true); struct id_status { - int id; + size_t id; int X; int Y; }; @@ -273,27 +273,21 @@ std::vector m_known_ids; // handle a button event - void handleButtonEvent(touch_gui_button_id bID, int eventID, bool action); + void handleButtonEvent(touch_gui_button_id bID, size_t eventID, bool action); // handle pressed hud buttons bool isHUDButton(const SEvent &event); - // handle released hud buttons - bool isReleaseHUDButton(int eventID); - // handle double taps bool doubleTapDetection(); // handle release event - void handleReleaseEvent(int evt_id); + void handleReleaseEvent(size_t evt_id); // apply joystick status void applyJoystickStatus(); - // get size of regular gui control button - int getGuiButtonSize(); - - // doubleclick detection variables + // double-click detection variables struct key_event { u64 down_time; @@ -302,9 +296,9 @@ }; // array for saving last known position of a pointer - v2s32 m_pointerpos[MAX_TOUCH_COUNT]; + std::map m_pointerpos; - // array for doubletap detection + // array for double tap detection key_event m_key_events[2]; // settings bar @@ -313,4 +307,5 @@ // rare controls bar AutoHideButtonBar m_rarecontrolsbar; }; + extern TouchScreenGUI *g_touchscreengui; diff -Nru minetest-5.2.0/src/hud.cpp minetest-5.3.0/src/hud.cpp --- minetest-5.2.0/src/hud.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/hud.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -27,6 +27,7 @@ {HUD_ELEM_STATBAR, "statbar"}, {HUD_ELEM_INVENTORY, "inventory"}, {HUD_ELEM_WAYPOINT, "waypoint"}, + {HUD_ELEM_IMAGE_WAYPOINT, "image_waypoint"}, {0, NULL}, }; @@ -45,6 +46,7 @@ {HUD_STAT_WORLD_POS, "world_pos"}, {HUD_STAT_SIZE, "size"}, {HUD_STAT_Z_INDEX, "z_index"}, + {HUD_STAT_TEXT2, "text2"}, {0, NULL}, }; diff -Nru minetest-5.2.0/src/hud.h minetest-5.3.0/src/hud.h --- minetest-5.2.0/src/hud.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/hud.h 2020-07-09 21:13:21.000000000 +0000 @@ -18,8 +18,7 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef HUD_HEADER -#define HUD_HEADER +#pragma once #include "irrlichttypes_extrabloated.h" #include @@ -61,6 +60,7 @@ HUD_ELEM_STATBAR = 2, HUD_ELEM_INVENTORY = 3, HUD_ELEM_WAYPOINT = 4, + HUD_ELEM_IMAGE_WAYPOINT = 5 }; enum HudElementStat { @@ -76,6 +76,7 @@ HUD_STAT_WORLD_POS, HUD_STAT_SIZE, HUD_STAT_Z_INDEX, + HUD_STAT_TEXT2, }; struct HudElement { @@ -92,10 +93,10 @@ v3f world_pos; v2s32 size; s16 z_index = 0; + std::string text2; }; extern const EnumString es_HudElementType[]; extern const EnumString es_HudElementStat[]; extern const EnumString es_HudBuiltinElement[]; -#endif diff -Nru minetest-5.2.0/src/inventory.cpp minetest-5.3.0/src/inventory.cpp --- minetest-5.2.0/src/inventory.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/inventory.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -56,28 +56,31 @@ count = 1; } -void ItemStack::serialize(std::ostream &os) const +void ItemStack::serialize(std::ostream &os, bool serialize_meta) const { if (empty()) return; // Check how many parts of the itemstring are needed int parts = 1; - if(count != 1) - parts = 2; - if(wear != 0) - parts = 3; if (!metadata.empty()) parts = 4; + else if (wear != 0) + parts = 3; + else if (count != 1) + parts = 2; - os<= 2) - os<<" "<= 3) - os<<" "<= 2) + os << " " << count; + if (parts >= 3) + os << " " << wear; if (parts >= 4) { os << " "; - metadata.serialize(os); + if (serialize_meta) + metadata.serialize(os); + else + os << ""; } } @@ -240,10 +243,10 @@ deSerialize(is, itemdef); } -std::string ItemStack::getItemString() const +std::string ItemStack::getItemString(bool include_meta) const { std::ostringstream os(std::ios::binary); - serialize(os); + serialize(os, include_meta); return os.str(); } diff -Nru minetest-5.2.0/src/inventory.h minetest-5.3.0/src/inventory.h --- minetest-5.2.0/src/inventory.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/inventory.h 2020-07-09 21:13:21.000000000 +0000 @@ -40,13 +40,13 @@ ~ItemStack() = default; // Serialization - void serialize(std::ostream &os) const; + void serialize(std::ostream &os, bool serialize_meta = true) const; // Deserialization. Pass itemdef unless you don't want aliases resolved. void deSerialize(std::istream &is, IItemDefManager *itemdef = NULL); void deSerialize(const std::string &s, IItemDefManager *itemdef = NULL); // Returns the string used for inventory - std::string getItemString() const; + std::string getItemString(bool include_meta = true) const; // Returns the tooltip std::string getDescription(IItemDefManager *itemdef) const; diff -Nru minetest-5.2.0/src/inventorymanager.cpp minetest-5.3.0/src/inventorymanager.cpp --- minetest-5.2.0/src/inventorymanager.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/inventorymanager.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -22,7 +22,7 @@ #include "log.h" #include "serverenvironment.h" #include "scripting_server.h" -#include "serverobject.h" +#include "server/serveractiveobject.h" #include "settings.h" #include "craftdef.h" #include "rollback_interface.h" diff -Nru minetest-5.2.0/src/itemdef.cpp minetest-5.3.0/src/itemdef.cpp --- minetest-5.2.0/src/itemdef.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/itemdef.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -270,17 +270,16 @@ // Convert name according to possible alias std::string name = getAlias(name_); // Get the definition - std::map::const_iterator i; - i = m_item_definitions.find(name); - if(i == m_item_definitions.end()) + auto i = m_item_definitions.find(name); + if (i == m_item_definitions.cend()) i = m_item_definitions.find("unknown"); - assert(i != m_item_definitions.end()); + assert(i != m_item_definitions.cend()); return *(i->second); } virtual const std::string &getAlias(const std::string &name) const { - StringMap::const_iterator it = m_aliases.find(name); - if (it != m_aliases.end()) + auto it = m_aliases.find(name); + if (it != m_aliases.cend()) return it->second; return name; } @@ -300,8 +299,7 @@ // Convert name according to possible alias std::string name = getAlias(name_); // Get the definition - std::map::const_iterator i; - return m_item_definitions.find(name) != m_item_definitions.end(); + return m_item_definitions.find(name) != m_item_definitions.cend(); } #ifndef SERVER public: @@ -422,13 +420,30 @@ return get(stack.name).color; } #endif + void applyTextureOverrides(const std::vector &overrides) + { + infostream << "ItemDefManager::applyTextureOverrides(): Applying " + "overrides to textures" << std::endl; + + for (const TextureOverride& texture_override : overrides) { + if (m_item_definitions.find(texture_override.id) == m_item_definitions.end()) { + continue; // Ignore unknown item + } + + ItemDefinition* itemdef = m_item_definitions[texture_override.id]; + + if (texture_override.hasTarget(OverrideTarget::INVENTORY)) + itemdef->inventory_image = texture_override.texture; + + if (texture_override.hasTarget(OverrideTarget::WIELD)) + itemdef->wield_image = texture_override.texture; + } + } void clear() { - for(std::map::const_iterator - i = m_item_definitions.begin(); - i != m_item_definitions.end(); ++i) + for (auto &i : m_item_definitions) { - delete i->second; + delete i.second; } m_item_definitions.clear(); m_aliases.clear(); @@ -463,7 +478,7 @@ } virtual void registerItem(const ItemDefinition &def) { - verbosestream<<"ItemDefManager: registering \""< "< " << convert_to << std::endl); m_aliases[name] = convert_to; } } @@ -501,10 +516,8 @@ u16 count = m_item_definitions.size(); writeU16(os, count); - for (std::map::const_iterator - it = m_item_definitions.begin(); - it != m_item_definitions.end(); ++it) { - ItemDefinition *def = it->second; + for (const auto &it : m_item_definitions) { + ItemDefinition *def = it.second; // Serialize ItemDefinition and write wrapped in a string std::ostringstream tmp_os(std::ios::binary); def->serialize(tmp_os, protocol_version); @@ -513,11 +526,9 @@ writeU16(os, m_aliases.size()); - for (StringMap::const_iterator - it = m_aliases.begin(); - it != m_aliases.end(); ++it) { - os << serializeString(it->first); - os << serializeString(it->second); + for (const auto &it : m_aliases) { + os << serializeString(it.first); + os << serializeString(it.second); } } void deSerialize(std::istream &is) diff -Nru minetest-5.2.0/src/itemdef.h minetest-5.3.0/src/itemdef.h --- minetest-5.2.0/src/itemdef.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/itemdef.h 2020-07-09 21:13:21.000000000 +0000 @@ -26,6 +26,7 @@ #include #include "itemgroup.h" #include "sound.h" +#include "texture_override.h" // TextureOverride class IGameDef; class Client; struct ToolCapabilities; @@ -157,6 +158,10 @@ Client *client) const=0; #endif + // Replace the textures of registered nodes with the ones specified in + // the texture pack's override.txt files + virtual void applyTextureOverrides(const std::vector &overrides)=0; + // Remove all registered item and node definitions and aliases // Then re-add the builtin item definitions virtual void clear()=0; diff -Nru minetest-5.2.0/src/log.cpp minetest-5.3.0/src/log.cpp --- minetest-5.2.0/src/log.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/log.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -23,6 +23,7 @@ #include "debug.h" #include "gettime.h" #include "porting.h" +#include "settings.h" #include "config.h" #include "exceptions.h" #include "util/numeric.h" @@ -338,7 +339,80 @@ "-------------\n" << std::endl; } +void StreamLogOutput::logRaw(LogLevel lev, const std::string &line) +{ + bool colored_message = (Logger::color_mode == LOG_COLOR_ALWAYS) || + (Logger::color_mode == LOG_COLOR_AUTO && is_tty); + if (colored_message) { + switch (lev) { + case LL_ERROR: + // error is red + m_stream << "\033[91m"; + break; + case LL_WARNING: + // warning is yellow + m_stream << "\033[93m"; + break; + case LL_INFO: + // info is a bit dark + m_stream << "\033[37m"; + break; + case LL_VERBOSE: + // verbose is darker than info + m_stream << "\033[2m"; + break; + default: + // action is white + colored_message = false; + } + } + + m_stream << line << std::endl; + + if (colored_message) { + // reset to white color + m_stream << "\033[0m"; + } +} + +void LogOutputBuffer::updateLogLevel() +{ + const std::string &conf_loglev = g_settings->get("chat_log_level"); + LogLevel log_level = Logger::stringToLevel(conf_loglev); + if (log_level == LL_MAX) { + warningstream << "Supplied unrecognized chat_log_level; " + "showing none." << std::endl; + log_level = LL_NONE; + } + + m_logger.removeOutput(this); + m_logger.addOutputMaxLevel(this, log_level); +} + +void LogOutputBuffer::logRaw(LogLevel lev, const std::string &line) +{ + std::string color; + if (!g_settings->getBool("disable_escape_sequences")) { + switch (lev) { + case LL_ERROR: // red + color = "\x1b(c@#F00)"; + break; + case LL_WARNING: // yellow + color = "\x1b(c@#EE0)"; + break; + case LL_INFO: // grey + color = "\x1b(c@#BBB)"; + break; + case LL_VERBOSE: // dark grey + color = "\x1b(c@#888)"; + break; + default: break; + } + } + + m_buffer.push(color.append(line)); +} //// //// *Buffer methods diff -Nru minetest-5.2.0/src/log.h minetest-5.3.0/src/log.h --- minetest-5.2.0/src/log.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/log.h 2020-07-09 21:13:21.000000000 +0000 @@ -124,39 +124,7 @@ #endif } - void logRaw(LogLevel lev, const std::string &line) - { - bool colored_message = (Logger::color_mode == LOG_COLOR_ALWAYS) || - (Logger::color_mode == LOG_COLOR_AUTO && is_tty); - if (colored_message) - switch (lev) { - case LL_ERROR: - // error is red - m_stream << "\033[91m"; - break; - case LL_WARNING: - // warning is yellow - m_stream << "\033[93m"; - break; - case LL_INFO: - // info is a bit dark - m_stream << "\033[37m"; - break; - case LL_VERBOSE: - // verbose is darker than info - m_stream << "\033[2m"; - break; - default: - // action is white - colored_message = false; - } - - m_stream << line << std::endl; - - if (colored_message) - // reset to white color - m_stream << "\033[0m"; - } + void logRaw(LogLevel lev, const std::string &line); private: std::ostream &m_stream; @@ -178,23 +146,27 @@ class LogOutputBuffer : public ICombinedLogOutput { public: - LogOutputBuffer(Logger &logger, LogLevel lev) : + LogOutputBuffer(Logger &logger) : m_logger(logger) { - m_logger.addOutput(this, lev); - } + updateLogLevel(); + }; - ~LogOutputBuffer() + virtual ~LogOutputBuffer() { m_logger.removeOutput(this); } - void logRaw(LogLevel lev, const std::string &line) + void updateLogLevel(); + + void logRaw(LogLevel lev, const std::string &line); + + void clear() { - m_buffer.push(line); + m_buffer = std::queue(); } - bool empty() + bool empty() const { return m_buffer.empty(); } diff -Nru minetest-5.2.0/src/main.cpp minetest-5.3.0/src/main.cpp --- minetest-5.2.0/src/main.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/main.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -187,7 +187,13 @@ #ifndef __ANDROID__ // Run unit tests if (cmd_args.getFlag("run-unittests")) { +#if BUILD_UNITTESTS return run_tests(); +#else + errorstream << "Unittest support is not enabled in this binary. " + << "If you want to enable it, compile project with BUILD_UNITTESTS=1 flag." + << std::endl; +#endif } #endif @@ -207,9 +213,6 @@ sanity_check(!game_params.world_path.empty()); - infostream << "Using commanded world path [" - << game_params.world_path << "]" << std::endl; - if (game_params.is_dedicated_server) return run_dedicated_server(game_params, cmd_args) ? 0 : 1; @@ -460,7 +463,6 @@ } else { success = true; } - porting::copyAssets(); #else // Create user data directory success = fs::CreateDir(porting::path_user); @@ -686,8 +688,6 @@ // No world was specified; try to select it automatically // Get information about available worlds - verbosestream << _("Determining world path") << std::endl; - std::vector worldspecs = getAvailableWorlds(); std::string world_path; @@ -708,7 +708,7 @@ // This is the ultimate default world path world_path = porting::path_user + DIR_DELIM + "worlds" + DIR_DELIM + "world"; - infostream << "Creating default world at [" + infostream << "Using default world at [" << world_path << "]" << std::endl; } @@ -770,7 +770,6 @@ assert(game_params->world_path != ""); // Pre-condition - verbosestream << _("Determining gameid/gamespec") << std::endl; // If world doesn't exist if (!game_params->world_path.empty() && !getWorldExists(game_params->world_path)) { @@ -782,7 +781,7 @@ gamespec = findSubgame(g_settings->get("default_game")); infostream << "Using default gameid [" << gamespec.id << "]" << std::endl; if (!gamespec.isValid()) { - errorstream << "Subgame specified in default_game [" + errorstream << "Game specified in default_game [" << g_settings->get("default_game") << "] is invalid." << std::endl; return false; @@ -807,7 +806,7 @@ } if (!gamespec.isValid()) { - errorstream << "Subgame [" << gamespec.id << "] could not be found." + errorstream << "Game [" << gamespec.id << "] could not be found." << std::endl; return false; } @@ -888,7 +887,6 @@ // Create server Server server(game_params.world_path, game_params.game_spec, false, bind_addr, true, &iface); - server.init(); g_term_console.setup(&iface, &kill, admin_nick); @@ -923,7 +921,6 @@ // Create server Server server(game_params.world_path, game_params.game_spec, false, bind_addr, true); - server.init(); server.start(); // Run server diff -Nru minetest-5.2.0/src/map.cpp minetest-5.3.0/src/map.cpp --- minetest-5.2.0/src/map.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/map.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -144,7 +144,7 @@ { v3s16 blockpos = getNodeBlockPos(p); MapBlock *block = getBlockNoCreateNoEx(blockpos); - return block && block->getIsUnderground(); + return block && block->getIsUnderground(); } bool Map::isValidPosition(v3s16 p) @@ -478,6 +478,16 @@ #define WATER_DROP_BOOST 4 +const static v3s16 liquid_6dirs[6] = { + // order: upper before same level before lower + v3s16( 0, 1, 0), + v3s16( 0, 0, 1), + v3s16( 1, 0, 0), + v3s16( 0, 0,-1), + v3s16(-1, 0, 0), + v3s16( 0,-1, 0) +}; + enum NeighborType : u8 { NEIGHBOR_UPPER, NEIGHBOR_SAME_LEVEL, @@ -568,7 +578,7 @@ switch (liquid_type) { case LIQUID_SOURCE: liquid_level = LIQUID_LEVEL_SOURCE; - liquid_kind = m_nodedef->getId(cf.liquid_alternative_flowing); + liquid_kind = cf.liquid_alternative_flowing_id; break; case LIQUID_FLOWING: liquid_level = (n0.param2 & LIQUID_LEVEL_MASK); @@ -587,7 +597,6 @@ /* Collect information about the environment */ - const v3s16 *dirs = g_6dirs; NodeNeighbor sources[6]; // surrounding sources int num_sources = 0; NodeNeighbor flows[6]; // surrounding flowing liquid nodes @@ -601,16 +610,16 @@ for (u16 i = 0; i < 6; i++) { NeighborType nt = NEIGHBOR_SAME_LEVEL; switch (i) { - case 1: + case 0: nt = NEIGHBOR_UPPER; break; - case 4: + case 5: nt = NEIGHBOR_LOWER; break; default: break; } - v3s16 npos = p0 + dirs[i]; + v3s16 npos = p0 + liquid_6dirs[i]; NodeNeighbor nb(getNode(npos), nt, npos); const ContentFeatures &cfnb = m_nodedef->get(nb.n); switch (m_nodedef->get(nb.n.getContent()).liquid_type) { @@ -641,20 +650,24 @@ case LIQUID_SOURCE: // if this node is not (yet) of a liquid type, choose the first liquid type we encounter if (liquid_kind == CONTENT_AIR) - liquid_kind = m_nodedef->getId(cfnb.liquid_alternative_flowing); - if (m_nodedef->getId(cfnb.liquid_alternative_flowing) != liquid_kind) { + liquid_kind = cfnb.liquid_alternative_flowing_id; + if (cfnb.liquid_alternative_flowing_id != liquid_kind) { neutrals[num_neutrals++] = nb; } else { // Do not count bottom source, it will screw things up - if(dirs[i].Y != -1) + if(nt != NEIGHBOR_LOWER) sources[num_sources++] = nb; } break; case LIQUID_FLOWING: - // if this node is not (yet) of a liquid type, choose the first liquid type we encounter - if (liquid_kind == CONTENT_AIR) - liquid_kind = m_nodedef->getId(cfnb.liquid_alternative_flowing); - if (m_nodedef->getId(cfnb.liquid_alternative_flowing) != liquid_kind) { + if (nb.t != NEIGHBOR_SAME_LEVEL || + (nb.n.param2 & LIQUID_FLOW_DOWN_MASK) != LIQUID_FLOW_DOWN_MASK) { + // if this node is not (yet) of a liquid type, choose the first liquid type we encounter + // but exclude falling liquids on the same level, they cannot flow here anyway + if (liquid_kind == CONTENT_AIR) + liquid_kind = cfnb.liquid_alternative_flowing_id; + } + if (cfnb.liquid_alternative_flowing_id != liquid_kind) { neutrals[num_neutrals++] = nb; } else { flows[num_flows++] = nb; @@ -680,7 +693,7 @@ // liquid_kind will be set to either the flowing alternative of the node (if it's a liquid) // or the flowing alternative of the first of the surrounding sources (if it's air), so // it's perfectly safe to use liquid_kind here to determine the new node content. - new_node_content = m_nodedef->getId(m_nodedef->get(liquid_kind).liquid_alternative_source); + new_node_content = m_nodedef->get(liquid_kind).liquid_alternative_source_id; } else if (num_sources >= 1 && sources[0].t != NEIGHBOR_LOWER) { // liquid_kind is set properly, see above max_node_level = new_node_level = LIQUID_LEVEL_MAX; @@ -1187,7 +1200,7 @@ ServerMap */ ServerMap::ServerMap(const std::string &savedir, IGameDef *gamedef, - EmergeManager *emerge): + EmergeManager *emerge, MetricsBackend *mb): Map(dout_server, gamedef), settings_mgr(g_settings, savedir + DIR_DELIM + "map_meta.txt"), m_emerge(emerge) @@ -1221,6 +1234,8 @@ m_savedir = savedir; m_map_saving_enabled = false; + m_save_time_counter = mb->addCounter("minetest_core_map_save_time", "Map save time (in nanoseconds)"); + try { // If directory exists, check contents and load if possible if (fs::PathExists(m_savedir)) { @@ -1777,6 +1792,8 @@ return; } + u64 start_time = porting::getTimeNs(); + if(save_level == MOD_STATE_CLEAN) infostream<<"ServerMap: Saving whole map, this can take time." <increment(end_time - start_time); } void ServerMap::listAllLoadableBlocks(std::vector &dst) diff -Nru minetest-5.2.0/src/mapgen/cavegen.cpp minetest-5.3.0/src/mapgen/cavegen.cpp --- minetest-5.2.0/src/mapgen/cavegen.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/cavegen.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -1,8 +1,8 @@ /* Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola -Copyright (C) 2010-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat +Copyright (C) 2010-2020 celeron55, Perttu Ahola +Copyright (C) 2015-2020 paramat +Copyright (C) 2010-2016 kwolekr, Ryan Kwolek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -69,7 +69,7 @@ void CavesNoiseIntersection::generateCaves(MMVManip *vm, - v3s16 nmin, v3s16 nmax, u8 *biomemap) + v3s16 nmin, v3s16 nmax, biome_t *biomemap) { assert(vm); assert(biomemap); diff -Nru minetest-5.2.0/src/mapgen/cavegen.h minetest-5.3.0/src/mapgen/cavegen.h --- minetest-5.2.0/src/mapgen/cavegen.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/cavegen.h 2020-07-09 21:13:21.000000000 +0000 @@ -1,7 +1,7 @@ /* Minetest -Copyright (C) 2010-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat +Copyright (C) 2015-2020 paramat +Copyright (C) 2010-2016 kwolekr, Ryan Kwolek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -22,6 +22,8 @@ #define VMANIP_FLAG_CAVE VOXELFLAG_CHECKED1 +typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include + class GenerateNotifier; /* @@ -44,7 +46,7 @@ NoiseParams *np_cave2, s32 seed, float cave_width); ~CavesNoiseIntersection(); - void generateCaves(MMVManip *vm, v3s16 nmin, v3s16 nmax, u8 *biomemap); + void generateCaves(MMVManip *vm, v3s16 nmin, v3s16 nmax, biome_t *biomemap); private: const NodeDefManager *m_ndef; diff -Nru minetest-5.2.0/src/mapgen/mapgen_carpathian.cpp minetest-5.3.0/src/mapgen/mapgen_carpathian.cpp --- minetest-5.2.0/src/mapgen/mapgen_carpathian.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_carpathian.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -26,7 +26,6 @@ #include "mapblock.h" #include "mapnode.h" #include "map.h" -#include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" //#include "profiler.h" // For TimeTaker @@ -50,7 +49,7 @@ /////////////////////////////////////////////////////////////////////////////// -MapgenCarpathian::MapgenCarpathian(MapgenCarpathianParams *params, EmergeManager *emerge) +MapgenCarpathian::MapgenCarpathian(MapgenCarpathianParams *params, EmergeParams *emerge) : MapgenBasic(MAPGEN_CARPATHIAN, params, emerge) { base_level = params->base_level; diff -Nru minetest-5.2.0/src/mapgen/mapgen_carpathian.h minetest-5.3.0/src/mapgen/mapgen_carpathian.h --- minetest-5.2.0/src/mapgen/mapgen_carpathian.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_carpathian.h 2020-07-09 21:13:21.000000000 +0000 @@ -79,7 +79,7 @@ class MapgenCarpathian : public MapgenBasic { public: - MapgenCarpathian(MapgenCarpathianParams *params, EmergeManager *emerge); + MapgenCarpathian(MapgenCarpathianParams *params, EmergeParams *emerge); ~MapgenCarpathian(); virtual MapgenType getType() const { return MAPGEN_CARPATHIAN; } diff -Nru minetest-5.2.0/src/mapgen/mapgen.cpp minetest-5.3.0/src/mapgen/mapgen.cpp --- minetest-5.2.0/src/mapgen/mapgen.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -28,7 +28,6 @@ #include "mapblock.h" #include "mapnode.h" #include "map.h" -#include "content_sao.h" #include "nodedef.h" #include "emerge.h" #include "voxelalgorithms.h" @@ -107,8 +106,8 @@ //// Mapgen //// -Mapgen::Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge) : - gennotify(emerge->gen_notify_on, &emerge->gen_notify_on_deco_ids) +Mapgen::Mapgen(int mapgenid, MapgenParams *params, EmergeParams *emerge) : + gennotify(emerge->gen_notify_on, emerge->gen_notify_on_deco_ids) { id = mapgenid; water_level = params->water_level; @@ -157,7 +156,7 @@ Mapgen *Mapgen::createMapgen(MapgenType mgtype, MapgenParams *params, - EmergeManager *emerge) + EmergeParams *emerge) { switch (mgtype) { case MAPGEN_CARPATHIAN: @@ -586,7 +585,7 @@ //// MapgenBasic //// -MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeManager *emerge) +MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeParams *emerge) : Mapgen(mapgenid, params, emerge) { this->m_emerge = emerge; @@ -629,6 +628,13 @@ // Lava falls back to water as both are suitable as cave liquids. if (c_lava_source == CONTENT_IGNORE) c_lava_source = c_water_source; + + if (c_stone == CONTENT_IGNORE) + errorstream << "Mapgen: Mapgen alias 'mapgen_stone' is invalid!" << std::endl; + if (c_water_source == CONTENT_IGNORE) + errorstream << "Mapgen: Mapgen alias 'mapgen_water_source' is invalid!" << std::endl; + if (c_river_water_source == CONTENT_IGNORE) + warningstream << "Mapgen: Mapgen alias 'mapgen_river_water_source' is invalid!" << std::endl; } @@ -636,6 +642,8 @@ { delete biomegen; delete []heightmap; + + delete m_emerge; // destroying EmergeParams is our responsibility } @@ -968,7 +976,7 @@ //// GenerateNotifier::GenerateNotifier(u32 notify_on, - std::set *notify_on_deco_ids) + const std::set *notify_on_deco_ids) { m_notify_on = notify_on; m_notify_on_deco_ids = notify_on_deco_ids; @@ -981,7 +989,8 @@ } -void GenerateNotifier::setNotifyOnDecoIds(std::set *notify_on_deco_ids) +void GenerateNotifier::setNotifyOnDecoIds( + const std::set *notify_on_deco_ids) { m_notify_on_deco_ids = notify_on_deco_ids; } @@ -993,7 +1002,7 @@ return false; if (type == GENNOTIFY_DECORATION && - m_notify_on_deco_ids->find(id) == m_notify_on_deco_ids->end()) + m_notify_on_deco_ids->find(id) == m_notify_on_deco_ids->cend()) return false; GenNotifyEvent gne; diff -Nru minetest-5.2.0/src/mapgen/mapgen_flat.cpp minetest-5.3.0/src/mapgen/mapgen_flat.cpp --- minetest-5.2.0/src/mapgen/mapgen_flat.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_flat.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -25,7 +25,6 @@ #include "mapblock.h" #include "mapnode.h" #include "map.h" -#include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" //#include "profiler.h" // For TimeTaker @@ -48,7 +47,7 @@ /////////////////////////////////////////////////////////////////////////////////////// -MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeManager *emerge) +MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeParams *emerge) : MapgenBasic(MAPGEN_FLAT, params, emerge) { spflags = params->spflags; diff -Nru minetest-5.2.0/src/mapgen/mapgen_flat.h minetest-5.3.0/src/mapgen/mapgen_flat.h --- minetest-5.2.0/src/mapgen/mapgen_flat.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_flat.h 2020-07-09 21:13:21.000000000 +0000 @@ -64,7 +64,7 @@ class MapgenFlat : public MapgenBasic { public: - MapgenFlat(MapgenFlatParams *params, EmergeManager *emerge); + MapgenFlat(MapgenFlatParams *params, EmergeParams *emerge); ~MapgenFlat(); virtual MapgenType getType() const { return MAPGEN_FLAT; } diff -Nru minetest-5.2.0/src/mapgen/mapgen_fractal.cpp minetest-5.3.0/src/mapgen/mapgen_fractal.cpp --- minetest-5.2.0/src/mapgen/mapgen_fractal.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_fractal.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -26,7 +26,6 @@ #include "mapblock.h" #include "mapnode.h" #include "map.h" -#include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" //#include "profiler.h" // For TimeTaker @@ -48,7 +47,7 @@ /////////////////////////////////////////////////////////////////////////////////////// -MapgenFractal::MapgenFractal(MapgenFractalParams *params, EmergeManager *emerge) +MapgenFractal::MapgenFractal(MapgenFractalParams *params, EmergeParams *emerge) : MapgenBasic(MAPGEN_FRACTAL, params, emerge) { spflags = params->spflags; diff -Nru minetest-5.2.0/src/mapgen/mapgen_fractal.h minetest-5.3.0/src/mapgen/mapgen_fractal.h --- minetest-5.2.0/src/mapgen/mapgen_fractal.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_fractal.h 2020-07-09 21:13:21.000000000 +0000 @@ -72,7 +72,7 @@ class MapgenFractal : public MapgenBasic { public: - MapgenFractal(MapgenFractalParams *params, EmergeManager *emerge); + MapgenFractal(MapgenFractalParams *params, EmergeParams *emerge); ~MapgenFractal(); virtual MapgenType getType() const { return MAPGEN_FRACTAL; } diff -Nru minetest-5.2.0/src/mapgen/mapgen.h minetest-5.3.0/src/mapgen/mapgen.h --- minetest-5.2.0/src/mapgen/mapgen.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen.h 2020-07-09 21:13:21.000000000 +0000 @@ -1,8 +1,8 @@ /* Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola -Copyright (C) 2013-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat +Copyright (C) 2010-2020 celeron55, Perttu Ahola +Copyright (C) 2015-2020 paramat +Copyright (C) 2013-2016 kwolekr, Ryan Kwolek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -38,7 +38,7 @@ #define MG_DECORATIONS 0x20 #define MG_BIOMES 0x40 -typedef u8 biome_t; // copy from mg_biome.h to avoid an unnecessary include +typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include class Settings; class MMVManip; @@ -51,6 +51,7 @@ class BiomeGen; struct BiomeParams; class BiomeManager; +class EmergeParams; class EmergeManager; class MapBlock; class VoxelManipulator; @@ -87,10 +88,10 @@ class GenerateNotifier { public: GenerateNotifier() = default; - GenerateNotifier(u32 notify_on, std::set *notify_on_deco_ids); + GenerateNotifier(u32 notify_on, const std::set *notify_on_deco_ids); void setNotifyOn(u32 notify_on); - void setNotifyOnDecoIds(std::set *notify_on_deco_ids); + void setNotifyOnDecoIds(const std::set *notify_on_deco_ids); bool addEvent(GenNotifyType type, v3s16 pos, u32 id=0); void getEvents(std::map > &event_map); @@ -98,7 +99,7 @@ private: u32 m_notify_on = 0; - std::set *m_notify_on_deco_ids; + const std::set *m_notify_on_deco_ids; std::list m_notify_events; }; @@ -176,7 +177,7 @@ GenerateNotifier gennotify; Mapgen() = default; - Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge); + Mapgen(int mapgenid, MapgenParams *params, EmergeParams *emerge); virtual ~Mapgen() = default; DISABLE_CLASS_COPY(Mapgen); @@ -215,7 +216,7 @@ static MapgenType getMapgenType(const std::string &mgname); static const char *getMapgenName(MapgenType mgtype); static Mapgen *createMapgen(MapgenType mgtype, MapgenParams *params, - EmergeManager *emerge); + EmergeParams *emerge); static MapgenParams *createMapgenParams(MapgenType mgtype); static void getMapgenNames(std::vector *mgnames, bool include_hidden); static void setDefaultSettings(Settings *settings); @@ -243,7 +244,7 @@ */ class MapgenBasic : public Mapgen { public: - MapgenBasic(int mapgenid, MapgenParams *params, EmergeManager *emerge); + MapgenBasic(int mapgenid, MapgenParams *params, EmergeParams *emerge); virtual ~MapgenBasic(); virtual void generateBiomes(); @@ -254,7 +255,7 @@ virtual void generateDungeons(s16 max_stone_y); protected: - EmergeManager *m_emerge; + EmergeParams *m_emerge; BiomeManager *m_bmgr; Noise *noise_filler_depth; diff -Nru minetest-5.2.0/src/mapgen/mapgen_singlenode.cpp minetest-5.3.0/src/mapgen/mapgen_singlenode.cpp --- minetest-5.2.0/src/mapgen/mapgen_singlenode.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_singlenode.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -29,7 +29,7 @@ #include "emerge.h" -MapgenSinglenode::MapgenSinglenode(MapgenParams *params, EmergeManager *emerge) +MapgenSinglenode::MapgenSinglenode(MapgenParams *params, EmergeParams *emerge) : Mapgen(MAPGEN_SINGLENODE, params, emerge) { const NodeDefManager *ndef = emerge->ndef; diff -Nru minetest-5.2.0/src/mapgen/mapgen_singlenode.h minetest-5.3.0/src/mapgen/mapgen_singlenode.h --- minetest-5.2.0/src/mapgen/mapgen_singlenode.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_singlenode.h 2020-07-09 21:13:21.000000000 +0000 @@ -38,7 +38,7 @@ content_t c_node; u8 set_light; - MapgenSinglenode(MapgenParams *params, EmergeManager *emerge); + MapgenSinglenode(MapgenParams *params, EmergeParams *emerge); ~MapgenSinglenode() = default; virtual MapgenType getType() const { return MAPGEN_SINGLENODE; } diff -Nru minetest-5.2.0/src/mapgen/mapgen_v5.cpp minetest-5.3.0/src/mapgen/mapgen_v5.cpp --- minetest-5.2.0/src/mapgen/mapgen_v5.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_v5.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -25,7 +25,6 @@ #include "mapblock.h" #include "mapnode.h" #include "map.h" -#include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" //#include "profiler.h" // For TimeTaker @@ -45,7 +44,7 @@ }; -MapgenV5::MapgenV5(MapgenV5Params *params, EmergeManager *emerge) +MapgenV5::MapgenV5(MapgenV5Params *params, EmergeParams *emerge) : MapgenBasic(MAPGEN_V5, params, emerge) { spflags = params->spflags; diff -Nru minetest-5.2.0/src/mapgen/mapgen_v5.h minetest-5.3.0/src/mapgen/mapgen_v5.h --- minetest-5.2.0/src/mapgen/mapgen_v5.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_v5.h 2020-07-09 21:13:21.000000000 +0000 @@ -64,7 +64,7 @@ class MapgenV5 : public MapgenBasic { public: - MapgenV5(MapgenV5Params *params, EmergeManager *emerge); + MapgenV5(MapgenV5Params *params, EmergeParams *emerge); ~MapgenV5(); virtual MapgenType getType() const { return MAPGEN_V5; } diff -Nru minetest-5.2.0/src/mapgen/mapgen_v6.cpp minetest-5.3.0/src/mapgen/mapgen_v6.cpp --- minetest-5.2.0/src/mapgen/mapgen_v6.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_v6.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -27,8 +27,6 @@ #include "mapblock.h" #include "mapnode.h" #include "map.h" -//#include "serverobject.h" -#include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" //#include "profiler.h" // For TimeTaker @@ -56,7 +54,7 @@ ///////////////////////////////////////////////////////////////////////////// -MapgenV6::MapgenV6(MapgenV6Params *params, EmergeManager *emerge) +MapgenV6::MapgenV6(MapgenV6Params *params, EmergeParams *emerge) : Mapgen(MAPGEN_V6, params, emerge) { m_emerge = emerge; @@ -132,6 +130,21 @@ c_stair_cobble = c_cobble; if (c_stair_desert_stone == CONTENT_IGNORE) c_stair_desert_stone = c_desert_stone; + + if (c_stone == CONTENT_IGNORE) + errorstream << "Mapgen v6: Mapgen alias 'mapgen_stone' is invalid!" << std::endl; + if (c_dirt == CONTENT_IGNORE) + errorstream << "Mapgen v6: Mapgen alias 'mapgen_dirt' is invalid!" << std::endl; + if (c_dirt_with_grass == CONTENT_IGNORE) + errorstream << "Mapgen v6: Mapgen alias 'mapgen_dirt_with_grass' is invalid!" << std::endl; + if (c_sand == CONTENT_IGNORE) + errorstream << "Mapgen v6: Mapgen alias 'mapgen_sand' is invalid!" << std::endl; + if (c_water_source == CONTENT_IGNORE) + errorstream << "Mapgen v6: Mapgen alias 'mapgen_water_source' is invalid!" << std::endl; + if (c_lava_source == CONTENT_IGNORE) + errorstream << "Mapgen v6: Mapgen alias 'mapgen_lava_source' is invalid!" << std::endl; + if (c_cobble == CONTENT_IGNORE) + errorstream << "Mapgen v6: Mapgen alias 'mapgen_cobble' is invalid!" << std::endl; } @@ -147,6 +160,8 @@ delete noise_humidity; delete[] heightmap; + + delete m_emerge; // our responsibility } diff -Nru minetest-5.2.0/src/mapgen/mapgen_v6.h minetest-5.3.0/src/mapgen/mapgen_v6.h --- minetest-5.2.0/src/mapgen/mapgen_v6.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_v6.h 2020-07-09 21:13:21.000000000 +0000 @@ -83,7 +83,7 @@ class MapgenV6 : public Mapgen { public: - EmergeManager *m_emerge; + EmergeParams *m_emerge; int ystride; u32 spflags; @@ -133,7 +133,7 @@ content_t c_stair_cobble; content_t c_stair_desert_stone; - MapgenV6(MapgenV6Params *params, EmergeManager *emerge); + MapgenV6(MapgenV6Params *params, EmergeParams *emerge); ~MapgenV6(); virtual MapgenType getType() const { return MAPGEN_V6; } diff -Nru minetest-5.2.0/src/mapgen/mapgen_v7.cpp minetest-5.3.0/src/mapgen/mapgen_v7.cpp --- minetest-5.2.0/src/mapgen/mapgen_v7.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_v7.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -1,7 +1,7 @@ /* Minetest -Copyright (C) 2013-2019 kwolekr, Ryan Kwolek -Copyright (C) 2014-2019 paramat +Copyright (C) 2014-2020 paramat +Copyright (C) 2013-2016 kwolekr, Ryan Kwolek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -26,7 +26,6 @@ #include "mapblock.h" #include "mapnode.h" #include "map.h" -#include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" //#include "profiler.h" // For TimeTaker @@ -52,11 +51,17 @@ //////////////////////////////////////////////////////////////////////////////// -MapgenV7::MapgenV7(MapgenV7Params *params, EmergeManager *emerge) +MapgenV7::MapgenV7(MapgenV7Params *params, EmergeParams *emerge) : MapgenBasic(MAPGEN_V7, params, emerge) { spflags = params->spflags; mount_zero_level = params->mount_zero_level; + floatland_ymin = params->floatland_ymin; + floatland_ymax = params->floatland_ymax; + floatland_taper = params->floatland_taper; + float_taper_exp = params->float_taper_exp; + floatland_density = params->floatland_density; + floatland_ywater = params->floatland_ywater; cave_width = params->cave_width; large_cave_depth = params->large_cave_depth; @@ -71,6 +76,9 @@ dungeon_ymin = params->dungeon_ymin; dungeon_ymax = params->dungeon_ymax; + // Allocate floatland noise offset cache + this->float_offset_cache = new float[csize.Y + 2]; + // 2D noise noise_terrain_base = new Noise(¶ms->np_terrain_base, seed, csize.X, csize.Z); @@ -101,6 +109,12 @@ new Noise(¶ms->np_ridge, seed, csize.X, csize.Y + 2, csize.Z); } + if (spflags & MGV7_FLOATLANDS) { + // 3D noise, 1 up, 1 down overgeneration + noise_floatland = + new Noise(¶ms->np_floatland, seed, csize.X, csize.Y + 2, csize.Z); + } + // 3D noise, 1 down overgeneration MapgenBasic::np_cave1 = params->np_cave1; MapgenBasic::np_cave2 = params->np_cave2; @@ -127,6 +141,12 @@ delete noise_ridge_uwater; delete noise_ridge; } + + if (spflags & MGV7_FLOATLANDS) { + delete noise_floatland; + } + + delete []float_offset_cache; } @@ -140,6 +160,7 @@ np_ridge_uwater (0.0, 1.0, v3f(1000, 1000, 1000), 85039, 5, 0.6, 2.0), np_mountain (-0.6, 1.0, v3f(250, 350, 250), 5333, 5, 0.63, 2.0), np_ridge (0.0, 1.0, v3f(100, 100, 100), 6467, 4, 0.75, 2.0), + np_floatland (0.0, 0.7, v3f(384, 96, 384), 1009, 4, 0.75, 1.618), np_cavern (0.0, 1.0, v3f(384, 128, 384), 723, 5, 0.63, 2.0), np_cave1 (0.0, 12.0, v3f(61, 61, 61), 52534, 3, 0.5, 2.0), np_cave2 (0.0, 12.0, v3f(67, 67, 67), 10325, 3, 0.5, 2.0), @@ -152,6 +173,13 @@ { settings->getFlagStrNoEx("mgv7_spflags", spflags, flagdesc_mapgen_v7); settings->getS16NoEx("mgv7_mount_zero_level", mount_zero_level); + settings->getS16NoEx("mgv7_floatland_ymin", floatland_ymin); + settings->getS16NoEx("mgv7_floatland_ymax", floatland_ymax); + settings->getS16NoEx("mgv7_floatland_taper", floatland_taper); + settings->getFloatNoEx("mgv7_float_taper_exp", float_taper_exp); + settings->getFloatNoEx("mgv7_floatland_density", floatland_density); + settings->getS16NoEx("mgv7_floatland_ywater", floatland_ywater); + settings->getFloatNoEx("mgv7_cave_width", cave_width); settings->getS16NoEx("mgv7_large_cave_depth", large_cave_depth); settings->getU16NoEx("mgv7_small_cave_num_min", small_cave_num_min); @@ -174,6 +202,7 @@ settings->getNoiseParams("mgv7_np_ridge_uwater", np_ridge_uwater); settings->getNoiseParams("mgv7_np_mountain", np_mountain); settings->getNoiseParams("mgv7_np_ridge", np_ridge); + settings->getNoiseParams("mgv7_np_floatland", np_floatland); settings->getNoiseParams("mgv7_np_cavern", np_cavern); settings->getNoiseParams("mgv7_np_cave1", np_cave1); settings->getNoiseParams("mgv7_np_cave2", np_cave2); @@ -185,6 +214,13 @@ { settings->setFlagStr("mgv7_spflags", spflags, flagdesc_mapgen_v7); settings->setS16("mgv7_mount_zero_level", mount_zero_level); + settings->setS16("mgv7_floatland_ymin", floatland_ymin); + settings->setS16("mgv7_floatland_ymax", floatland_ymax); + settings->setS16("mgv7_floatland_taper", floatland_taper); + settings->setFloat("mgv7_float_taper_exp", float_taper_exp); + settings->setFloat("mgv7_floatland_density", floatland_density); + settings->setS16("mgv7_floatland_ywater", floatland_ywater); + settings->setFloat("mgv7_cave_width", cave_width); settings->setS16("mgv7_large_cave_depth", large_cave_depth); settings->setU16("mgv7_small_cave_num_min", small_cave_num_min); @@ -207,6 +243,7 @@ settings->setNoiseParams("mgv7_np_ridge_uwater", np_ridge_uwater); settings->setNoiseParams("mgv7_np_mountain", np_mountain); settings->setNoiseParams("mgv7_np_ridge", np_ridge); + settings->setNoiseParams("mgv7_np_floatland", np_floatland); settings->setNoiseParams("mgv7_np_cavern", np_cavern); settings->setNoiseParams("mgv7_np_cave1", np_cave1); settings->setNoiseParams("mgv7_np_cave2", np_cave2); @@ -358,8 +395,9 @@ updateLiquid(&data->transforming_liquid, full_node_min, full_node_max); // Calculate lighting - // TODO disable in and just below floatlands - bool propagate_shadow = true; + // Limit floatland shadows + bool propagate_shadow = !((spflags & MGV7_FLOATLANDS) && + node_max.Y >= floatland_ymin - csize.Y * 2 && node_min.Y <= floatland_ymax); if (flags & MG_LIGHT) calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0), @@ -428,6 +466,12 @@ } +bool MapgenV7::getFloatlandTerrainFromMap(int idx_xyz, float float_offset) +{ + return noise_floatland->result[idx_xyz] + floatland_density - float_offset >= 0.0f; +} + + int MapgenV7::generateTerrain() { MapNode n_air(CONTENT_AIR); @@ -447,6 +491,35 @@ noise_mountain->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z); } + //// Floatlands + // 'Generate floatlands in this mapchunk' bool for + // simplification of condition checks in y-loop. + bool gen_floatlands = false; + u8 cache_index = 0; + // Y values where floatland tapering starts + s16 float_taper_ymax = floatland_ymax - floatland_taper; + s16 float_taper_ymin = floatland_ymin + floatland_taper; + + if ((spflags & MGV7_FLOATLANDS) && + node_max.Y >= floatland_ymin && node_min.Y <= floatland_ymax) { + gen_floatlands = true; + // Calculate noise for floatland generation + noise_floatland->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z); + + // Cache floatland noise offset values, for floatland tapering + for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++, cache_index++) { + float float_offset = 0.0f; + if (y > float_taper_ymax) { + float_offset = std::pow((y - float_taper_ymax) / (float)floatland_taper, + float_taper_exp) * 4.0f; + } else if (y < float_taper_ymin) { + float_offset = std::pow((float_taper_ymin - y) / (float)floatland_taper, + float_taper_exp) * 4.0f; + } + float_offset_cache[cache_index] = float_offset; + } + } + //// Place nodes const v3s16 &em = vm->m_area.getExtent(); s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT; @@ -458,13 +531,15 @@ if (surface_y > stone_surface_max_y) stone_surface_max_y = surface_y; + cache_index = 0; u32 vi = vm->m_area.index(x, node_min.Y - 1, z); u32 index3d = (z - node_min.Z) * zstride_1u1d + (x - node_min.X); for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++, index3d += ystride, - VoxelArea::add_y(em, vi, 1)) { + VoxelArea::add_y(em, vi, 1), + cache_index++) { if (vm->m_data[vi].getContent() != CONTENT_IGNORE) continue; @@ -475,10 +550,18 @@ vm->m_data[vi] = n_stone; // Mountain terrain if (y > stone_surface_max_y) stone_surface_max_y = y; - } else if (y <= water_level) { + } else if (gen_floatlands && + getFloatlandTerrainFromMap(index3d, + float_offset_cache[cache_index])) { + vm->m_data[vi] = n_stone; // Floatland terrain + if (y > stone_surface_max_y) + stone_surface_max_y = y; + } else if (y <= water_level) { // Surface water vm->m_data[vi] = n_water; + } else if (gen_floatlands && y >= float_taper_ymax && y <= floatland_ywater) { + vm->m_data[vi] = n_water; // Water for solid floatland layer only } else { - vm->m_data[vi] = n_air; + vm->m_data[vi] = n_air; // Air } } } @@ -489,8 +572,8 @@ void MapgenV7::generateRidgeTerrain() { - // TODO disable river canyons in floatlands - if (node_max.Y < water_level - 16) + if (node_max.Y < water_level - 16 || + (node_max.Y >= floatland_ymin && node_min.Y <= floatland_ymax)) return; noise_ridge->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z); diff -Nru minetest-5.2.0/src/mapgen/mapgen_v7.h minetest-5.3.0/src/mapgen/mapgen_v7.h --- minetest-5.2.0/src/mapgen/mapgen_v7.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_v7.h 2020-07-09 21:13:21.000000000 +0000 @@ -1,7 +1,7 @@ /* Minetest -Copyright (C) 2013-2018 kwolekr, Ryan Kwolek -Copyright (C) 2014-2018 paramat +Copyright (C) 2014-2020 paramat +Copyright (C) 2013-2016 kwolekr, Ryan Kwolek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -36,6 +36,12 @@ struct MapgenV7Params : public MapgenParams { s16 mount_zero_level = 0; + s16 floatland_ymin = 1024; + s16 floatland_ymax = 4096; + s16 floatland_taper = 256; + float float_taper_exp = 2.0f; + float floatland_density = -0.6f; + s16 floatland_ywater = -31000; float cave_width = 0.09f; s16 large_cave_depth = -33; @@ -59,6 +65,7 @@ NoiseParams np_ridge_uwater; NoiseParams np_mountain; NoiseParams np_ridge; + NoiseParams np_floatland; NoiseParams np_cavern; NoiseParams np_cave1; NoiseParams np_cave2; @@ -75,7 +82,7 @@ class MapgenV7 : public MapgenBasic { public: - MapgenV7(MapgenV7Params *params, EmergeManager *emerge); + MapgenV7(MapgenV7Params *params, EmergeParams *emerge); ~MapgenV7(); virtual MapgenType getType() const { return MAPGEN_V7; } @@ -87,12 +94,21 @@ float baseTerrainLevelFromMap(int index); bool getMountainTerrainAtPoint(s16 x, s16 y, s16 z); bool getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y); + bool getFloatlandTerrainFromMap(int idx_xyz, float float_offset); int generateTerrain(); void generateRidgeTerrain(); private: s16 mount_zero_level; + s16 floatland_ymin; + s16 floatland_ymax; + s16 floatland_taper; + float float_taper_exp; + float floatland_density; + s16 floatland_ywater; + + float *float_offset_cache = nullptr; Noise *noise_terrain_base; Noise *noise_terrain_alt; @@ -102,4 +118,5 @@ Noise *noise_ridge_uwater; Noise *noise_mountain; Noise *noise_ridge; + Noise *noise_floatland; }; diff -Nru minetest-5.2.0/src/mapgen/mapgen_valleys.cpp minetest-5.3.0/src/mapgen/mapgen_valleys.cpp --- minetest-5.2.0/src/mapgen/mapgen_valleys.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_valleys.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -54,7 +54,7 @@ }; -MapgenValleys::MapgenValleys(MapgenValleysParams *params, EmergeManager *emerge) +MapgenValleys::MapgenValleys(MapgenValleysParams *params, EmergeParams *emerge) : MapgenBasic(MAPGEN_VALLEYS, params, emerge) { // NOTE: MapgenValleys has a hard dependency on BiomeGenOriginal diff -Nru minetest-5.2.0/src/mapgen/mapgen_valleys.h minetest-5.3.0/src/mapgen/mapgen_valleys.h --- minetest-5.2.0/src/mapgen/mapgen_valleys.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mapgen_valleys.h 2020-07-09 21:13:21.000000000 +0000 @@ -84,7 +84,7 @@ public: MapgenValleys(MapgenValleysParams *params, - EmergeManager *emerge); + EmergeParams *emerge); ~MapgenValleys(); virtual MapgenType getType() const { return MAPGEN_VALLEYS; } diff -Nru minetest-5.2.0/src/mapgen/mg_biome.cpp minetest-5.3.0/src/mapgen/mg_biome.cpp --- minetest-5.2.0/src/mapgen/mg_biome.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mg_biome.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -78,7 +78,7 @@ EmergeManager *emerge = m_server->getEmergeManager(); // Remove all dangling references in Decorations - DecorationManager *decomgr = emerge->decomgr; + DecorationManager *decomgr = emerge->getWritableDecorationManager(); for (size_t i = 0; i != decomgr->getNumObjects(); i++) { Decoration *deco = (Decoration *)decomgr->getRaw(i); deco->biomes.clear(); @@ -92,9 +92,19 @@ } +BiomeManager *BiomeManager::clone() const +{ + auto mgr = new BiomeManager(); + assert(mgr); + ObjDefManager::cloneTo(mgr); + mgr->m_server = m_server; + return mgr; +} + + // For BiomeGen type 'BiomeGenOriginal' float BiomeManager::getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat, - NoiseParams &np_heat_blend, u64 seed) + NoiseParams &np_heat_blend, u64 seed) const { return NoisePerlin2D(&np_heat, pos.X, pos.Z, seed) + @@ -104,7 +114,7 @@ // For BiomeGen type 'BiomeGenOriginal' float BiomeManager::getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity, - NoiseParams &np_humidity_blend, u64 seed) + NoiseParams &np_humidity_blend, u64 seed) const { return NoisePerlin2D(&np_humidity, pos.X, pos.Z, seed) + @@ -113,7 +123,8 @@ // For BiomeGen type 'BiomeGenOriginal' -Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat, float humidity, v3s16 pos) +const Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat, + float humidity, v3s16 pos) const { Biome *biome_closest = nullptr; Biome *biome_closest_blend = nullptr; @@ -143,9 +154,11 @@ } } - mysrand(pos.Y + (heat + humidity) * 0.9f); + const u64 seed = pos.Y + (heat + humidity) * 0.9f; + PcgRandom rng(seed); + if (biome_closest_blend && dist_min_blend <= dist_min && - myrand_range(0, biome_closest_blend->vertical_blend) >= + rng.range(0, biome_closest_blend->vertical_blend) >= pos.Y - biome_closest_blend->max_pos.Y) return biome_closest_blend; @@ -308,10 +321,11 @@ // Carefully tune pseudorandom seed variation to avoid single node dither // and create larger scale blending patterns similar to horizontal biome // blend. - mysrand(pos.Y + (heat + humidity) * 0.9f); + const u64 seed = pos.Y + (heat + humidity) * 0.9f; + PcgRandom rng(seed); if (biome_closest_blend && dist_min_blend <= dist_min && - myrand_range(0, biome_closest_blend->vertical_blend) >= + rng.range(0, biome_closest_blend->vertical_blend) >= pos.Y - biome_closest_blend->max_pos.Y) return biome_closest_blend; @@ -321,6 +335,41 @@ //////////////////////////////////////////////////////////////////////////////// +ObjDef *Biome::clone() const +{ + auto obj = new Biome(); + ObjDef::cloneTo(obj); + NodeResolver::cloneTo(obj); + + obj->flags = flags; + + obj->c_top = c_top; + obj->c_filler = c_filler; + obj->c_stone = c_stone; + obj->c_water_top = c_water_top; + obj->c_water = c_water; + obj->c_river_water = c_river_water; + obj->c_riverbed = c_riverbed; + obj->c_dust = c_dust; + obj->c_cave_liquid = c_cave_liquid; + obj->c_dungeon = c_dungeon; + obj->c_dungeon_alt = c_dungeon_alt; + obj->c_dungeon_stair = c_dungeon_stair; + + obj->depth_top = depth_top; + obj->depth_filler = depth_filler; + obj->depth_water_top = depth_water_top; + obj->depth_riverbed = depth_riverbed; + + obj->min_pos = min_pos; + obj->max_pos = max_pos; + obj->heat_point = heat_point; + obj->humidity_point = humidity_point; + obj->vertical_blend = vertical_blend; + + return obj; +} + void Biome::resolveNodeNames() { getIdFromNrBacklog(&c_top, "mapgen_stone", CONTENT_AIR, false); diff -Nru minetest-5.2.0/src/mapgen/mg_biome.h minetest-5.3.0/src/mapgen/mg_biome.h --- minetest-5.2.0/src/mapgen/mg_biome.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mg_biome.h 2020-07-09 21:13:21.000000000 +0000 @@ -1,7 +1,7 @@ /* Minetest -Copyright (C) 2014-2018 kwolekr, Ryan Kwolek -Copyright (C) 2014-2018 paramat +Copyright (C) 2014-2020 paramat +Copyright (C) 2014-2016 kwolekr, Ryan Kwolek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -32,7 +32,7 @@ //// Biome //// -typedef u8 biome_t; +typedef u16 biome_t; #define BIOME_NONE ((biome_t)0) @@ -42,6 +42,8 @@ class Biome : public ObjDef, public NodeResolver { public: + ObjDef *clone() const; + u32 flags; content_t c_top; @@ -88,6 +90,7 @@ s32 seed; }; +// WARNING: this class is not thread-safe class BiomeGen { public: virtual ~BiomeGen() = default; @@ -191,6 +194,8 @@ BiomeManager(Server *server); virtual ~BiomeManager() = default; + BiomeManager *clone() const; + const char *getObjectTitle() const { return "biome"; @@ -226,12 +231,15 @@ // For BiomeGen type 'BiomeGenOriginal' float getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat, - NoiseParams &np_heat_blend, u64 seed); + NoiseParams &np_heat_blend, u64 seed) const; float getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity, - NoiseParams &np_humidity_blend, u64 seed); - Biome *getBiomeFromNoiseOriginal(float heat, float humidity, v3s16 pos); + NoiseParams &np_humidity_blend, u64 seed) const; + const Biome *getBiomeFromNoiseOriginal(float heat, float humidity, + v3s16 pos) const; private: + BiomeManager() {}; + Server *m_server; }; diff -Nru minetest-5.2.0/src/mapgen/mg_decoration.cpp minetest-5.3.0/src/mapgen/mg_decoration.cpp --- minetest-5.2.0/src/mapgen/mg_decoration.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mg_decoration.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -67,6 +67,13 @@ return nplaced; } +DecorationManager *DecorationManager::clone() const +{ + auto mgr = new DecorationManager(); + ObjDefManager::cloneTo(mgr); + return mgr; +} + /////////////////////////////////////////////////////////////////////////////// @@ -199,8 +206,7 @@ // All-surfaces decorations // Check biome of column if (mg->biomemap && !biomes.empty()) { - std::unordered_set::const_iterator iter = - biomes.find(mg->biomemap[mapindex]); + auto iter = biomes.find(mg->biomemap[mapindex]); if (iter == biomes.end()) continue; } @@ -252,8 +258,7 @@ continue; if (mg->biomemap && !biomes.empty()) { - std::unordered_set::const_iterator iter = - biomes.find(mg->biomemap[mapindex]); + auto iter = biomes.find(mg->biomemap[mapindex]); if (iter == biomes.end()) continue; } @@ -269,9 +274,42 @@ } +void Decoration::cloneTo(Decoration *def) const +{ + ObjDef::cloneTo(def); + def->flags = flags; + def->mapseed = mapseed; + def->c_place_on = c_place_on; + def->sidelen = sidelen; + def->y_min = y_min; + def->y_max = y_max; + def->fill_ratio = fill_ratio; + def->np = np; + def->c_spawnby = c_spawnby; + def->nspawnby = nspawnby; + def->place_offset_y = place_offset_y; + def->biomes = biomes; +} + + /////////////////////////////////////////////////////////////////////////////// +ObjDef *DecoSimple::clone() const +{ + auto def = new DecoSimple(); + Decoration::cloneTo(def); + + def->c_decos = c_decos; + def->deco_height = deco_height; + def->deco_height_max = deco_height_max; + def->deco_param2 = deco_param2; + def->deco_param2_max = deco_param2_max; + + return def; +} + + void DecoSimple::resolveNodeNames() { Decoration::resolveNodeNames(); @@ -351,6 +389,31 @@ /////////////////////////////////////////////////////////////////////////////// +DecoSchematic::~DecoSchematic() +{ + if (was_cloned) + delete schematic; +} + + +ObjDef *DecoSchematic::clone() const +{ + auto def = new DecoSchematic(); + Decoration::cloneTo(def); + NodeResolver::cloneTo(def); + + def->rotation = rotation; + /* FIXME: We do not own this schematic, yet we only have a pointer to it + * and not a handle. We are left with no option but to clone it ourselves. + * This is a waste of memory and should be replaced with an alternative + * approach sometime. */ + def->schematic = dynamic_cast(schematic->clone()); + def->was_cloned = true; + + return def; +} + + size_t DecoSchematic::generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling) { // Schematic could have been unloaded but not the decoration diff -Nru minetest-5.2.0/src/mapgen/mg_decoration.h minetest-5.3.0/src/mapgen/mg_decoration.h --- minetest-5.2.0/src/mapgen/mg_decoration.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mg_decoration.h 2020-07-09 21:13:21.000000000 +0000 @@ -25,6 +25,8 @@ #include "noise.h" #include "nodedef.h" +typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include + class Mapgen; class MMVManip; class PcgRandom; @@ -72,12 +74,17 @@ s16 nspawnby; s16 place_offset_y = 0; - std::unordered_set biomes; + std::unordered_set biomes; + +protected: + void cloneTo(Decoration *def) const; }; class DecoSimple : public Decoration { public: + ObjDef *clone() const; + virtual void resolveNodeNames(); virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling); @@ -91,12 +98,16 @@ class DecoSchematic : public Decoration { public: + ObjDef *clone() const; + DecoSchematic() = default; + virtual ~DecoSchematic(); virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling); Rotation rotation; Schematic *schematic = nullptr; + bool was_cloned = false; // see FIXME inside DecoSchemtic::clone() }; @@ -113,6 +124,8 @@ DecorationManager(IGameDef *gamedef); virtual ~DecorationManager() = default; + DecorationManager *clone() const; + const char *getObjectTitle() const { return "decoration"; @@ -133,4 +146,7 @@ } size_t placeAllDecos(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax); + +private: + DecorationManager() {}; }; diff -Nru minetest-5.2.0/src/mapgen/mg_ore.cpp minetest-5.3.0/src/mapgen/mg_ore.cpp --- minetest-5.2.0/src/mapgen/mg_ore.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mg_ore.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -1,7 +1,7 @@ /* Minetest -Copyright (C) 2014-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat +Copyright (C) 2015-2020 paramat +Copyright (C) 2014-2016 kwolekr, Ryan Kwolek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -72,6 +72,14 @@ } +OreManager *OreManager::clone() const +{ + auto mgr = new OreManager(); + ObjDefManager::cloneTo(mgr); + return mgr; +} + + /////////////////////////////////////////////////////////////////////////////// @@ -106,11 +114,39 @@ } +void Ore::cloneTo(Ore *def) const +{ + ObjDef::cloneTo(def); + NodeResolver::cloneTo(def); + def->c_ore = c_ore; + def->c_wherein = c_wherein; + def->clust_scarcity = clust_scarcity; + def->clust_num_ores = clust_num_ores; + def->clust_size = clust_size; + def->y_min = y_min; + def->y_max = y_max; + def->ore_param2 = ore_param2; + def->flags = flags; + def->nthresh = nthresh; + def->np = np; + def->noise = nullptr; // cannot be shared! so created on demand + def->biomes = biomes; +} + + /////////////////////////////////////////////////////////////////////////////// +ObjDef *OreScatter::clone() const +{ + auto def = new OreScatter(); + Ore::cloneTo(def); + return def; +} + + void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap) + v3s16 nmin, v3s16 nmax, biome_t *biomemap) { PcgRandom pr(blockseed); MapNode n_ore(c_ore, 0, ore_param2); @@ -134,7 +170,7 @@ if (biomemap && !biomes.empty()) { u32 index = sizex * (z0 - nmin.Z) + (x0 - nmin.X); - std::unordered_set::const_iterator it = biomes.find(biomemap[index]); + auto it = biomes.find(biomemap[index]); if (it == biomes.end()) continue; } @@ -158,8 +194,21 @@ /////////////////////////////////////////////////////////////////////////////// +ObjDef *OreSheet::clone() const +{ + auto def = new OreSheet(); + Ore::cloneTo(def); + + def->column_height_max = column_height_max; + def->column_height_min = column_height_min; + def->column_midpoint_factor = column_midpoint_factor; + + return def; +} + + void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap) + v3s16 nmin, v3s16 nmax, biome_t *biomemap) { PcgRandom pr(blockseed + 4234); MapNode n_ore(c_ore, 0, ore_param2); @@ -188,7 +237,7 @@ continue; if (biomemap && !biomes.empty()) { - std::unordered_set::const_iterator it = biomes.find(biomemap[index]); + auto it = biomes.find(biomemap[index]); if (it == biomes.end()) continue; } @@ -221,8 +270,22 @@ } +ObjDef *OrePuff::clone() const +{ + auto def = new OrePuff(); + Ore::cloneTo(def); + + def->np_puff_top = np_puff_top; + def->np_puff_bottom = np_puff_bottom; + def->noise_puff_top = nullptr; // cannot be shared, on-demand + def->noise_puff_bottom = nullptr; + + return def; +} + + void OrePuff::generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap) + v3s16 nmin, v3s16 nmax, biome_t *biomemap) { PcgRandom pr(blockseed + 4234); MapNode n_ore(c_ore, 0, ore_param2); @@ -249,7 +312,7 @@ continue; if (biomemap && !biomes.empty()) { - std::unordered_set::const_iterator it = biomes.find(biomemap[index]); + auto it = biomes.find(biomemap[index]); if (it == biomes.end()) continue; } @@ -294,8 +357,16 @@ /////////////////////////////////////////////////////////////////////////////// +ObjDef *OreBlob::clone() const +{ + auto def = new OreBlob(); + Ore::cloneTo(def); + return def; +} + + void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap) + v3s16 nmin, v3s16 nmax, biome_t *biomemap) { PcgRandom pr(blockseed + 2404); MapNode n_ore(c_ore, 0, ore_param2); @@ -317,7 +388,7 @@ if (biomemap && !biomes.empty()) { u32 bmapidx = sizex * (z0 - nmin.Z) + (x0 - nmin.X); - std::unordered_set::const_iterator it = biomes.find(biomemap[bmapidx]); + auto it = biomes.find(biomemap[bmapidx]); if (it == biomes.end()) continue; } @@ -366,8 +437,21 @@ } +ObjDef *OreVein::clone() const +{ + auto def = new OreVein(); + Ore::cloneTo(def); + + def->random_factor = random_factor; + def->noise2 = nullptr; // cannot be shared, on-demand + def->sizey_prev = sizey_prev; + + return def; +} + + void OreVein::generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap) + v3s16 nmin, v3s16 nmax, biome_t *biomemap) { PcgRandom pr(blockseed + 520); MapNode n_ore(c_ore, 0, ore_param2); @@ -401,7 +485,7 @@ if (biomemap && !biomes.empty()) { u32 bmapidx = sizex * (z - nmin.Z) + (x - nmin.X); - std::unordered_set::const_iterator it = biomes.find(biomemap[bmapidx]); + auto it = biomes.find(biomemap[bmapidx]); if (it == biomes.end()) continue; } @@ -434,8 +518,21 @@ } +ObjDef *OreStratum::clone() const +{ + auto def = new OreStratum(); + Ore::cloneTo(def); + + def->np_stratum_thickness = np_stratum_thickness; + def->noise_stratum_thickness = nullptr; // cannot be shared, on-demand + def->stratum_thickness = stratum_thickness; + + return def; +} + + void OreStratum::generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap) + v3s16 nmin, v3s16 nmax, biome_t *biomemap) { PcgRandom pr(blockseed + 4234); MapNode n_ore(c_ore, 0, ore_param2); @@ -463,7 +560,7 @@ for (int z = nmin.Z; z <= nmax.Z; z++) for (int x = nmin.X; x <= nmax.X; x++, index++) { if (biomemap && !biomes.empty()) { - std::unordered_set::const_iterator it = biomes.find(biomemap[index]); + auto it = biomes.find(biomemap[index]); if (it == biomes.end()) continue; } diff -Nru minetest-5.2.0/src/mapgen/mg_ore.h minetest-5.3.0/src/mapgen/mg_ore.h --- minetest-5.2.0/src/mapgen/mg_ore.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mg_ore.h 2020-07-09 21:13:21.000000000 +0000 @@ -1,7 +1,7 @@ /* Minetest -Copyright (C) 2014-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat +Copyright (C) 2015-2020 paramat +Copyright (C) 2014-2016 kwolekr, Ryan Kwolek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -25,6 +25,8 @@ #include "noise.h" #include "nodedef.h" +typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include + class Noise; class Mapgen; class MMVManip; @@ -64,7 +66,7 @@ float nthresh; // threshold for noise at which an ore is placed NoiseParams np; // noise for distribution of clusters (NULL for uniform scattering) Noise *noise = nullptr; - std::unordered_set biomes; + std::unordered_set biomes; Ore() = default;; virtual ~Ore(); @@ -73,33 +75,42 @@ size_t placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax); virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap) = 0; + v3s16 nmin, v3s16 nmax, biome_t *biomemap) = 0; + +protected: + void cloneTo(Ore *def) const; }; class OreScatter : public Ore { public: static const bool NEEDS_NOISE = false; + ObjDef *clone() const; + virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap); + v3s16 nmin, v3s16 nmax, biome_t *biomemap); }; class OreSheet : public Ore { public: static const bool NEEDS_NOISE = true; + ObjDef *clone() const; + u16 column_height_min; u16 column_height_max; float column_midpoint_factor; virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap); + v3s16 nmin, v3s16 nmax, biome_t *biomemap); }; class OrePuff : public Ore { public: static const bool NEEDS_NOISE = true; + ObjDef *clone() const; + NoiseParams np_puff_top; NoiseParams np_puff_bottom; Noise *noise_puff_top = nullptr; @@ -109,21 +120,25 @@ virtual ~OrePuff(); virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap); + v3s16 nmin, v3s16 nmax, biome_t *biomemap); }; class OreBlob : public Ore { public: static const bool NEEDS_NOISE = true; + ObjDef *clone() const; + virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap); + v3s16 nmin, v3s16 nmax, biome_t *biomemap); }; class OreVein : public Ore { public: static const bool NEEDS_NOISE = true; + ObjDef *clone() const; + float random_factor; Noise *noise2 = nullptr; int sizey_prev = 0; @@ -132,13 +147,15 @@ virtual ~OreVein(); virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap); + v3s16 nmin, v3s16 nmax, biome_t *biomemap); }; class OreStratum : public Ore { public: static const bool NEEDS_NOISE = false; + ObjDef *clone() const; + NoiseParams np_stratum_thickness; Noise *noise_stratum_thickness = nullptr; u16 stratum_thickness; @@ -147,7 +164,7 @@ virtual ~OreStratum(); virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, - v3s16 nmin, v3s16 nmax, u8 *biomemap); + v3s16 nmin, v3s16 nmax, biome_t *biomemap); }; class OreManager : public ObjDefManager { @@ -155,6 +172,8 @@ OreManager(IGameDef *gamedef); virtual ~OreManager() = default; + OreManager *clone() const; + const char *getObjectTitle() const { return "ore"; @@ -183,4 +202,7 @@ void clear(); size_t placeAllOres(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax); + +private: + OreManager() {}; }; diff -Nru minetest-5.2.0/src/mapgen/mg_schematic.cpp minetest-5.3.0/src/mapgen/mg_schematic.cpp --- minetest-5.2.0/src/mapgen/mg_schematic.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mg_schematic.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -43,12 +43,21 @@ } +SchematicManager *SchematicManager::clone() const +{ + auto mgr = new SchematicManager(); + assert(mgr); + ObjDefManager::cloneTo(mgr); + return mgr; +} + + void SchematicManager::clear() { EmergeManager *emerge = m_server->getEmergeManager(); // Remove all dangling references in Decorations - DecorationManager *decomgr = emerge->decomgr; + DecorationManager *decomgr = emerge->getWritableDecorationManager(); for (size_t i = 0; i != decomgr->getNumObjects(); i++) { Decoration *deco = (Decoration *)decomgr->getRaw(i); @@ -77,6 +86,25 @@ delete []slice_probs; } +ObjDef *Schematic::clone() const +{ + auto def = new Schematic(); + ObjDef::cloneTo(def); + NodeResolver::cloneTo(def); + + def->c_nodes = c_nodes; + def->flags = flags; + def->size = size; + FATAL_ERROR_IF(!schemdata, "Schematic can only be cloned after loading"); + u32 nodecount = size.X * size.Y * size.Z; + def->schemdata = new MapNode[nodecount]; + memcpy(def->schemdata, schemdata, sizeof(MapNode) * nodecount); + def->slice_probs = new u8[size.Y]; + memcpy(def->slice_probs, slice_probs, sizeof(u8) * size.Y); + + return def; +} + void Schematic::resolveNodeNames() { @@ -93,6 +121,7 @@ void Schematic::blitToVManip(MMVManip *vm, v3s16 p, Rotation rot, bool force_place) { + assert(schemdata && slice_probs); sanity_check(m_ndef != NULL); int xstride = 1; @@ -177,7 +206,7 @@ Rotation rot, bool force_place) { assert(vm != NULL); - assert(schemdata != NULL); + assert(schemdata && slice_probs); sanity_check(m_ndef != NULL); //// Determine effective rotation and effective schematic dimensions @@ -330,7 +359,7 @@ bool Schematic::serializeToMts(std::ostream *os, - const std::vector &names) + const std::vector &names) const { std::ostream &ss = *os; @@ -354,7 +383,8 @@ bool Schematic::serializeToLua(std::ostream *os, - const std::vector &names, bool use_comments, u32 indent_spaces) + const std::vector &names, bool use_comments, + u32 indent_spaces) const { std::ostream &ss = *os; diff -Nru minetest-5.2.0/src/mapgen/mg_schematic.h minetest-5.3.0/src/mapgen/mg_schematic.h --- minetest-5.2.0/src/mapgen/mg_schematic.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/mg_schematic.h 2020-07-09 21:13:21.000000000 +0000 @@ -95,6 +95,8 @@ Schematic(); virtual ~Schematic(); + ObjDef *clone() const; + virtual void resolveNodeNames(); bool loadSchematicFromFile(const std::string &filename, @@ -104,9 +106,10 @@ bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2); bool deserializeFromMts(std::istream *is, std::vector *names); - bool serializeToMts(std::ostream *os, const std::vector &names); + bool serializeToMts(std::ostream *os, + const std::vector &names) const; bool serializeToLua(std::ostream *os, const std::vector &names, - bool use_comments, u32 indent_spaces); + bool use_comments, u32 indent_spaces) const; void blitToVManip(MMVManip *vm, v3s16 p, Rotation rot, bool force_place); bool placeOnVManip(MMVManip *vm, v3s16 p, u32 flags, Rotation rot, bool force_place); @@ -128,6 +131,8 @@ SchematicManager(Server *server); virtual ~SchematicManager() = default; + SchematicManager *clone() const; + virtual void clear(); const char *getObjectTitle() const @@ -141,6 +146,8 @@ } private: + SchematicManager() {}; + Server *m_server; }; diff -Nru minetest-5.2.0/src/mapgen/treegen.cpp minetest-5.3.0/src/mapgen/treegen.cpp --- minetest-5.2.0/src/mapgen/treegen.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/treegen.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -25,7 +25,6 @@ #include "util/numeric.h" #include "map.h" #include "mapblock.h" -#include "serverenvironment.h" #include "nodedef.h" #include "treegen.h" #include "voxelalgorithms.h" @@ -44,6 +43,12 @@ MapNode treenode(ndef->getId("mapgen_tree")); MapNode leavesnode(ndef->getId("mapgen_leaves")); MapNode applenode(ndef->getId("mapgen_apple")); + if (treenode == CONTENT_IGNORE) + errorstream << "Treegen: Mapgen alias 'mapgen_tree' is invalid!" << std::endl; + if (leavesnode == CONTENT_IGNORE) + errorstream << "Treegen: Mapgen alias 'mapgen_leaves' is invalid!" << std::endl; + if (applenode == CONTENT_IGNORE) + errorstream << "Treegen: Mapgen alias 'mapgen_apple' is invalid!" << std::endl; PseudoRandom pr(seed); s16 trunk_h = pr.range(4, 5); @@ -114,10 +119,9 @@ // L-System tree LUA spawner -treegen::error spawn_ltree(ServerEnvironment *env, v3s16 p0, +treegen::error spawn_ltree(ServerMap *map, v3s16 p0, const NodeDefManager *ndef, const TreeDef &tree_definition) { - ServerMap *map = &env->getServerMap(); std::map modified_blocks; MMVManip vmanip(map); v3s16 tree_blockp = getNodeBlockPos(p0); @@ -144,7 +148,6 @@ treegen::error make_ltree(MMVManip &vmanip, v3s16 p0, const NodeDefManager *ndef, TreeDef tree_definition) { - MapNode dirtnode(ndef->getId("mapgen_dirt")); s32 seed; if (tree_definition.explicit_seed) seed = tree_definition.seed + 14002; @@ -222,43 +225,43 @@ axiom = temp; } - //make sure tree is not floating in the air + // Add trunk nodes below a wide trunk to avoid gaps when tree is on sloping ground if (tree_definition.trunk_type == "double") { - tree_node_placement( + tree_trunk_placement( vmanip, v3f(position.X + 1, position.Y - 1, position.Z), - dirtnode + tree_definition ); - tree_node_placement( + tree_trunk_placement( vmanip, v3f(position.X, position.Y - 1, position.Z + 1), - dirtnode + tree_definition ); - tree_node_placement( + tree_trunk_placement( vmanip, v3f(position.X + 1, position.Y - 1, position.Z + 1), - dirtnode + tree_definition ); } else if (tree_definition.trunk_type == "crossed") { - tree_node_placement( + tree_trunk_placement( vmanip, v3f(position.X + 1, position.Y - 1, position.Z), - dirtnode + tree_definition ); - tree_node_placement( + tree_trunk_placement( vmanip, v3f(position.X - 1, position.Y - 1, position.Z), - dirtnode + tree_definition ); - tree_node_placement( + tree_trunk_placement( vmanip, v3f(position.X, position.Y - 1, position.Z + 1), - dirtnode + tree_definition ); - tree_node_placement( + tree_trunk_placement( vmanip, v3f(position.X, position.Y - 1, position.Z - 1), - dirtnode + tree_definition ); } @@ -365,7 +368,7 @@ !tree_definition.thin_branches)) { tree_trunk_placement( vmanip, - v3f(position.X +1 , position.Y, position.Z), + v3f(position.X + 1, position.Y, position.Z), tree_definition ); tree_trunk_placement( @@ -662,6 +665,10 @@ c_tree = ndef->getId("mapgen_tree"); if (c_leaves == CONTENT_IGNORE) c_leaves = ndef->getId("mapgen_leaves"); + if (c_tree == CONTENT_IGNORE) + errorstream << "Treegen: Mapgen alias 'mapgen_jungletree' is invalid!" << std::endl; + if (c_leaves == CONTENT_IGNORE) + errorstream << "Treegen: Mapgen alias 'mapgen_jungleleaves' is invalid!" << std::endl; MapNode treenode(c_tree); MapNode leavesnode(c_leaves); @@ -765,6 +772,10 @@ c_leaves = ndef->getId("mapgen_leaves"); if (c_snow == CONTENT_IGNORE) c_snow = CONTENT_AIR; + if (c_tree == CONTENT_IGNORE) + errorstream << "Treegen: Mapgen alias 'mapgen_pine_tree' is invalid!" << std::endl; + if (c_leaves == CONTENT_IGNORE) + errorstream << "Treegen: Mapgen alias 'mapgen_pine_needles' is invalid!" << std::endl; MapNode treenode(c_tree); MapNode leavesnode(c_leaves); diff -Nru minetest-5.2.0/src/mapgen/treegen.h minetest-5.3.0/src/mapgen/treegen.h --- minetest-5.2.0/src/mapgen/treegen.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapgen/treegen.h 2020-07-09 21:13:21.000000000 +0000 @@ -26,8 +26,7 @@ class MMVManip; class NodeDefManager; -class ServerEnvironment; - +class ServerMap; namespace treegen { @@ -73,7 +72,7 @@ treegen::error make_ltree(MMVManip &vmanip, v3s16 p0, const NodeDefManager *ndef, TreeDef tree_definition); // Spawn L-systems tree from LUA - treegen::error spawn_ltree (ServerEnvironment *env, v3s16 p0, + treegen::error spawn_ltree (ServerMap *map, v3s16 p0, const NodeDefManager *ndef, const TreeDef &tree_definition); // L-System tree gen helper functions diff -Nru minetest-5.2.0/src/map.h minetest-5.3.0/src/map.h --- minetest-5.2.0/src/map.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/map.h 2020-07-09 21:13:21.000000000 +0000 @@ -31,6 +31,7 @@ #include "voxel.h" #include "modifiedstate.h" #include "util/container.h" +#include "util/metricsbackend.h" #include "nodetimer.h" #include "map_settings_manager.h" #include "debug.h" @@ -45,6 +46,7 @@ class IGameDef; class IRollbackManager; class EmergeManager; +class MetricsBackend; class ServerEnvironment; struct BlockMakeData; @@ -324,7 +326,7 @@ /* savedir: directory to which map data should be saved */ - ServerMap(const std::string &savedir, IGameDef *gamedef, EmergeManager *emerge); + ServerMap(const std::string &savedir, IGameDef *gamedef, EmergeManager *emerge, MetricsBackend *mb); ~ServerMap(); s32 mapType() const @@ -448,6 +450,8 @@ bool m_map_metadata_changed = true; MapDatabase *dbase = nullptr; MapDatabase *dbase_ro = nullptr; + + MetricCounterPtr m_save_time_counter; }; diff -Nru minetest-5.2.0/src/mapnode.cpp minetest-5.3.0/src/mapnode.cpp --- minetest-5.2.0/src/mapnode.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapnode.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -584,7 +584,7 @@ if( f.liquid_type == LIQUID_FLOWING || f.param_type_2 == CPT2_FLOWINGLIQUID) return LIQUID_LEVEL_MAX; if(f.leveled || f.param_type_2 == CPT2_LEVELED) - return LEVELED_MAX; + return f.leveled_max; return 0; } @@ -603,14 +603,15 @@ if (level) return level; } - if (f.leveled > LEVELED_MAX) - return LEVELED_MAX; + // Return static value from nodedef if param2 isn't used for level + if (f.leveled > f.leveled_max) + return f.leveled_max; return f.leveled; } -u8 MapNode::setLevel(const NodeDefManager *nodemgr, s8 level) +s8 MapNode::setLevel(const NodeDefManager *nodemgr, s16 level) { - u8 rest = 0; + s8 rest = 0; const ContentFeatures &f = nodemgr->get(*this); if (f.param_type_2 == CPT2_FLOWINGLIQUID || f.liquid_type == LIQUID_FLOWING @@ -621,28 +622,28 @@ } if (level >= LIQUID_LEVEL_SOURCE) { rest = level - LIQUID_LEVEL_SOURCE; - setContent(nodemgr->getId(f.liquid_alternative_source)); + setContent(f.liquid_alternative_source_id); setParam2(0); } else { - setContent(nodemgr->getId(f.liquid_alternative_flowing)); + setContent(f.liquid_alternative_flowing_id); setParam2((level & LIQUID_LEVEL_MASK) | (getParam2() & ~LIQUID_LEVEL_MASK)); } } else if (f.param_type_2 == CPT2_LEVELED) { if (level < 0) { // zero means default for a leveled nodebox rest = level; level = 0; - } else if (level > LEVELED_MAX) { - rest = level - LEVELED_MAX; - level = LEVELED_MAX; + } else if (level > f.leveled_max) { + rest = level - f.leveled_max; + level = f.leveled_max; } setParam2((level & LEVELED_MASK) | (getParam2() & ~LEVELED_MASK)); } return rest; } -u8 MapNode::addLevel(const NodeDefManager *nodemgr, s8 add) +s8 MapNode::addLevel(const NodeDefManager *nodemgr, s16 add) { - s8 level = getLevel(nodemgr); + s16 level = getLevel(nodemgr); level += add; return setLevel(nodemgr, level); } diff -Nru minetest-5.2.0/src/mapnode.h minetest-5.3.0/src/mapnode.h --- minetest-5.2.0/src/mapnode.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/mapnode.h 2020-07-09 21:13:21.000000000 +0000 @@ -268,12 +268,12 @@ std::vector *boxes, u8 neighbors = 0) const; /* - Liquid helpers + Liquid/leveled helpers */ u8 getMaxLevel(const NodeDefManager *nodemgr) const; u8 getLevel(const NodeDefManager *nodemgr) const; - u8 setLevel(const NodeDefManager *nodemgr, s8 level = 1); - u8 addLevel(const NodeDefManager *nodemgr, s8 add = 1); + s8 setLevel(const NodeDefManager *nodemgr, s16 level = 1); + s8 addLevel(const NodeDefManager *nodemgr, s16 add = 1); /* Serialization functions diff -Nru minetest-5.2.0/src/map_settings_manager.cpp minetest-5.3.0/src/map_settings_manager.cpp --- minetest-5.2.0/src/map_settings_manager.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/map_settings_manager.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -32,7 +32,6 @@ m_user_settings(user_settings) { assert(m_user_settings != NULL); - Mapgen::setDefaultSettings(m_map_settings); } @@ -180,6 +179,16 @@ params->mgtype = mgtype; + // Load the mapgen param defaults + /* FIXME: Why is it done like this? MapgenParams should just + * set the defaults in its constructor instead. */ + { + Settings default_settings; + Mapgen::setDefaultSettings(&default_settings); + params->MapgenParams::readParams(&default_settings); + params->readParams(&default_settings); + } + // Load the rest of the mapgen params from our active settings params->MapgenParams::readParams(m_user_settings); params->MapgenParams::readParams(m_map_settings); diff -Nru minetest-5.2.0/src/network/clientopcodes.cpp minetest-5.3.0/src/network/clientopcodes.cpp --- minetest-5.2.0/src/network/clientopcodes.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/network/clientopcodes.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -68,7 +68,7 @@ { "TOCLIENT_TIME_OF_DAY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_TimeOfDay }, // 0x29 { "TOCLIENT_CSM_RESTRICTION_FLAGS", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_CSMRestrictionFlags }, // 0x2A { "TOCLIENT_PLAYER_SPEED", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_PlayerSpeed }, // 0x2B - null_command_handler, + { "TOCLIENT_MEDIA_PUSH", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_MediaPush }, // 0x2C null_command_handler, null_command_handler, { "TOCLIENT_CHAT_MESSAGE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ChatMessage }, // 0x2F @@ -126,6 +126,16 @@ const static ServerCommandFactory null_command_factory = { "TOSERVER_NULL", 0, false }; +/* + Channels used for Client -> Server communication + 2: Notifications back to the server (e.g. GOTBLOCKS) + 1: Init and Authentication + 0: everything else + + Packet order is only guaranteed inside a channel, so packets that operate on + the same objects are *required* to be in the same channel. +*/ + const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] = { null_command_factory, // 0x00 @@ -143,7 +153,7 @@ null_command_factory, // 0x0c null_command_factory, // 0x0d null_command_factory, // 0x0e - null_command_factory, // 0x0F + null_command_factory, // 0x0f null_command_factory, // 0x10 { "TOSERVER_INIT2", 1, true }, // 0x11 null_command_factory, // 0x12 @@ -186,7 +196,7 @@ { "TOSERVER_PLAYERITEM", 0, true }, // 0x37 { "TOSERVER_RESPAWN", 0, true }, // 0x38 { "TOSERVER_INTERACT", 0, true }, // 0x39 - { "TOSERVER_REMOVED_SOUNDS", 1, true }, // 0x3a + { "TOSERVER_REMOVED_SOUNDS", 2, true }, // 0x3a { "TOSERVER_NODEMETA_FIELDS", 0, true }, // 0x3b { "TOSERVER_INVENTORY_FIELDS", 0, true }, // 0x3c null_command_factory, // 0x3d @@ -194,8 +204,8 @@ null_command_factory, // 0x3f { "TOSERVER_REQUEST_MEDIA", 1, true }, // 0x40 null_command_factory, // 0x41 - { "TOSERVER_BREATH", 0, true }, // 0x42 old TOSERVER_BREATH. Ignored by servers - { "TOSERVER_CLIENT_READY", 0, true }, // 0x43 + null_command_factory, // 0x42 + { "TOSERVER_CLIENT_READY", 1, true }, // 0x43 null_command_factory, // 0x44 null_command_factory, // 0x45 null_command_factory, // 0x46 diff -Nru minetest-5.2.0/src/network/clientpackethandler.cpp minetest-5.3.0/src/network/clientpackethandler.cpp --- minetest-5.2.0/src/network/clientpackethandler.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/network/clientpackethandler.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -20,6 +20,7 @@ #include "client/client.h" #include "util/base64.h" +#include "client/camera.h" #include "chatmessage.h" #include "client/clientmedia.h" #include "log.h" @@ -38,6 +39,7 @@ #include "script/scripting_client.h" #include "util/serialize.h" #include "util/srp.h" +#include "util/sha1.h" #include "tileanimation.h" #include "gettext.h" #include "skyparams.h" @@ -386,10 +388,10 @@ m_env.setTimeOfDaySpeed(time_speed); m_time_of_day_set = true; - u32 dr = m_env.getDayNightRatio(); - infostream << "Client: time_of_day=" << time_of_day - << " time_speed=" << time_speed - << " dr=" << dr << std::endl; + //u32 dr = m_env.getDayNightRatio(); + //infostream << "Client: time_of_day=" << time_of_day + // << " time_speed=" << time_speed + // << " dr=" << dr << std::endl; } void Client::handleCommand_ChatMessage(NetworkPacket *pkt) @@ -530,11 +532,21 @@ void Client::handleCommand_Fov(NetworkPacket *pkt) { f32 fov; - bool is_multiplier; + bool is_multiplier = false; + f32 transition_time = 0.0f; + *pkt >> fov >> is_multiplier; + // Wrap transition_time extraction within a + // try-catch to preserve backwards compat + try { + *pkt >> transition_time; + } catch (PacketError &e) {}; + LocalPlayer *player = m_env.getLocalPlayer(); - player->setFov({ fov, is_multiplier }); + assert(player); + player->setFov({ fov, is_multiplier, transition_time }); + m_camera->notifyFovChange(); } void Client::handleCommand_HP(NetworkPacket *pkt) @@ -947,114 +959,66 @@ std::string datastring(pkt->getString(0), pkt->getSize()); std::istringstream is(datastring, std::ios_base::binary); - v3f pos = readV3F32(is); - v3f vel = readV3F32(is); - v3f acc = readV3F32(is); - float expirationtime = readF32(is); - float size = readF32(is); - bool collisiondetection = readU8(is); - std::string texture = deSerializeLongString(is); - - bool vertical = false; - bool collision_removal = false; - TileAnimationParams animation; - animation.type = TAT_NONE; - u8 glow = 0; - bool object_collision = false; - try { - vertical = readU8(is); - collision_removal = readU8(is); - animation.deSerialize(is, m_proto_ver); - glow = readU8(is); - object_collision = readU8(is); - } catch (...) {} + ParticleParameters p; + p.deSerialize(is, m_proto_ver); ClientEvent *event = new ClientEvent(); - event->type = CE_SPAWN_PARTICLE; - event->spawn_particle.pos = new v3f (pos); - event->spawn_particle.vel = new v3f (vel); - event->spawn_particle.acc = new v3f (acc); - event->spawn_particle.expirationtime = expirationtime; - event->spawn_particle.size = size; - event->spawn_particle.collisiondetection = collisiondetection; - event->spawn_particle.collision_removal = collision_removal; - event->spawn_particle.object_collision = object_collision; - event->spawn_particle.vertical = vertical; - event->spawn_particle.texture = new std::string(texture); - event->spawn_particle.animation = animation; - event->spawn_particle.glow = glow; + event->type = CE_SPAWN_PARTICLE; + event->spawn_particle = new ParticleParameters(p); m_client_event_queue.push(event); } void Client::handleCommand_AddParticleSpawner(NetworkPacket* pkt) { - u16 amount; - float spawntime; - v3f minpos; - v3f maxpos; - v3f minvel; - v3f maxvel; - v3f minacc; - v3f maxacc; - float minexptime; - float maxexptime; - float minsize; - float maxsize; - bool collisiondetection; - u32 server_id; - - *pkt >> amount >> spawntime >> minpos >> maxpos >> minvel >> maxvel - >> minacc >> maxacc >> minexptime >> maxexptime >> minsize - >> maxsize >> collisiondetection; - - std::string texture = pkt->readLongString(); - - *pkt >> server_id; + std::string datastring(pkt->getString(0), pkt->getSize()); + std::istringstream is(datastring, std::ios_base::binary); - bool vertical = false; - bool collision_removal = false; - u16 attached_id = 0; - TileAnimationParams animation; - animation.type = TAT_NONE; - u8 glow = 0; - bool object_collision = false; - try { - *pkt >> vertical; - *pkt >> collision_removal; - *pkt >> attached_id; + ParticleSpawnerParameters p; + u32 server_id; + u16 attached_id = 0; - // This is horrible but required (why are there two ways to deserialize pkts?) - std::string datastring(pkt->getRemainingString(), pkt->getRemainingBytes()); - std::istringstream is(datastring, std::ios_base::binary); - animation.deSerialize(is, m_proto_ver); - glow = readU8(is); - object_collision = readU8(is); - } catch (...) {} + p.amount = readU16(is); + p.time = readF32(is); + p.minpos = readV3F32(is); + p.maxpos = readV3F32(is); + p.minvel = readV3F32(is); + p.maxvel = readV3F32(is); + p.minacc = readV3F32(is); + p.maxacc = readV3F32(is); + p.minexptime = readF32(is); + p.maxexptime = readF32(is); + p.minsize = readF32(is); + p.maxsize = readF32(is); + p.collisiondetection = readU8(is); + p.texture = deSerializeLongString(is); + + server_id = readU32(is); + + p.vertical = readU8(is); + p.collision_removal = readU8(is); + + attached_id = readU16(is); + + p.animation.deSerialize(is, m_proto_ver); + p.glow = readU8(is); + p.object_collision = readU8(is); + + // This is kinda awful + do { + u16 tmp_param0 = readU16(is); + if (is.eof()) + break; + p.node.param0 = tmp_param0; + p.node.param2 = readU8(is); + p.node_tile = readU8(is); + } while (0); auto event = new ClientEvent(); - event->type = CE_ADD_PARTICLESPAWNER; - event->add_particlespawner.amount = amount; - event->add_particlespawner.spawntime = spawntime; - event->add_particlespawner.minpos = new v3f (minpos); - event->add_particlespawner.maxpos = new v3f (maxpos); - event->add_particlespawner.minvel = new v3f (minvel); - event->add_particlespawner.maxvel = new v3f (maxvel); - event->add_particlespawner.minacc = new v3f (minacc); - event->add_particlespawner.maxacc = new v3f (maxacc); - event->add_particlespawner.minexptime = minexptime; - event->add_particlespawner.maxexptime = maxexptime; - event->add_particlespawner.minsize = minsize; - event->add_particlespawner.maxsize = maxsize; - event->add_particlespawner.collisiondetection = collisiondetection; - event->add_particlespawner.collision_removal = collision_removal; - event->add_particlespawner.object_collision = object_collision; - event->add_particlespawner.attached_id = attached_id; - event->add_particlespawner.vertical = vertical; - event->add_particlespawner.texture = new std::string(texture); - event->add_particlespawner.id = server_id; - event->add_particlespawner.animation = animation; - event->add_particlespawner.glow = glow; + event->type = CE_ADD_PARTICLESPAWNER; + event->add_particlespawner.p = new ParticleSpawnerParameters(p); + event->add_particlespawner.attached_id = attached_id; + event->add_particlespawner.id = server_id; m_client_event_queue.push(event); } @@ -1091,22 +1055,16 @@ v3f world_pos; v2s32 size; s16 z_index = 0; + std::string text2; *pkt >> server_id >> type >> pos >> name >> scale >> text >> number >> item >> dir >> align >> offset; try { *pkt >> world_pos; - } - catch(SerializationError &e) {}; - - try { *pkt >> size; - } catch(SerializationError &e) {}; - - try { *pkt >> z_index; - } - catch(PacketError &e) {} + *pkt >> text2; + } catch(PacketError &e) {}; ClientEvent *event = new ClientEvent(); event->type = CE_HUDADD; @@ -1124,6 +1082,7 @@ event->hudadd.world_pos = new v3f(world_pos); event->hudadd.size = new v2s32(size); event->hudadd.z_index = z_index; + event->hudadd.text2 = new std::string(text2); m_client_event_queue.push(event); } @@ -1160,7 +1119,7 @@ if (stat == HUD_STAT_POS || stat == HUD_STAT_SCALE || stat == HUD_STAT_ALIGN || stat == HUD_STAT_OFFSET) *pkt >> v2fdata; - else if (stat == HUD_STAT_NAME || stat == HUD_STAT_TEXT) + else if (stat == HUD_STAT_NAME || stat == HUD_STAT_TEXT || stat == HUD_STAT_TEXT2) *pkt >> sdata; else if (stat == HUD_STAT_WORLD_POS) *pkt >> v3fdata; @@ -1265,9 +1224,9 @@ // Fix for "regular" skies, as color isn't kept: if (skybox.type == "regular") { skybox.sky_color = sky_defaults.getSkyColorDefaults(); - skybox.tint_type = "default"; - skybox.moon_tint = video::SColor(255, 255, 255, 255); - skybox.sun_tint = video::SColor(255, 255, 255, 255); + skybox.fog_tint_type = "default"; + skybox.fog_moon_tint = video::SColor(255, 255, 255, 255); + skybox.fog_sun_tint = video::SColor(255, 255, 255, 255); } else { sun.visible = false; @@ -1302,7 +1261,7 @@ std::string texture; *pkt >> skybox.bgcolor >> skybox.type >> skybox.clouds >> - skybox.sun_tint >> skybox.moon_tint >> skybox.tint_type; + skybox.fog_sun_tint >> skybox.fog_moon_tint >> skybox.fog_tint_type; if (skybox.type == "skybox") { *pkt >> texture_count; @@ -1513,6 +1472,51 @@ player->addVelocity(added_vel); } +void Client::handleCommand_MediaPush(NetworkPacket *pkt) +{ + std::string raw_hash, filename, filedata; + bool cached; + + *pkt >> raw_hash >> filename >> cached; + filedata = pkt->readLongString(); + + if (raw_hash.size() != 20 || filedata.empty() || filename.empty() || + !string_allowed(filename, TEXTURENAME_ALLOWED_CHARS)) { + throw PacketError("Illegal filename, data or hash"); + } + + verbosestream << "Server pushes media file \"" << filename << "\" with " + << filedata.size() << " bytes of data (cached=" << cached + << ")" << std::endl; + + if (m_media_pushed_files.count(filename) != 0) { + // Silently ignore for synchronization purposes + return; + } + + // Compute and check checksum of data + std::string computed_hash; + { + SHA1 ctx; + ctx.addBytes(filedata.c_str(), filedata.size()); + unsigned char *buf = ctx.getDigest(); + computed_hash.assign((char*) buf, 20); + free(buf); + } + if (raw_hash != computed_hash) { + verbosestream << "Hash of file data mismatches, ignoring." << std::endl; + return; + } + + // Actually load media + loadMedia(filedata, filename, true); + m_media_pushed_files.insert(filename); + + // Cache file for the next time when this client joins the same server + if (cached) + clientMediaUpdateCache(raw_hash, filedata); +} + /* * Mod channels */ diff -Nru minetest-5.2.0/src/network/connection.cpp minetest-5.3.0/src/network/connection.cpp --- minetest-5.2.0/src/network/connection.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/network/connection.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -924,7 +924,7 @@ Peer(a_address,a_id,connection) { for (Channel &channel : channels) - channel.setWindowSize(g_settings->getU16("max_packets_per_iteration")); + channel.setWindowSize(START_RELIABLE_WINDOW_SIZE); } bool UDPPeer::getAddress(MTProtocols type,Address& toset) @@ -975,22 +975,29 @@ if (m_pending_disconnect) return; - if ( channels[c.channelnum].queued_commands.empty() && + Channel &chan = channels[c.channelnum]; + + if (chan.queued_commands.empty() && /* don't queue more packets then window size */ - (channels[c.channelnum].queued_reliables.size() - < (channels[c.channelnum].getWindowSize()/2))) { + (chan.queued_reliables.size() < 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)) { - channels[c.channelnum].queued_commands.push_back(c); + chan.queued_commands.push_back(c); } } 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); + } } } @@ -1001,6 +1008,8 @@ if (m_pending_disconnect) return true; + Channel &chan = channels[c.channelnum]; + u32 chunksize_max = max_packet_size - BASE_HEADER_SIZE - RELIABLE_HEADER_SIZE; @@ -1008,13 +1017,13 @@ sanity_check(c.data.getSize() < MAX_RELIABLE_WINDOW_SIZE*512); std::list> originals; - u16 split_sequence_number = channels[c.channelnum].readNextSplitSeqNum(); + u16 split_sequence_number = chan.readNextSplitSeqNum(); if (c.raw) { originals.emplace_back(c.data); } else { makeAutoSplitPacket(c.data, chunksize_max,split_sequence_number, &originals); - channels[c.channelnum].setNextSplitSeqNum(split_sequence_number); + chan.setNextSplitSeqNum(split_sequence_number); } bool have_sequence_number = true; @@ -1023,7 +1032,7 @@ volatile u16 initial_sequence_number = 0; for (SharedBuffer &original : originals) { - u16 seqnum = channels[c.channelnum].getOutgoingSequenceNumber(have_sequence_number); + u16 seqnum = chan.getOutgoingSequenceNumber(have_sequence_number); /* oops, we don't have enough sequence numbers to send this packet */ if (!have_sequence_number) @@ -1055,10 +1064,10 @@ // << " channel: " << (c.channelnum&0xFF) // << " seqnum: " << readU16(&p.data[BASE_HEADER_SIZE+1]) // << std::endl) - channels[c.channelnum].queued_reliables.push(p); + chan.queued_reliables.push(p); pcount++; } - sanity_check(channels[c.channelnum].queued_reliables.size() < 0xFFFF); + sanity_check(chan.queued_reliables.size() < 0xFFFF); return true; } @@ -1073,7 +1082,7 @@ toadd.pop(); bool successfully_put_back_sequence_number - = channels[c.channelnum].putBackSequenceNumber( + = chan.putBackSequenceNumber( (initial_sequence_number+toadd.size() % (SEQNUM_MAX+1))); FATAL_ERROR_IF(!successfully_put_back_sequence_number, "error"); @@ -1081,7 +1090,7 @@ // DO NOT REMOVE n_queued! It avoids a deadlock of async locked // 'log_message_mutex' and 'm_list_mutex'. - u32 n_queued = channels[c.channelnum].outgoing_reliables_sent.size(); + u32 n_queued = chan.outgoing_reliables_sent.size(); LOG(dout_con<getDesc() << " Windowsize exceeded on reliable sending " @@ -1164,7 +1173,9 @@ m_bc_peerhandler(peerhandler) { - m_udpSocket.setTimeoutMs(5); + /* 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); diff -Nru minetest-5.2.0/src/network/connection.h minetest-5.3.0/src/network/connection.h --- minetest-5.2.0/src/network/connection.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/network/connection.h 2020-07-09 21:13:21.000000000 +0000 @@ -141,7 +141,6 @@ === NOTES === A packet is sent through a channel to a peer with a basic header: -TODO: Should we have a receiver_peer_id also? Header (7 bytes): [0] u32 protocol_id [4] session_t sender_peer_id @@ -152,8 +151,7 @@ value 1 (PEER_ID_SERVER) is reserved for server these constants are defined in constants.h channel: - The lower the number, the higher the priority is. - Only channels 0, 1 and 2 exist. + Channel numbers have no intrinsic meaning. Currently only 0, 1, 2 exist. */ #define BASE_HEADER_SIZE 7 #define CHANNEL_COUNT 3 @@ -386,12 +384,14 @@ } }; -/* maximum window size to use, 0xFFFF is theoretical maximum don't think about +/* maximum window size to use, 0xFFFF is theoretical maximum. don't think about * touching it, the less you're away from it the more likely data corruption * will occur */ #define MAX_RELIABLE_WINDOW_SIZE 0x8000 - /* starting value for window size */ +/* starting value for window size */ +#define START_RELIABLE_WINDOW_SIZE 0x400 +/* minimum value for window size */ #define MIN_RELIABLE_WINDOW_SIZE 0x40 class Channel @@ -555,15 +555,15 @@ bool isTimedOut(float timeout); - unsigned int m_increment_packets_remaining = 9; - unsigned int m_increment_bytes_remaining = 0; + 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, const BufferedPacket &toadd, bool reliable) { - fprintf(stderr,"Peer: addSplitPacket called, this is supposed to be never called!\n"); + errorstream << "Peer::addSplitPacket called," + << " this is supposed to be never called!" << std::endl; return SharedBuffer(0); }; @@ -612,16 +612,16 @@ struct rttstats { float jitter_min = FLT_MAX; float jitter_max = 0.0f; - float jitter_avg = -2.0f; + float jitter_avg = -1.0f; float min_rtt = FLT_MAX; float max_rtt = 0.0f; - float avg_rtt = -2.0f; + float avg_rtt = -1.0f; rttstats() = default; }; rttstats m_rtt; - float m_last_rtt = -2.0f; + float m_last_rtt = -1.0f; // current usage count unsigned int m_usage = 0; diff -Nru minetest-5.2.0/src/network/connectionthreads.cpp minetest-5.3.0/src/network/connectionthreads.cpp --- minetest-5.2.0/src/network/connectionthreads.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/network/connectionthreads.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -73,6 +73,7 @@ m_timeout(timeout), m_max_data_packets_per_iteration(g_settings->getU16("max_packets_per_iteration")) { + SANITY_CHECK(m_max_data_packets_per_iteration > 1); } void *ConnectionSendThread::run() @@ -107,8 +108,13 @@ curtime = porting::getTimeMs(); float dtime = CALC_DTIME(lasttime, curtime); - /* first do all the reliable stuff */ + /* first resend timed-out packets */ runTimeouts(dtime); + if (m_iteration_packets_avaialble == 0) { + LOG(warningstream << m_connection->getDesc() + << " Packet quota used up after re-sending packets, " + << "max=" << m_max_data_packets_per_iteration << std::endl); + } /* translate commands to packets */ ConnectionCommand c = m_connection->m_command_queue.pop_frontNoEx(0); @@ -121,7 +127,7 @@ c = m_connection->m_command_queue.pop_frontNoEx(0); } - /* send non reliable packets */ + /* send queued packets */ sendPackets(dtime); END_DEBUG_EXCEPTION_HANDLER @@ -193,7 +199,6 @@ infostream << m_connection->getDesc() << "RunTimeouts(): Peer " << peer->id << " has timed out." - << " (source=peer->timeout_counter)" << std::endl; // Add peer to the list timeouted_peers.push_back(peer->id); @@ -286,7 +291,7 @@ // Remove timed out peers for (u16 timeouted_peer : timeouted_peers) { - LOG(derr_con << m_connection->getDesc() + LOG(dout_con << m_connection->getDesc() << "RunTimeouts(): Removing peer " << timeouted_peer << std::endl); m_connection->deletePeer(timeouted_peer, true); } @@ -331,11 +336,9 @@ { PeerHelper peer = m_connection->getPeerNoEx(peer_id); if (!peer) { - LOG(dout_con << m_connection->getDesc() - << " INFO: dropped packet for non existent peer_id: " - << peer_id << std::endl); - FATAL_ERROR_IF(!reliable, - "Trying to send raw packet reliable but no peer found!"); + LOG(errorstream << m_connection->getDesc() + << " dropped " << (reliable ? "reliable " : "") + << "packet for non existent peer_id: " << peer_id << std::endl); return false; } Channel *channel = &(dynamic_cast(&peer)->channels[channelnum]); @@ -644,6 +647,9 @@ std::list pendingDisconnect; std::map pending_unreliable; + const unsigned int peer_packet_quota = m_iteration_packets_avaialble + / MYMAX(peerIds.size(), 1); + for (session_t peerId : peerIds) { PeerHelper peer = m_connection->getPeerNoEx(peerId); //peer may have been removed @@ -653,8 +659,7 @@ << std::endl); continue; } - peer->m_increment_packets_remaining = - m_iteration_packets_avaialble / m_connection->m_peers.size(); + peer->m_increment_packets_remaining = peer_packet_quota; UDPPeer *udpPeer = dynamic_cast(&peer); @@ -751,23 +756,30 @@ } /* send acks immediately */ - if (packet.ack) { + if (packet.ack || peer->m_increment_packets_remaining > 0 || stopRequested()) { rawSendAsPacket(packet.peer_id, packet.channelnum, packet.data, packet.reliable); - peer->m_increment_packets_remaining = - MYMIN(0, peer->m_increment_packets_remaining--); - } else if ( - (peer->m_increment_packets_remaining > 0) || - (stopRequested())) { - rawSendAsPacket(packet.peer_id, packet.channelnum, - packet.data, packet.reliable); - peer->m_increment_packets_remaining--; + if (peer->m_increment_packets_remaining > 0) + peer->m_increment_packets_remaining--; } else { m_outgoing_queue.push(packet); pending_unreliable[packet.peer_id] = true; } } + if (peer_packet_quota > 0) { + for (session_t peerId : peerIds) { + PeerHelper peer = m_connection->getPeerNoEx(peerId); + if (!peer) + continue; + if (peer->m_increment_packets_remaining == 0) { + LOG(warningstream << m_connection->getDesc() + << " Packet quota used up for peer_id=" << peerId + << ", was " << peer_packet_quota << " pkts" << std::endl); + } + } + } + for (session_t peerId : pendingDisconnect) { if (!pending_unreliable[peerId]) { m_connection->deletePeer(peerId, false); @@ -798,6 +810,14 @@ ThreadIdentifier); PROFILE(ThreadIdentifier << "ConnectionReceive: [" << m_connection->getDesc() << "]"); + // use IPv6 minimum allowed MTU as receive buffer size as this is + // theoretical reliable upper boundary of a udp packet for all IPv6 enabled + // infrastructure + const unsigned int packet_maxsize = 1500; + SharedBuffer packetdata(packet_maxsize); + + bool packet_queued = true; + #ifdef DEBUG_CONNECTION_KBPS u64 curtime = porting::getTimeMs(); u64 lasttime = curtime; @@ -816,7 +836,7 @@ #endif /* receive packets */ - receive(); + receive(packetdata, packet_queued); #ifdef DEBUG_CONNECTION_KBPS debug_print_timer += dtime; @@ -878,157 +898,142 @@ } // Receive packets from the network and buffers and create ConnectionEvents -void ConnectionReceiveThread::receive() +void ConnectionReceiveThread::receive(SharedBuffer &packetdata, + bool &packet_queued) { - // use IPv6 minimum allowed MTU as receive buffer size as this is - // theoretical reliable upper boundary of a udp packet for all IPv6 enabled - // infrastructure - unsigned int packet_maxsize = 1500; - SharedBuffer packetdata(packet_maxsize); - - bool packet_queued = true; - - unsigned int loop_count = 0; - - /* first of all read packets from socket */ - /* check for incoming data available */ - while ((loop_count < 10) && - (m_connection->m_udpSocket.WaitData(50))) { - loop_count++; - try { - if (packet_queued) { - bool data_left = true; - session_t peer_id; - SharedBuffer resultdata; - while (data_left) { - try { - data_left = getFromBuffers(peer_id, resultdata); - if (data_left) { - ConnectionEvent e; - e.dataReceived(peer_id, resultdata); - m_connection->putEvent(e); - } - } - catch (ProcessedSilentlyException &e) { - /* try reading again */ + try { + // First, see if there any buffered packets we can process now + if (packet_queued) { + bool data_left = true; + session_t peer_id; + SharedBuffer resultdata; + while (data_left) { + try { + data_left = getFromBuffers(peer_id, resultdata); + if (data_left) { + ConnectionEvent e; + e.dataReceived(peer_id, resultdata); + m_connection->putEvent(e); } } - packet_queued = false; - } - - Address sender; - s32 received_size = m_connection->m_udpSocket.Receive(sender, *packetdata, - packet_maxsize); - - if ((received_size < BASE_HEADER_SIZE) || - (readU32(&packetdata[0]) != m_connection->GetProtocolID())) { - LOG(derr_con << m_connection->getDesc() - << "Receive(): Invalid incoming packet, " - << "size: " << received_size - << ", protocol: " - << ((received_size >= 4) ? readU32(&packetdata[0]) : -1) - << std::endl); - continue; + catch (ProcessedSilentlyException &e) { + /* try reading again */ + } } + packet_queued = false; + } - session_t peer_id = readPeerId(*packetdata); - u8 channelnum = readChannel(*packetdata); - - if (channelnum > CHANNEL_COUNT - 1) { - LOG(derr_con << m_connection->getDesc() - << "Receive(): Invalid channel " << (u32)channelnum << std::endl); - throw InvalidIncomingDataException("Channel doesn't exist"); - } + // Call Receive() to wait for incoming data + Address sender; + s32 received_size = m_connection->m_udpSocket.Receive(sender, + *packetdata, packetdata.getSize()); + if (received_size < 0) + return; - /* Try to identify peer by sender address (may happen on join) */ - if (peer_id == PEER_ID_INEXISTENT) { - peer_id = m_connection->lookupPeer(sender); - // We do not have to remind the peer of its - // peer id as the CONTROLTYPE_SET_PEER_ID - // command was sent reliably. - } + if ((received_size < BASE_HEADER_SIZE) || + (readU32(&packetdata[0]) != m_connection->GetProtocolID())) { + LOG(derr_con << m_connection->getDesc() + << "Receive(): Invalid incoming packet, " + << "size: " << received_size + << ", protocol: " + << ((received_size >= 4) ? readU32(&packetdata[0]) : -1) + << std::endl); + return; + } - /* The peer was not found in our lists. Add it. */ - if (peer_id == PEER_ID_INEXISTENT) { - peer_id = m_connection->createPeer(sender, MTP_MINETEST_RELIABLE_UDP, 0); - } + session_t peer_id = readPeerId(*packetdata); + u8 channelnum = readChannel(*packetdata); - PeerHelper peer = m_connection->getPeerNoEx(peer_id); + if (channelnum > CHANNEL_COUNT - 1) { + LOG(derr_con << m_connection->getDesc() + << "Receive(): Invalid channel " << (u32)channelnum << std::endl); + return; + } - if (!peer) { - LOG(dout_con << m_connection->getDesc() - << " got packet from unknown peer_id: " - << peer_id << " Ignoring." << std::endl); - continue; - } + /* Try to identify peer by sender address (may happen on join) */ + if (peer_id == PEER_ID_INEXISTENT) { + peer_id = m_connection->lookupPeer(sender); + // We do not have to remind the peer of its + // peer id as the CONTROLTYPE_SET_PEER_ID + // command was sent reliably. + } - // Validate peer address + /* The peer was not found in our lists. Add it. */ + if (peer_id == PEER_ID_INEXISTENT) { + peer_id = m_connection->createPeer(sender, MTP_MINETEST_RELIABLE_UDP, 0); + } - Address peer_address; + PeerHelper peer = m_connection->getPeerNoEx(peer_id); + if (!peer) { + LOG(dout_con << m_connection->getDesc() + << " got packet from unknown peer_id: " + << peer_id << " Ignoring." << std::endl); + return; + } - if (peer->getAddress(MTP_UDP, peer_address)) { - if (peer_address != sender) { - LOG(derr_con << m_connection->getDesc() - << m_connection->getDesc() - << " Peer " << peer_id << " sending from different address." - " Ignoring." << std::endl); - continue; - } - } else { + // Validate peer address - bool invalid_address = true; - if (invalid_address) { - LOG(derr_con << m_connection->getDesc() - << m_connection->getDesc() - << " Peer " << peer_id << " unknown." - " Ignoring." << std::endl); - continue; - } + Address peer_address; + if (peer->getAddress(MTP_UDP, peer_address)) { + if (peer_address != sender) { + LOG(derr_con << m_connection->getDesc() + << " Peer " << peer_id << " sending from different address." + " Ignoring." << std::endl); + return; } + } else { + LOG(derr_con << m_connection->getDesc() + << " Peer " << peer_id << " doesn't have an address?!" + " Ignoring." << std::endl); + return; + } - peer->ResetTimeout(); + peer->ResetTimeout(); - Channel *channel = 0; + Channel *channel = nullptr; + if (dynamic_cast(&peer)) { + channel = &dynamic_cast(&peer)->channels[channelnum]; + } else { + LOG(derr_con << m_connection->getDesc() + << "Receive(): peer_id=" << peer_id << " isn't an UDPPeer?!" + " Ignoring." << std::endl); + return; + } - if (dynamic_cast(&peer) != 0) { - channel = &(dynamic_cast(&peer)->channels[channelnum]); - } + channel->UpdateBytesReceived(received_size); - if (channel != 0) { - channel->UpdateBytesReceived(received_size); - } + // Throw the received packet to channel->processPacket() - // Throw the received packet to channel->processPacket() + // Make a new SharedBuffer from the data without the base headers + SharedBuffer strippeddata(received_size - BASE_HEADER_SIZE); + memcpy(*strippeddata, &packetdata[BASE_HEADER_SIZE], + strippeddata.getSize()); - // Make a new SharedBuffer from the data without the base headers - SharedBuffer strippeddata(received_size - BASE_HEADER_SIZE); - memcpy(*strippeddata, &packetdata[BASE_HEADER_SIZE], - strippeddata.getSize()); - - try { - // Process it (the result is some data with no headers made by us) - SharedBuffer resultdata = processPacket - (channel, strippeddata, peer_id, channelnum, false); + try { + // Process it (the result is some data with no headers made by us) + SharedBuffer resultdata = processPacket + (channel, strippeddata, peer_id, channelnum, false); - LOG(dout_con << m_connection->getDesc() - << " ProcessPacket from peer_id: " << peer_id - << ", channel: " << (u32)channelnum << ", returned " - << resultdata.getSize() << " bytes" << std::endl); - - ConnectionEvent e; - e.dataReceived(peer_id, resultdata); - m_connection->putEvent(e); - } - catch (ProcessedSilentlyException &e) { - } - catch (ProcessedQueued &e) { - packet_queued = true; - } - } - catch (InvalidIncomingDataException &e) { + LOG(dout_con << m_connection->getDesc() + << " ProcessPacket from peer_id: " << peer_id + << ", channel: " << (u32)channelnum << ", returned " + << resultdata.getSize() << " bytes" << std::endl); + + ConnectionEvent e; + e.dataReceived(peer_id, resultdata); + m_connection->putEvent(e); } catch (ProcessedSilentlyException &e) { } + catch (ProcessedQueued &e) { + // we set it to true anyway (see below) + } + + /* Every time we receive a packet it can happen that a previously + * buffered packet is now ready to process. */ + packet_queued = true; + } + catch (InvalidIncomingDataException &e) { } } @@ -1175,7 +1180,8 @@ m_connection->TriggerSend(); } catch (NotFoundException &e) { LOG(derr_con << m_connection->getDesc() - << "WARNING: ACKed packet not in outgoing queue" << std::endl); + << "WARNING: ACKed packet not in outgoing queue" + << " seqnum=" << seqnum << std::endl); channel->UpdatePacketTooLateCounter(); } diff -Nru minetest-5.2.0/src/network/connectionthreads.h minetest-5.3.0/src/network/connectionthreads.h --- minetest-5.2.0/src/network/connectionthreads.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/network/connectionthreads.h 2020-07-09 21:13:21.000000000 +0000 @@ -101,7 +101,7 @@ } private: - void receive(); + void receive(SharedBuffer &packetdata, bool &packet_queued); // Returns next data from a buffer if possible // If found, returns true; if not, false. diff -Nru minetest-5.2.0/src/network/networkprotocol.h minetest-5.3.0/src/network/networkprotocol.h --- minetest-5.2.0/src/network/networkprotocol.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/network/networkprotocol.h 2020-07-09 21:13:21.000000000 +0000 @@ -70,8 +70,8 @@ PROTOCOL_VERSION 14: Added transfer of player pressed keys to the server Added new messages for mesh and bone animation, as well as attachments - GENERIC_CMD_SET_ANIMATION - GENERIC_CMD_SET_BONE_POSITION + AO_CMD_SET_ANIMATION + AO_CMD_SET_BONE_POSITION GENERIC_CMD_SET_ATTACHMENT PROTOCOL_VERSION 15: Serialization format changes @@ -87,7 +87,7 @@ damageGroups added to ToolCapabilities sound_place added to ItemDefinition PROTOCOL_VERSION 19: - GENERIC_CMD_SET_PHYSICS_OVERRIDE + AO_CMD_SET_PHYSICS_OVERRIDE PROTOCOL_VERSION 20: TOCLIENT_HUDADD TOCLIENT_HUDRM @@ -131,7 +131,7 @@ Add TOCLIENT_HELLO for presenting server to client after client presentation Add TOCLIENT_AUTH_ACCEPT to accept connection from client - Rename GENERIC_CMD_SET_ATTACHMENT to GENERIC_CMD_ATTACH_TO + Rename GENERIC_CMD_SET_ATTACHMENT to AO_CMD_ATTACH_TO PROTOCOL_VERSION 26: Add TileDef tileable_horizontal, tileable_vertical flags PROTOCOL_VERSION 27: @@ -237,6 +237,7 @@ Formspec elements are drawn in the order of definition bgcolor[]: use 3 parameters (bgcolor, formspec (now an enum), fbgcolor) box[] and image[] elements enable clipping by default + new element: scroll_container[] */ #define FORMSPEC_API_VERSION 3 @@ -322,6 +323,15 @@ v3f added_vel */ + TOCLIENT_MEDIA_PUSH = 0x2C, + /* + std::string raw_hash + std::string filename + bool should_be_cached + u32 len + char filedata[len] + */ + // (oops, there is some gap here) TOCLIENT_CHAT_MESSAGE = 0x2F, @@ -383,8 +393,9 @@ /* Sends an FOV override/multiplier to client. - float fov + f32 fov bool is_multiplier + f32 transition_time */ TOCLIENT_DEATHSCREEN = 0x37, @@ -558,10 +569,10 @@ u32 id u8 type v2f1000 pos - u32 len + u16 len u8[len] name v2f1000 scale - u32 len2 + u16 len2 u8[len2] text u32 number u32 item @@ -571,6 +582,8 @@ v3f1000 world_pos v2s32 size s16 z_index + u16 len3 + u8[len3] text2 */ TOCLIENT_HUDRM = 0x4a, @@ -632,9 +645,9 @@ u8[4] night_sky (ARGB) u8[4] night_horizon (ARGB) u8[4] indoors (ARGB) - u8[4] sun_tint (ARGB) - u8[4] moon_tint (ARGB) - std::string tint_type + u8[4] fog_sun_tint (ARGB) + u8[4] fog_moon_tint (ARGB) + std::string fog_tint_type */ TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50, diff -Nru minetest-5.2.0/src/network/serveropcodes.cpp minetest-5.3.0/src/network/serveropcodes.cpp --- minetest-5.2.0/src/network/serveropcodes.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/network/serveropcodes.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -111,6 +111,16 @@ const static ClientCommandFactory null_command_factory = { "TOCLIENT_NULL", 0, false }; +/* + Channels used for Server -> Client communication + 2: Bulk data (mapblocks, media, ...) + 1: HUD packets + 0: everything else + + Packet order is only guaranteed inside a channel, so packets that operate on + the same objects are *required* to be in the same channel. +*/ + const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] = { null_command_factory, // 0x00 @@ -157,13 +167,13 @@ { "TOCLIENT_TIME_OF_DAY", 0, true }, // 0x29 { "TOCLIENT_CSM_RESTRICTION_FLAGS", 0, true }, // 0x2A { "TOCLIENT_PLAYER_SPEED", 0, true }, // 0x2B - null_command_factory, // 0x2C + { "TOCLIENT_MEDIA_PUSH", 0, true }, // 0x2C (sent over channel 1 too) null_command_factory, // 0x2D null_command_factory, // 0x2E { "TOCLIENT_CHAT_MESSAGE", 0, true }, // 0x2F null_command_factory, // 0x30 { "TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD", 0, true }, // 0x31 - { "TOCLIENT_ACTIVE_OBJECT_MESSAGES", 0, true }, // 0x32 Special packet, sent by 0 (rel) and 1 (unrel) channel + { "TOCLIENT_ACTIVE_OBJECT_MESSAGES", 0, true }, // 0x32 (may be sent as unrel over channel 1 too) { "TOCLIENT_HP", 0, true }, // 0x33 { "TOCLIENT_MOVE_PLAYER", 0, true }, // 0x34 { "TOCLIENT_ACCESS_DENIED_LEGACY", 0, true }, // 0x35 @@ -176,7 +186,7 @@ { "TOCLIENT_ANNOUNCE_MEDIA", 0, true }, // 0x3C { "TOCLIENT_ITEMDEF", 0, true }, // 0x3D null_command_factory, // 0x3E - { "TOCLIENT_PLAY_SOUND", 0, true }, // 0x3f + { "TOCLIENT_PLAY_SOUND", 0, true }, // 0x3f (may be sent as unrel too) { "TOCLIENT_STOP_SOUND", 0, true }, // 0x40 { "TOCLIENT_PRIVILEGES", 0, true }, // 0x41 { "TOCLIENT_INVENTORY_FORMSPEC", 0, true }, // 0x42 @@ -188,9 +198,9 @@ null_command_factory, // 0x48 { "TOCLIENT_HUDADD", 1, true }, // 0x49 { "TOCLIENT_HUDRM", 1, true }, // 0x4a - { "TOCLIENT_HUDCHANGE", 0, true }, // 0x4b - { "TOCLIENT_HUD_SET_FLAGS", 0, true }, // 0x4c - { "TOCLIENT_HUD_SET_PARAM", 0, true }, // 0x4d + { "TOCLIENT_HUDCHANGE", 1, true }, // 0x4b + { "TOCLIENT_HUD_SET_FLAGS", 1, true }, // 0x4c + { "TOCLIENT_HUD_SET_PARAM", 1, true }, // 0x4d { "TOCLIENT_BREATH", 0, true }, // 0x4e { "TOCLIENT_SET_SKY", 0, true }, // 0x4f { "TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO", 0, true }, // 0x50 diff -Nru minetest-5.2.0/src/network/serverpackethandler.cpp minetest-5.3.0/src/network/serverpackethandler.cpp --- minetest-5.2.0/src/network/serverpackethandler.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/network/serverpackethandler.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -20,7 +20,6 @@ #include "chatmessage.h" #include "server.h" #include "log.h" -#include "content_sao.h" #include "emerge.h" #include "mapblock.h" #include "modchannels.h" @@ -34,6 +33,8 @@ #include "network/connection.h" #include "network/networkprotocol.h" #include "network/serveropcodes.h" +#include "server/player_sao.h" +#include "server/serverinventorymgr.h" #include "util/auth.h" #include "util/base64.h" #include "util/pointedthing.h" @@ -52,11 +53,12 @@ if(pkt->getSize() < 1) return; - RemoteClient* client = getClient(pkt->getPeerId(), CS_Created); + session_t peer_id = pkt->getPeerId(); + RemoteClient *client = getClient(peer_id, CS_Created); std::string addr_s; try { - Address address = getPeerAddress(pkt->getPeerId()); + Address address = getPeerAddress(peer_id); addr_s = address.serializeString(); } catch (con::PeerNotFoundException &e) { @@ -66,27 +68,27 @@ * respond for some time, your server was overloaded or * things like that. */ - infostream << "Server::ProcessData(): Canceling: peer " - << pkt->getPeerId() << " not found" << std::endl; + infostream << "Server::ProcessData(): Canceling: peer " << peer_id << + " not found" << std::endl; return; } // If net_proto_version is set, this client has already been handled if (client->getState() > CS_Created) { - verbosestream << "Server: Ignoring multiple TOSERVER_INITs from " - << addr_s << " (peer_id=" << pkt->getPeerId() << ")" << std::endl; + verbosestream << "Server: Ignoring multiple TOSERVER_INITs from " << + addr_s << " (peer_id=" << peer_id << ")" << std::endl; return; } - verbosestream << "Server: Got TOSERVER_INIT from " << addr_s << " (peer_id=" - << pkt->getPeerId() << ")" << std::endl; + verbosestream << "Server: Got TOSERVER_INIT from " << addr_s << + " (peer_id=" << peer_id << ")" << std::endl; // Do not allow multiple players in simple singleplayer mode. // This isn't a perfect way to do it, but will suffice for now if (m_simple_singleplayer_mode && m_clients.getClientIDs().size() > 1) { - infostream << "Server: Not allowing another client (" << addr_s - << ") to connect in simple singleplayer mode" << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SINGLEPLAYER); + infostream << "Server: Not allowing another client (" << addr_s << + ") to connect in simple singleplayer mode" << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_SINGLEPLAYER); return; } @@ -109,11 +111,9 @@ depl_serial_v = SER_FMT_VER_INVALID; if (depl_serial_v == SER_FMT_VER_INVALID) { - actionstream << "Server: A mismatched client tried to connect from " - << addr_s << std::endl; - infostream<<"Server: Cannot negotiate serialization version with " - << addr_s << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_VERSION); + actionstream << "Server: A mismatched client tried to connect from " << + addr_s << " ser_fmt_max=" << (int)client_max << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_VERSION); return; } @@ -146,9 +146,9 @@ net_proto_version != LATEST_PROTOCOL_VERSION) || net_proto_version < SERVER_PROTOCOL_VERSION_MIN || net_proto_version > SERVER_PROTOCOL_VERSION_MAX) { - actionstream << "Server: A mismatched client tried to connect from " - << addr_s << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_VERSION); + actionstream << "Server: A mismatched client tried to connect from " << + addr_s << " proto_max=" << (int)max_net_proto_version << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_VERSION); return; } @@ -159,56 +159,56 @@ size_t pns = playerName.size(); if (pns == 0 || pns > PLAYERNAME_SIZE) { - actionstream << "Server: Player with " - << ((pns > PLAYERNAME_SIZE) ? "a too long" : "an empty") - << " name tried to connect from " << addr_s << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_NAME); + actionstream << "Server: Player with " << + ((pns > PLAYERNAME_SIZE) ? "a too long" : "an empty") << + " name tried to connect from " << addr_s << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_NAME); return; } if (!string_allowed(playerName, PLAYERNAME_ALLOWED_CHARS)) { - actionstream << "Server: Player with an invalid name " - << "tried to connect from " << addr_s << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME); + actionstream << "Server: Player with an invalid name tried to connect " + "from " << addr_s << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME); return; } - m_clients.setPlayerName(pkt->getPeerId(), playername); + 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 to connect from " << addr_s << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_NAME); + actionstream << "Server: Player with the name \"singleplayer\" tried " + "to connect from " << addr_s << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_NAME); return; } { std::string reason; if (m_script->on_prejoinplayer(playername, addr_s, &reason)) { - actionstream << "Server: Player with the name \"" << playerName << "\" " - << "tried to connect from " << addr_s << " " - << "but it was disallowed for the following reason: " - << reason << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_CUSTOM_STRING, reason); + actionstream << "Server: Player with the name \"" << playerName << + "\" tried to connect from " << addr_s << + " but it was disallowed for the following reason: " << reason << + std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_CUSTOM_STRING, reason); return; } } - infostream << "Server: New connection: \"" << playerName << "\" from " - << addr_s << " (peer_id=" << pkt->getPeerId() << ")" << std::endl; + infostream << "Server: New connection: \"" << playerName << "\" from " << + addr_s << " (peer_id=" << peer_id << ")" << std::endl; // Enforce user limit. // Don't enforce for users that have some admin right or mod permits it. if (m_clients.isUserLimitReached() && playername != g_settings->get("name") && !m_script->can_bypass_userlimit(playername, addr_s)) { - actionstream << "Server: " << playername << " tried to join from " - << addr_s << ", but there" << " are already max_users=" - << g_settings->getU16("max_users") << " players." << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_TOO_MANY_USERS); + actionstream << "Server: " << playername << " tried to join from " << + addr_s << ", but there are already max_users=" << + g_settings->getU16("max_users") << " players." << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_TOO_MANY_USERS); return; } @@ -228,20 +228,19 @@ auth_mechs |= AUTH_MECHANISM_SRP; client->enc_pwd = encpwd; } else { - actionstream << "User " << playername - << " tried to log in, but password field" - << " was invalid (unknown mechcode)." << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL); + actionstream << "User " << playername << " tried to log in, " + "but password field was invalid (unknown mechcode)." << + std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_SERVER_FAIL); return; } } else if (base64_is_valid(encpwd)) { auth_mechs |= AUTH_MECHANISM_LEGACY_PASSWORD; client->enc_pwd = encpwd; } else { - actionstream << "User " << playername - << " tried to log in, but password field" - << " was invalid (invalid base64)." << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL); + actionstream << "User " << playername << " tried to log in, but " + "password field was invalid (invalid base64)." << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_SERVER_FAIL); return; } } else { @@ -264,8 +263,8 @@ verbosestream << "Sending TOCLIENT_HELLO with auth method field: " << auth_mechs << std::endl; - NetworkPacket resp_pkt(TOCLIENT_HELLO, 1 + 4 - + legacyPlayerNameCasing.size(), pkt->getPeerId()); + NetworkPacket resp_pkt(TOCLIENT_HELLO, + 1 + 4 + legacyPlayerNameCasing.size(), peer_id); u16 depl_compress_mode = NETPROTO_COMPRESSION_NONE; resp_pkt << depl_serial_v << depl_compress_mode << net_proto_version @@ -276,16 +275,16 @@ client->allowed_auth_mechs = auth_mechs; client->setDeployedCompressionMode(depl_compress_mode); - m_clients.event(pkt->getPeerId(), CSE_Hello); + m_clients.event(peer_id, CSE_Hello); } void Server::handleCommand_Init2(NetworkPacket* pkt) { - verbosestream << "Server: Got TOSERVER_INIT2 from " - << pkt->getPeerId() << std::endl; + session_t peer_id = pkt->getPeerId(); + verbosestream << "Server: Got TOSERVER_INIT2 from " << peer_id << std::endl; - m_clients.event(pkt->getPeerId(), CSE_GotInit2); - u16 protocol_version = m_clients.getProtocolVersion(pkt->getPeerId()); + m_clients.event(peer_id, CSE_GotInit2); + u16 protocol_version = m_clients.getProtocolVersion(peer_id); std::string lang; if (pkt->getSize() > 0) @@ -295,45 +294,48 @@ Send some initialization data */ - infostream << "Server: Sending content to " - << getPlayerName(pkt->getPeerId()) << std::endl; + infostream << "Server: Sending content to " << getPlayerName(peer_id) << + std::endl; // Send item definitions - SendItemDef(pkt->getPeerId(), m_itemdef, protocol_version); + SendItemDef(peer_id, m_itemdef, protocol_version); // Send node definitions - SendNodeDef(pkt->getPeerId(), m_nodedef, protocol_version); + SendNodeDef(peer_id, m_nodedef, protocol_version); - m_clients.event(pkt->getPeerId(), CSE_SetDefinitionsSent); + m_clients.event(peer_id, CSE_SetDefinitionsSent); // Send media announcement - sendMediaAnnouncement(pkt->getPeerId(), lang); + sendMediaAnnouncement(peer_id, lang); + + RemoteClient *client = getClient(peer_id, CS_InitDone); - RemoteClient *client = getClient(pkt->getPeerId(), CS_InitDone); + // Keep client language for server translations + client->setLangCode(lang); // Send active objects { - PlayerSAO *sao = getPlayerSAO(pkt->getPeerId()); + PlayerSAO *sao = getPlayerSAO(peer_id); if (client && sao) SendActiveObjectRemoveAdd(client, sao); } // Send detached inventories - sendDetachedInventories(pkt->getPeerId(), false); + sendDetachedInventories(peer_id, false); // Send player movement settings - SendMovement(pkt->getPeerId()); + SendMovement(peer_id); // Send time of day u16 time = m_env->getTimeOfDay(); float time_speed = g_settings->getFloat("time_speed"); - SendTimeOfDay(pkt->getPeerId(), time, time_speed); + SendTimeOfDay(peer_id, time, time_speed); - SendCSMRestrictionFlags(pkt->getPeerId()); + SendCSMRestrictionFlags(peer_id); // Warnings about protocol version can be issued here if (client->net_proto_version < LATEST_PROTOCOL_VERSION) { - SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM, + SendChatMessage(peer_id, ChatMessage(CHATMESSAGE_TYPE_SYSTEM, L"# Server: WARNING: YOUR CLIENT'S VERSION MAY NOT BE FULLY COMPATIBLE " L"WITH THIS SERVER!")); } @@ -346,8 +348,9 @@ *pkt >> numfiles; - infostream << "Sending " << numfiles << " files to " - << getPlayerName(pkt->getPeerId()) << std::endl; + session_t peer_id = pkt->getPeerId(); + infostream << "Sending " << numfiles << " files to " << + getPlayerName(peer_id) << std::endl; verbosestream << "TOSERVER_REQUEST_MEDIA: " << std::endl; for (u16 i = 0; i < numfiles; i++) { @@ -360,7 +363,7 @@ << name << std::endl; } - sendRequestedMedia(pkt->getPeerId(), tosend); + sendRequestedMedia(peer_id, tosend); } void Server::handleCommand_ClientReady(NetworkPacket* pkt) @@ -370,18 +373,16 @@ PlayerSAO* playersao = StageTwoClientInit(peer_id); if (playersao == NULL) { - actionstream - << "TOSERVER_CLIENT_READY stage 2 client init failed for peer_id: " - << peer_id << std::endl; + errorstream << "TOSERVER_CLIENT_READY stage 2 client init failed " + "peer_id=" << peer_id << std::endl; DisconnectPeer(peer_id); return; } if (pkt->getSize() < 8) { - errorstream - << "TOSERVER_CLIENT_READY client sent inconsistent data, disconnecting peer_id: " - << peer_id << std::endl; + errorstream << "TOSERVER_CLIENT_READY client sent inconsistent data, " + "disconnecting peer_id: " << peer_id << std::endl; DisconnectPeer(peer_id); return; } @@ -390,9 +391,8 @@ std::string full_ver; *pkt >> major_ver >> minor_ver >> patch_ver >> reserved >> full_ver; - m_clients.setClientVersion( - peer_id, major_ver, minor_ver, patch_ver, - full_ver); + m_clients.setClientVersion(peer_id, major_ver, minor_ver, patch_ver, + full_ver); if (pkt->getRemainingBytes() >= 2) *pkt >> playersao->getPlayer()->formspec_version; @@ -409,12 +409,15 @@ // (u16) 1 + std::string represents a pseudo vector serialization representation notice_pkt << (u8) PLAYER_LIST_ADD << (u16) 1 << std::string(playersao->getPlayer()->getName()); m_clients.sendToAll(¬ice_pkt); - m_clients.event(peer_id, CSE_SetClientReady); - m_script->on_joinplayer(playersao); + + s64 last_login; + m_script->getAuth(playersao->getPlayer()->getName(), nullptr, nullptr, &last_login); + m_script->on_joinplayer(playersao, last_login); + // Send shutdown timer if shutdown has been scheduled if (m_shutdown_state.isTimerRunning()) { - SendChatMessage(pkt->getPeerId(), m_shutdown_state.getShutdownTimerMessage()); + SendChatMessage(peer_id, m_shutdown_state.getShutdownTimerMessage()); } } @@ -498,6 +501,7 @@ player->control.sneak = (keyPressed & 64); player->control.LMB = (keyPressed & 128); player->control.RMB = (keyPressed & 256); + player->control.zoom = (keyPressed & 512); if (playersao->checkMovementCheat()) { // Call callbacks @@ -508,21 +512,22 @@ void Server::handleCommand_PlayerPos(NetworkPacket* pkt) { - RemotePlayer *player = m_env->getPlayer(pkt->getPeerId()); + 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=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } PlayerSAO *playersao = player->getPlayerSAO(); if (playersao == NULL) { - errorstream << "Server::ProcessData(): Canceling: " - "No player object for peer_id=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player object for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } @@ -568,22 +573,23 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt) { - RemotePlayer *player = m_env->getPlayer(pkt->getPeerId()); + 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=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } PlayerSAO *playersao = player->getPlayerSAO(); if (playersao == NULL) { - errorstream << "Server::ProcessData(): Canceling: " - "No player object for peer_id=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player object for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } @@ -619,9 +625,9 @@ ma->from_inv.applyCurrentPlayer(player->getName()); ma->to_inv.applyCurrentPlayer(player->getName()); - setInventoryModified(ma->from_inv); + m_inventory_mgr->setInventoryModified(ma->from_inv); if (ma->from_inv != ma->to_inv) - setInventoryModified(ma->to_inv); + m_inventory_mgr->setInventoryModified(ma->to_inv); bool from_inv_is_current_player = (ma->from_inv.type == InventoryLocation::PLAYER) && @@ -686,7 +692,7 @@ da->from_inv.applyCurrentPlayer(player->getName()); - setInventoryModified(da->from_inv); + m_inventory_mgr->setInventoryModified(da->from_inv); /* Disable dropping items out of craftpreview @@ -722,7 +728,7 @@ ca->craft_inv.applyCurrentPlayer(player->getName()); - setInventoryModified(ca->craft_inv); + m_inventory_mgr->setInventoryModified(ca->craft_inv); //bool craft_inv_is_current_player = // (ca->craft_inv.type == InventoryLocation::PLAYER) && @@ -738,7 +744,7 @@ } // Do the action - a->apply(this, playersao, this); + a->apply(m_inventory_mgr.get(), playersao, this); // Eat the action delete a; } @@ -761,12 +767,13 @@ message += (wchar_t)tmp_wchar; } - RemotePlayer *player = m_env->getPlayer(pkt->getPeerId()); + 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=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } @@ -777,8 +784,8 @@ std::wstring answer_to_sender = handleChat(name, wname, message, true, player); if (!answer_to_sender.empty()) { // Send the answer to sender - SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_NORMAL, - answer_to_sender, wname)); + SendChatMessage(peer_id, ChatMessage(CHATMESSAGE_TYPE_NORMAL, + answer_to_sender, wname)); } } @@ -788,22 +795,23 @@ *pkt >> damage; - RemotePlayer *player = m_env->getPlayer(pkt->getPeerId()); + 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=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } PlayerSAO *playersao = player->getPlayerSAO(); if (playersao == NULL) { - errorstream << "Server::ProcessData(): Canceling: " - "No player object for peer_id=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player object for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } @@ -825,105 +833,28 @@ } } -void Server::handleCommand_Password(NetworkPacket* pkt) -{ - if (pkt->getSize() != PASSWORD_SIZE * 2) - return; - - std::string oldpwd; - std::string newpwd; - - // Deny for clients using the new protocol - RemoteClient* client = getClient(pkt->getPeerId(), CS_Created); - if (client->net_proto_version >= 25) { - infostream << "Server::handleCommand_Password(): Denying change: " - << " Client protocol version for peer_id=" << pkt->getPeerId() - << " too new!" << std::endl; - return; - } - - for (u16 i = 0; i < PASSWORD_SIZE - 1; i++) { - char c = pkt->getChar(i); - if (c == 0) - break; - oldpwd += c; - } - - for (u16 i = 0; i < PASSWORD_SIZE - 1; i++) { - char c = pkt->getChar(PASSWORD_SIZE + i); - if (c == 0) - break; - newpwd += c; - } - - RemotePlayer *player = m_env->getPlayer(pkt->getPeerId()); - if (player == NULL) { - errorstream << "Server::ProcessData(): Canceling: " - "No player for peer_id=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); - return; - } - - if (!base64_is_valid(newpwd)) { - infostream<<"Server: " << player->getName() << - " supplied invalid password hash" << std::endl; - // Wrong old password supplied!! - SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM, - L"Invalid new password hash supplied. Password NOT changed.")); - return; - } - - infostream << "Server: Client requests a password change from " - << "'" << oldpwd << "' to '" << newpwd << "'" << std::endl; - - std::string playername = player->getName(); - - std::string checkpwd; - m_script->getAuth(playername, &checkpwd, NULL); - - if (oldpwd != checkpwd) { - infostream << "Server: invalid old password" << std::endl; - // Wrong old password supplied!! - SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM, - L"Invalid old password supplied. Password NOT changed.")); - return; - } - - bool success = m_script->setPassword(playername, newpwd); - if (success) { - actionstream << player->getName() << " changes password" << std::endl; - SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM, - L"Password change successful.")); - } else { - actionstream << player->getName() << " tries to change password but " - << "it fails" << std::endl; - SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM, - L"Password change failed or unavailable.")); - } -} - void Server::handleCommand_PlayerItem(NetworkPacket* pkt) { if (pkt->getSize() < 2) return; - RemotePlayer *player = m_env->getPlayer(pkt->getPeerId()); + 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=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } PlayerSAO *playersao = player->getPlayerSAO(); if (playersao == NULL) { - errorstream << "Server::ProcessData(): Canceling: " - "No player object for peer_id=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player object for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } @@ -936,12 +867,13 @@ void Server::handleCommand_Respawn(NetworkPacket* pkt) { - RemotePlayer *player = m_env->getPlayer(pkt->getPeerId()); + 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=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } @@ -951,7 +883,7 @@ if (!playersao->isDead()) return; - RespawnPlayer(pkt->getPeerId()); + RespawnPlayer(peer_id); actionstream << player->getName() << " respawns at " << PP(playersao->getBasePosition() / BS) << std::endl; @@ -973,8 +905,8 @@ actionstream << "Player " << player->getName() << " tried to access " << what << " from too far: " - << "d=" << d <<", max_d=" << max_d - << ". ignoring." << std::endl; + << "d=" << d << ", max_d=" << max_d + << "; ignoring." << std::endl; // Call callbacks m_script->on_cheat(player->getPlayerSAO(), "interacted_too_far"); return false; @@ -1006,31 +938,32 @@ verbosestream << "TOSERVER_INTERACT: action=" << (int)action << ", item=" << item_i << ", pointed=" << pointed.dump() << std::endl; - RemotePlayer *player = m_env->getPlayer(pkt->getPeerId()); + 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=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } PlayerSAO *playersao = player->getPlayerSAO(); if (playersao == NULL) { - errorstream << "Server::ProcessData(): Canceling: " - "No player object for peer_id=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player object for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } if (playersao->isDead()) { - actionstream << "Server: NoCheat: " << player->getName() + actionstream << "Server: " << player->getName() << " tried to interact while dead; ignoring." << std::endl; if (pointed.type == POINTEDTHING_NODE) { // Re-send block to revert change on client-side - RemoteClient *client = getClient(pkt->getPeerId()); + RemoteClient *client = getClient(peer_id); v3s16 blockpos = getNodeBlockPos(pointed.node_undersurface); client->SetBlockNotSent(blockpos); } @@ -1081,7 +1014,7 @@ pointed.dump() << " without 'interact' privilege" << std::endl; // Re-send block to revert change on client-side - RemoteClient *client = getClient(pkt->getPeerId()); + RemoteClient *client = getClient(peer_id); // Digging completed -> under if (action == INTERACT_DIGGING_COMPLETED) { v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_under, BS)); @@ -1109,7 +1042,7 @@ if (!checkInteractDistance(player, d, pointed.dump())) { // Re-send block to revert change on client-side - RemoteClient *client = getClient(pkt->getPeerId()); + RemoteClient *client = getClient(peer_id); v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_under, BS)); client->SetBlockNotSent(blockpos); return; @@ -1132,11 +1065,10 @@ n = m_env->getMap().getNode(p_under, &pos_ok); if (!pos_ok) { - infostream << "Server: Not punching: Node not found." - << " Adding block to emerge queue." - << std::endl; - m_emerge->enqueueBlockEmerge(pkt->getPeerId(), - getNodeBlockPos(p_above), false); + infostream << "Server: Not punching: Node not found. " + "Adding block to emerge queue." << std::endl; + m_emerge->enqueueBlockEmerge(peer_id, getNodeBlockPos(p_above), + false); } if (n.getContent() != CONTENT_IGNORE) @@ -1202,11 +1134,10 @@ bool pos_ok; MapNode n = m_env->getMap().getNode(p_under, &pos_ok); if (!pos_ok) { - infostream << "Server: Not finishing digging: Node not found." - << " Adding block to emerge queue." - << std::endl; - m_emerge->enqueueBlockEmerge(pkt->getPeerId(), - getNodeBlockPos(p_above), false); + infostream << "Server: Not finishing digging: Node not found. " + "Adding block to emerge queue." << std::endl; + m_emerge->enqueueBlockEmerge(peer_id, getNodeBlockPos(p_above), + false); } /* Cheat prevention */ @@ -1217,7 +1148,7 @@ playersao->noCheatDigEnd(); // If player didn't start digging this, ignore dig if (nocheat_p != p_under) { - infostream << "Server: NoCheat: " << player->getName() + infostream << "Server: " << player->getName() << " started digging " << PP(nocheat_p) << " and completed digging " << PP(p_under) << "; not digging." << std::endl; @@ -1241,9 +1172,9 @@ } // If can't dig, ignore dig if (!params.diggable) { - infostream << "Server: NoCheat: " << player->getName() + infostream << "Server: " << player->getName() << " completed digging " << PP(p_under) - << ", which is not diggable with tool. not digging." + << ", which is not diggable with tool; not digging." << std::endl; is_valid_dig = false; // Call callbacks @@ -1267,7 +1198,7 @@ } // Dig not possible else { - infostream << "Server: NoCheat: " << player->getName() + infostream << "Server: " << player->getName() << " completed digging " << PP(p_under) << "too fast; not digging." << std::endl; is_valid_dig = false; @@ -1282,7 +1213,7 @@ m_script->node_on_dig(p_under, n, playersao); v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_under, BS)); - RemoteClient *client = getClient(pkt->getPeerId()); + RemoteClient *client = getClient(peer_id); // Send unusual result (that is, node not being removed) if (m_env->getMap().getNode(p_under).getContent() != CONTENT_AIR) { // Re-send block to revert change on client-side @@ -1304,7 +1235,7 @@ // Reset build time counter if (pointed.type == POINTEDTHING_NODE && selected_item.getDefinition(m_itemdef).type == ITEM_NODE) - getClient(pkt->getPeerId())->m_time_from_building = 0.0; + getClient(peer_id)->m_time_from_building = 0.0; if (pointed.type == POINTEDTHING_OBJECT) { // Right click object @@ -1338,7 +1269,7 @@ // If item has node placement prediction, always send the // blocks to make sure the client knows what exactly happened - RemoteClient *client = getClient(pkt->getPeerId()); + RemoteClient *client = getClient(peer_id); v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_above, BS)); v3s16 blockpos2 = getNodeBlockPos(floatToInt(pointed_pos_under, BS)); if (!selected_item.getDefinition(m_itemdef).node_placement_prediction.empty()) { @@ -1441,22 +1372,23 @@ fields[fieldname] = pkt->readLongString(); } - RemotePlayer *player = m_env->getPlayer(pkt->getPeerId()); + 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=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } PlayerSAO *playersao = player->getPlayerSAO(); if (playersao == NULL) { - errorstream << "Server::ProcessData(): Canceling: " - "No player object for peer_id=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player object for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } @@ -1492,22 +1424,23 @@ fields[fieldname] = pkt->readLongString(); } - RemotePlayer *player = m_env->getPlayer(pkt->getPeerId()); + 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=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } PlayerSAO *playersao = player->getPlayerSAO(); if (playersao == NULL) { - errorstream << "Server::ProcessData(): Canceling: " - "No player object for peer_id=" << pkt->getPeerId() - << " disconnecting peer!" << std::endl; - DisconnectPeer(pkt->getPeerId()); + errorstream << + "Server::ProcessData(): Canceling: No player object for peer_id=" << + peer_id << " disconnecting peer!" << std::endl; + DisconnectPeer(peer_id); return; } @@ -1517,7 +1450,7 @@ } // verify that we displayed the formspec to the user - const auto peer_state_iterator = m_formspec_state_data.find(pkt->getPeerId()); + const auto peer_state_iterator = m_formspec_state_data.find(peer_id); if (peer_state_iterator != m_formspec_state_data.end()) { const std::string &server_formspec_name = peer_state_iterator->second; if (client_formspec_name == server_formspec_name) { @@ -1543,7 +1476,8 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt) { - RemoteClient* client = getClient(pkt->getPeerId(), CS_Invalid); + session_t peer_id = pkt->getPeerId(); + RemoteClient *client = getClient(peer_id, CS_Invalid); ClientState cstate = client->getState(); std::string playername = client->getName(); @@ -1551,7 +1485,7 @@ std::string salt; std::string verification_key; - std::string addr_s = getPeerAddress(pkt->getPeerId()).serializeString(); + std::string addr_s = getPeerAddress(peer_id).serializeString(); u8 is_empty; *pkt >> salt >> verification_key >> is_empty; @@ -1565,7 +1499,7 @@ actionstream << "Server: Client from " << addr_s << " tried to set password without being " << "authenticated, or the username being new." << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA); + DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA); return; } @@ -1574,7 +1508,7 @@ is_empty == 1) { actionstream << "Server: " << playername << " supplied empty password from " << addr_s << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_EMPTY_PASSWORD); + DenyAccess(peer_id, SERVER_ACCESSDENIED_EMPTY_PASSWORD); return; } @@ -1582,8 +1516,9 @@ initial_ver_key = encode_srp_verifier(verification_key, salt); m_script->createAuth(playername, initial_ver_key); + m_script->on_authplayer(playername, addr_s, true); - acceptAuth(pkt->getPeerId(), false); + acceptAuth(peer_id, false); } else { if (cstate < CS_SudoMode) { infostream << "Server::ProcessData(): Ignoring TOSERVER_FIRST_SRP from " @@ -1591,48 +1526,48 @@ << std::endl; return; } - m_clients.event(pkt->getPeerId(), CSE_SudoLeave); + m_clients.event(peer_id, CSE_SudoLeave); std::string pw_db_field = encode_srp_verifier(verification_key, salt); bool success = m_script->setPassword(playername, pw_db_field); if (success) { actionstream << playername << " changes password" << std::endl; - SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM, - L"Password change successful.")); + SendChatMessage(peer_id, ChatMessage(CHATMESSAGE_TYPE_SYSTEM, + L"Password change successful.")); } else { - actionstream << playername << " tries to change password but " - << "it fails" << std::endl; - SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM, - L"Password change failed or unavailable.")); + actionstream << playername << + " tries to change password but it fails" << std::endl; + SendChatMessage(peer_id, ChatMessage(CHATMESSAGE_TYPE_SYSTEM, + L"Password change failed or unavailable.")); } } } void Server::handleCommand_SrpBytesA(NetworkPacket* pkt) { - RemoteClient* client = getClient(pkt->getPeerId(), CS_Invalid); + session_t peer_id = pkt->getPeerId(); + RemoteClient *client = getClient(peer_id, CS_Invalid); ClientState cstate = client->getState(); bool wantSudo = (cstate == CS_Active); if (!((cstate == CS_HelloSent) || (cstate == CS_Active))) { - actionstream << "Server: got SRP _A packet in wrong state " - << cstate << " from " - << getPeerAddress(pkt->getPeerId()).serializeString() - << ". Ignoring." << std::endl; + actionstream << "Server: got SRP _A packet in wrong state " << cstate << + " from " << getPeerAddress(peer_id).serializeString() << + ". Ignoring." << std::endl; return; } if (client->chosen_mech != AUTH_MECHANISM_NONE) { - actionstream << "Server: got SRP _A packet, while auth" - << "is already going on with mech " << client->chosen_mech - << " from " << getPeerAddress(pkt->getPeerId()).serializeString() - << " (wantSudo=" << wantSudo << "). Ignoring." << std::endl; + actionstream << "Server: got SRP _A packet, while auth is already " + "going on with mech " << client->chosen_mech << " from " << + getPeerAddress(peer_id).serializeString() << + " (wantSudo=" << wantSudo << "). Ignoring." << std::endl; if (wantSudo) { - DenySudoAccess(pkt->getPeerId()); + DenySudoAccess(peer_id); return; } - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA); + DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA); return; } @@ -1649,19 +1584,19 @@ if (wantSudo) { if (!client->isSudoMechAllowed(chosen)) { - actionstream << "Server: Player \"" << client->getName() - << "\" at " << getPeerAddress(pkt->getPeerId()).serializeString() - << " tried to change password using unallowed mech " - << chosen << "." << std::endl; - DenySudoAccess(pkt->getPeerId()); + actionstream << "Server: Player \"" << client->getName() << + "\" at " << getPeerAddress(peer_id).serializeString() << + " tried to change password using unallowed mech " << chosen << + "." << std::endl; + DenySudoAccess(peer_id); return; } } else { if (!client->isMechAllowed(chosen)) { - actionstream << "Server: Client tried to authenticate from " - << getPeerAddress(pkt->getPeerId()).serializeString() - << " using unallowed mech " << chosen << "." << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA); + actionstream << "Server: Client tried to authenticate from " << + getPeerAddress(peer_id).serializeString() << + " using unallowed mech " << chosen << "." << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA); return; } } @@ -1677,10 +1612,10 @@ &verifier, &salt); } else if (!decode_srp_verifier_and_salt(client->enc_pwd, &verifier, &salt)) { // Non-base64 errors should have been catched in the init handler - actionstream << "Server: User " << client->getName() - << " tried to log in, but srp verifier field" - << " was invalid (most likely invalid base64)." << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL); + actionstream << "Server: User " << client->getName() << + " tried to log in, but srp verifier field was invalid (most likely " + "invalid base64)." << std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_SERVER_FAIL); return; } @@ -1700,23 +1635,26 @@ << " tried to log in, SRP-6a safety check violated in _A handler." << std::endl; if (wantSudo) { - DenySudoAccess(pkt->getPeerId()); + DenySudoAccess(peer_id); return; } - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA); + DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA); return; } - NetworkPacket resp_pkt(TOCLIENT_SRP_BYTES_S_B, 0, pkt->getPeerId()); + NetworkPacket resp_pkt(TOCLIENT_SRP_BYTES_S_B, 0, peer_id); resp_pkt << salt << std::string(bytes_B, len_B); Send(&resp_pkt); } void Server::handleCommand_SrpBytesM(NetworkPacket* pkt) { - RemoteClient* client = getClient(pkt->getPeerId(), CS_Invalid); + session_t peer_id = pkt->getPeerId(); + RemoteClient *client = getClient(peer_id, CS_Invalid); ClientState cstate = client->getState(); + std::string addr_s = getPeerAddress(pkt->getPeerId()).serializeString(); + std::string playername = client->getName(); bool wantSudo = (cstate == CS_Active); @@ -1724,8 +1662,7 @@ if (!((cstate == CS_HelloSent) || (cstate == CS_Active))) { actionstream << "Server: got SRP _M packet in wrong state " - << cstate << " from " - << getPeerAddress(pkt->getPeerId()).serializeString() + << cstate << " from " << addr_s << ". Ignoring." << std::endl; return; } @@ -1733,15 +1670,14 @@ if (client->chosen_mech != AUTH_MECHANISM_SRP && client->chosen_mech != AUTH_MECHANISM_LEGACY_PASSWORD) { actionstream << "Server: got SRP _M packet, while auth" - << "is going on with mech " << client->chosen_mech - << " from " << getPeerAddress(pkt->getPeerId()).serializeString() - << " (wantSudo=" << wantSudo << "). Denying." << std::endl; + << "is going on with mech " << client->chosen_mech << " from " + << addr_s << " (wantSudo=" << wantSudo << "). Denying." << std::endl; if (wantSudo) { - DenySudoAccess(pkt->getPeerId()); + DenySudoAccess(peer_id); return; } - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA); + DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA); return; } @@ -1750,10 +1686,9 @@ if (srp_verifier_get_session_key_length((SRPVerifier *) client->auth_data) != bytes_M.size()) { - actionstream << "Server: User " << client->getName() - << " at " << getPeerAddress(pkt->getPeerId()).serializeString() + actionstream << "Server: User " << playername << " at " << addr_s << " sent bytes_M with invalid length " << bytes_M.size() << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA); + DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA); return; } @@ -1764,39 +1699,36 @@ if (!bytes_HAMK) { if (wantSudo) { - actionstream << "Server: User " << client->getName() - << " at " << getPeerAddress(pkt->getPeerId()).serializeString() + actionstream << "Server: User " << playername << " at " << addr_s << " tried to change their password, but supplied wrong" << " (SRP) password for authentication." << std::endl; - DenySudoAccess(pkt->getPeerId()); + DenySudoAccess(peer_id); return; } - std::string ip = getPeerAddress(pkt->getPeerId()).serializeString(); - actionstream << "Server: User " << client->getName() - << " at " << ip - << " supplied wrong password (auth mechanism: SRP)." - << std::endl; - m_script->on_auth_failure(client->getName(), ip); - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_PASSWORD); + actionstream << "Server: User " << playername << " at " << addr_s + << " supplied wrong password (auth mechanism: SRP)." << std::endl; + m_script->on_authplayer(playername, addr_s, false); + DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_PASSWORD); return; } if (client->create_player_on_auth_success) { - std::string playername = client->getName(); m_script->createAuth(playername, client->enc_pwd); std::string checkpwd; // not used, but needed for passing something if (!m_script->getAuth(playername, &checkpwd, NULL)) { - actionstream << "Server: " << playername << " cannot be authenticated" - << " (auth handler does not work?)" << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL); + actionstream << "Server: " << playername << + " cannot be authenticated (auth handler does not work?)" << + std::endl; + DenyAccess(peer_id, SERVER_ACCESSDENIED_SERVER_FAIL); return; } client->create_player_on_auth_success = false; } - acceptAuth(pkt->getPeerId(), wantSudo); + m_script->on_authplayer(playername, addr_s, true); + acceptAuth(peer_id, wantSudo); } /* @@ -1808,20 +1740,21 @@ std::string channel_name; *pkt >> channel_name; - NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL, 1 + 2 + channel_name.size(), - pkt->getPeerId()); + session_t peer_id = pkt->getPeerId(); + NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL, + 1 + 2 + channel_name.size(), peer_id); // Send signal to client to notify join succeed or not if (g_settings->getBool("enable_mod_channels") && - m_modchannel_mgr->joinChannel(channel_name, pkt->getPeerId())) { + m_modchannel_mgr->joinChannel(channel_name, peer_id)) { resp_pkt << (u8) MODCHANNEL_SIGNAL_JOIN_OK; - infostream << "Peer " << pkt->getPeerId() << " joined channel " << channel_name - << std::endl; + infostream << "Peer " << peer_id << " joined channel " << + channel_name << std::endl; } else { resp_pkt << (u8)MODCHANNEL_SIGNAL_JOIN_FAILURE; - infostream << "Peer " << pkt->getPeerId() << " tried to join channel " - << channel_name << ", but was already registered." << std::endl; + infostream << "Peer " << peer_id << " tried to join channel " << + channel_name << ", but was already registered." << std::endl; } resp_pkt << channel_name; Send(&resp_pkt); @@ -1832,19 +1765,20 @@ std::string channel_name; *pkt >> channel_name; - NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL, 1 + 2 + channel_name.size(), - pkt->getPeerId()); + session_t peer_id = pkt->getPeerId(); + NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL, + 1 + 2 + channel_name.size(), peer_id); // Send signal to client to notify join succeed or not if (g_settings->getBool("enable_mod_channels") && - m_modchannel_mgr->leaveChannel(channel_name, pkt->getPeerId())) { + m_modchannel_mgr->leaveChannel(channel_name, peer_id)) { resp_pkt << (u8)MODCHANNEL_SIGNAL_LEAVE_OK; - infostream << "Peer " << pkt->getPeerId() << " left channel " << channel_name - << std::endl; + infostream << "Peer " << peer_id << " left channel " << channel_name << + std::endl; } else { resp_pkt << (u8) MODCHANNEL_SIGNAL_LEAVE_FAILURE; - infostream << "Peer " << pkt->getPeerId() << " left channel " << channel_name - << ", but was not registered." << std::endl; + infostream << "Peer " << peer_id << " left channel " << channel_name << + ", but was not registered." << std::endl; } resp_pkt << channel_name; Send(&resp_pkt); @@ -1855,8 +1789,10 @@ std::string channel_name, channel_msg; *pkt >> channel_name >> channel_msg; - verbosestream << "Mod channel message received from peer " << pkt->getPeerId() - << " on channel " << channel_name << " message: " << channel_msg << std::endl; + session_t peer_id = pkt->getPeerId(); + verbosestream << "Mod channel message received from peer " << peer_id << + " on channel " << channel_name << " message: " << channel_msg << + std::endl; // If mod channels are not enabled, discard message if (!g_settings->getBool("enable_mod_channels")) { @@ -1865,8 +1801,8 @@ // If channel not registered, signal it and ignore message if (!m_modchannel_mgr->channelRegistered(channel_name)) { - NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL, 1 + 2 + channel_name.size(), - pkt->getPeerId()); + NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL, + 1 + 2 + channel_name.size(), peer_id); resp_pkt << (u8)MODCHANNEL_SIGNAL_CHANNEL_NOT_REGISTERED << channel_name; Send(&resp_pkt); return; @@ -1874,5 +1810,5 @@ // @TODO: filter, rate limit - broadcastModChannelMessage(channel_name, channel_msg, pkt->getPeerId()); + broadcastModChannelMessage(channel_name, channel_msg, peer_id); } diff -Nru minetest-5.2.0/src/nodedef.cpp minetest-5.3.0/src/nodedef.cpp --- minetest-5.2.0/src/nodedef.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/nodedef.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -368,9 +368,12 @@ floodable = false; rightclickable = true; leveled = 0; + leveled_max = LEVELED_MAX; liquid_type = LIQUID_NONE; liquid_alternative_flowing = ""; + liquid_alternative_flowing_id = CONTENT_IGNORE; liquid_alternative_source = ""; + liquid_alternative_source_id = CONTENT_IGNORE; liquid_viscosity = 0; liquid_renewable = true; liquid_range = LIQUID_LEVEL_MAX+1; @@ -478,6 +481,7 @@ writeU8(os, legacy_wallmounted); os << serializeString(node_dig_prediction); + writeU8(os, leveled_max); } void ContentFeatures::correctAlpha(TileDef *tiles, int length) @@ -586,6 +590,10 @@ try { node_dig_prediction = deSerializeString(is); + u8 tmp_leveled_max = readU8(is); + if (is.eof()) /* readU8 doesn't throw exceptions so we have to do this */ + throw SerializationError(""); + leveled_max = tmp_leveled_max; } catch(SerializationError &e) {}; } @@ -600,8 +608,9 @@ layer->material_type = material_type; bool has_scale = tiledef.scale > 0; - if (((tsettings.autoscale_mode == AUTOSCALE_ENABLE) && !has_scale) || - (tsettings.autoscale_mode == AUTOSCALE_FORCE)) { + bool use_autoscale = tsettings.autoscale_mode == AUTOSCALE_FORCE || + (tsettings.autoscale_mode == AUTOSCALE_ENABLE && !has_scale); + if (use_autoscale && layer->texture) { auto texture_size = layer->texture->getOriginalSize(); float base_size = tsettings.node_texture_size; float size = std::fmin(texture_size.Width, texture_size.Height); @@ -1304,60 +1313,35 @@ } } -void NodeDefManager::applyTextureOverrides(const std::string &override_filepath) +void NodeDefManager::applyTextureOverrides(const std::vector &overrides) { infostream << "NodeDefManager::applyTextureOverrides(): Applying " - "overrides to textures from " << override_filepath << std::endl; - - std::ifstream infile(override_filepath.c_str()); - std::string line; - int line_c = 0; - while (std::getline(infile, line)) { - line_c++; - // Also trim '\r' on DOS-style files - line = trim(line); - if (line.empty()) - continue; - - std::vector splitted = str_split(line, ' '); - if (splitted.size() != 3) { - errorstream << override_filepath - << ":" << line_c << " Could not apply texture override \"" - << line << "\": Syntax error" << std::endl; - continue; - } + "overrides to textures" << std::endl; + for (const TextureOverride& texture_override : overrides) { content_t id; - if (!getId(splitted[0], id)) + if (!getId(texture_override.id, id)) continue; // Ignore unknown node ContentFeatures &nodedef = m_content_features[id]; - if (splitted[1] == "top") - nodedef.tiledef[0].name = splitted[2]; - else if (splitted[1] == "bottom") - nodedef.tiledef[1].name = splitted[2]; - else if (splitted[1] == "right") - nodedef.tiledef[2].name = splitted[2]; - else if (splitted[1] == "left") - nodedef.tiledef[3].name = splitted[2]; - else if (splitted[1] == "back") - nodedef.tiledef[4].name = splitted[2]; - else if (splitted[1] == "front") - nodedef.tiledef[5].name = splitted[2]; - else if (splitted[1] == "all" || splitted[1] == "*") - for (TileDef &i : nodedef.tiledef) - i.name = splitted[2]; - else if (splitted[1] == "sides") - for (int i = 2; i < 6; i++) - nodedef.tiledef[i].name = splitted[2]; - else { - errorstream << override_filepath - << ":" << line_c << " Could not apply texture override \"" - << line << "\": Unknown node side \"" - << splitted[1] << "\"" << std::endl; - continue; - } + if (texture_override.hasTarget(OverrideTarget::TOP)) + nodedef.tiledef[0].name = texture_override.texture; + + if (texture_override.hasTarget(OverrideTarget::BOTTOM)) + nodedef.tiledef[1].name = texture_override.texture; + + if (texture_override.hasTarget(OverrideTarget::RIGHT)) + nodedef.tiledef[2].name = texture_override.texture; + + if (texture_override.hasTarget(OverrideTarget::LEFT)) + nodedef.tiledef[3].name = texture_override.texture; + + if (texture_override.hasTarget(OverrideTarget::BACK)) + nodedef.tiledef[4].name = texture_override.texture; + + if (texture_override.hasTarget(OverrideTarget::FRONT)) + nodedef.tiledef[5].name = texture_override.texture; } } @@ -1458,11 +1442,15 @@ m_content_features.resize((u32)(i) + 1); m_content_features[i] = f; addNameIdMapping(i, f.name); - verbosestream << "deserialized " << f.name << std::endl; + TRACESTREAM(<< "NodeDef: deserialized " << f.name << std::endl); getNodeBoxUnion(f.selection_box, f, &m_selection_box_union); fixSelectionBoxIntUnion(); } + + // Since liquid_alternative_flowing_id and liquid_alternative_source_id + // are not sent, resolve them client-side too. + resolveCrossrefs(); } @@ -1523,15 +1511,28 @@ m_pending_resolve_callbacks.clear(); } -void NodeDefManager::mapNodeboxConnections() +static void removeDupes(std::vector &list) +{ + std::sort(list.begin(), list.end()); + auto new_end = std::unique(list.begin(), list.end()); + list.erase(new_end, list.end()); +} + +void NodeDefManager::resolveCrossrefs() { for (ContentFeatures &f : m_content_features) { + if (f.liquid_type != LIQUID_NONE) { + f.liquid_alternative_flowing_id = getId(f.liquid_alternative_flowing); + f.liquid_alternative_source_id = getId(f.liquid_alternative_source); + continue; + } if (f.drawtype != NDT_NODEBOX || f.node_box.type != NODEBOX_CONNECTED) continue; for (const std::string &name : f.connects_to) { getIds(name, f.connects_to_ids); } + removeDupes(f.connects_to_ids); } } @@ -1597,6 +1598,18 @@ } +void NodeResolver::cloneTo(NodeResolver *res) const +{ + FATAL_ERROR_IF(!m_resolve_done, "NodeResolver can only be cloned" + " after resolving has completed"); + /* We don't actually do anything significant. Since the node resolving has + * already completed, the class that called us will already have the + * resolved IDs in its data structures (which it copies on its own) */ + res->m_ndef = m_ndef; + res->m_resolve_done = true; +} + + void NodeResolver::nodeResolveInternal() { m_nodenames_idx = 0; diff -Nru minetest-5.2.0/src/nodedef.h minetest-5.3.0/src/nodedef.h --- minetest-5.2.0/src/nodedef.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/nodedef.h 2020-07-09 21:13:21.000000000 +0000 @@ -33,6 +33,7 @@ #include "itemgroup.h" #include "sound.h" // SimpleSoundSpec #include "constants.h" // BS +#include "texture_override.h" // TextureOverride #include "tileanimation.h" // PROTOCOL_VERSION >= 37 @@ -325,8 +326,10 @@ std::vector connects_to_ids; // Post effect color, drawn when the camera is inside the node. video::SColor post_effect_color; - // Flowing liquid or snow, value = default level + // Flowing liquid or leveled nodebox, value = default level u8 leveled; + // Maximum value for leveled nodes + u8 leveled_max; // --- LIGHTING-RELATED --- @@ -365,8 +368,10 @@ enum LiquidType liquid_type; // If the content is liquid, this is the flowing version of the liquid. std::string liquid_alternative_flowing; + content_t liquid_alternative_flowing_id; // If the content is liquid, this is the source version of the liquid. std::string liquid_alternative_source; + content_t liquid_alternative_source_id; // Viscosity for fluid flow, ranging from 1 to 7, with // 1 giving almost instantaneous propagation and 7 being // the slowest possible @@ -425,7 +430,7 @@ } bool sameLiquid(const ContentFeatures &f) const{ if(!isLiquid() || !f.isLiquid()) return false; - return (liquid_alternative_flowing == f.liquid_alternative_flowing); + return (liquid_alternative_flowing_id == f.liquid_alternative_flowing_id); } int getGroup(const std::string &group) const @@ -583,15 +588,12 @@ void updateAliases(IItemDefManager *idef); /*! - * Reads the used texture pack's override.txt, and replaces the textures - * of registered nodes with the ones specified there. + * Replaces the textures of registered nodes with the ones specified in + * the texturepack's override.txt file * - * Format of the input file: in each line - * `node_name top|bottom|right|left|front|back|all|*|sides texture_name.png` - * - * @param override_filepath path to 'texturepack/override.txt' + * @param overrides the texture overrides */ - void applyTextureOverrides(const std::string &override_filepath); + void applyTextureOverrides(const std::vector &overrides); /*! * Only the client uses this. Loads textures and shaders required for @@ -641,10 +643,11 @@ void resetNodeResolveState(); /*! - * Resolves the IDs to which connecting nodes connect from names. + * Resolves (caches the IDs) cross-references between nodes, + * like liquid alternatives. * Must be called after node registration has finished! */ - void mapNodeboxConnections(); + void resolveCrossrefs(); private: /*! @@ -741,6 +744,9 @@ virtual ~NodeResolver(); virtual void resolveNodeNames() = 0; + // required because this class is used as mixin for ObjDef + void cloneTo(NodeResolver *res) const; + bool getIdFromNrBacklog(content_t *result_out, const std::string &node_alt, content_t c_fallback, bool error_on_fallback = true); diff -Nru minetest-5.2.0/src/noise.cpp minetest-5.3.0/src/noise.cpp --- minetest-5.2.0/src/noise.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/noise.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -46,11 +46,6 @@ float v001, float v101, float v011, float v111, float x, float y, float z); -float cos_lookup[16] = { - 1.0f, 0.9238f, 0.7071f, 0.3826f, .0f, -0.3826f, -0.7071f, -0.9238f, - 1.0f, -0.9238f, -0.7071f, -0.3826f, .0f, 0.3826f, 0.7071f, 0.9238f -}; - FlagDesc flagdesc_noiseparams[] = { {"defaults", NOISE_FLAG_DEFAULTS}, {"eased", NOISE_FLAG_EASED}, diff -Nru minetest-5.2.0/src/objdef.cpp minetest-5.3.0/src/objdef.cpp --- minetest-5.2.0/src/objdef.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/objdef.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -182,3 +182,22 @@ *uid = get_bits(handle, 24, 7); return true; } + +// Cloning + +void ObjDef::cloneTo(ObjDef *def) const +{ + def->index = index; + def->uid = uid; + def->handle = handle; + def->name = name; +} + +void ObjDefManager::cloneTo(ObjDefManager *mgr) const +{ + mgr->m_ndef = m_ndef; + mgr->m_objects.reserve(m_objects.size()); + for (const auto &obj : m_objects) + mgr->m_objects.push_back(obj->clone()); + mgr->m_objtype = m_objtype; +} diff -Nru minetest-5.2.0/src/objdef.h minetest-5.3.0/src/objdef.h --- minetest-5.2.0/src/objdef.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/objdef.h 2020-07-09 21:13:21.000000000 +0000 @@ -45,21 +45,36 @@ public: virtual ~ObjDef() = default; + // Only implemented by child classes (leafs in class hierarchy) + // Should create new object of its own type, call cloneTo() of parent class + // and copy its own instance variables over + virtual ObjDef *clone() const = 0; + u32 index; u32 uid; ObjDefHandle handle; std::string name; + +protected: + // Only implemented by classes that have children themselves + // by copying the defintion and changing that argument type (!!!) + // Should defer to parent class cloneTo() if applicable and then copy + // over its own properties + void cloneTo(ObjDef *def) const; }; // WARNING: Ownership of ObjDefs is transferred to the ObjDefManager it is // added/set to. Note that ObjDefs managed by ObjDefManager are NOT refcounted, // so the same ObjDef instance must not be referenced multiple +// TODO: const correctness for getter methods class ObjDefManager { public: ObjDefManager(IGameDef *gamedef, ObjDefType type); virtual ~ObjDefManager(); DISABLE_CLASS_COPY(ObjDefManager); + // T *clone() const; // implemented in child class with correct type + virtual const char *getObjectTitle() const { return "ObjDef"; } virtual void clear(); @@ -88,6 +103,10 @@ ObjDefType *type, u32 *uid); protected: + ObjDefManager() {}; + // Helper for child classes to implement clone() + void cloneTo(ObjDefManager *mgr) const; + const NodeDefManager *m_ndef; std::vector m_objects; ObjDefType m_objtype; diff -Nru minetest-5.2.0/src/object_properties.cpp minetest-5.3.0/src/object_properties.cpp --- minetest-5.2.0/src/object_properties.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/object_properties.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -68,6 +68,8 @@ os << ", eye_height=" << eye_height; os << ", zoom_fov=" << zoom_fov; os << ", use_texture_alpha=" << use_texture_alpha; + os << ", damage_texture_modifier=" << damage_texture_modifier; + os << ", shaded=" << shaded; return os.str(); } @@ -114,6 +116,8 @@ writeF32(os, eye_height); writeF32(os, zoom_fov); writeU8(os, use_texture_alpha); + os << serializeString(damage_texture_modifier); + writeU8(os, shaded); // Add stuff only at the bottom. // Never remove anything, because we don't want new versions of this @@ -166,4 +170,11 @@ eye_height = readF32(is); zoom_fov = readF32(is); use_texture_alpha = readU8(is); + try { + damage_texture_modifier = deSerializeString(is); + u8 tmp = readU8(is); + if (is.eof()) + throw SerializationError(""); + shaded = tmp; + } catch (SerializationError &e) {} } diff -Nru minetest-5.2.0/src/object_properties.h minetest-5.3.0/src/object_properties.h --- minetest-5.2.0/src/object_properties.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/object_properties.h 2020-07-09 21:13:21.000000000 +0000 @@ -39,6 +39,7 @@ std::string mesh = ""; v3f visual_size = v3f(1, 1, 1); std::vector textures; + std::string damage_texture_modifier = "^[brighten"; std::vector colors; v2s16 spritediv = v2s16(1, 1); v2s16 initial_sprite_basepos; @@ -60,6 +61,7 @@ float eye_height = 1.625f; float zoom_fov = 0.0f; bool use_texture_alpha = false; + bool shaded = true; ObjectProperties(); std::string dump(); diff -Nru minetest-5.2.0/src/particles.cpp minetest-5.3.0/src/particles.cpp --- minetest-5.2.0/src/particles.cpp 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/particles.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,63 @@ +/* +Minetest +Copyright (C) 2020 sfan5 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "particles.h" +#include "util/serialize.h" + +void ParticleParameters::serialize(std::ostream &os, u16 protocol_ver) const +{ + writeV3F32(os, pos); + writeV3F32(os, vel); + writeV3F32(os, acc); + writeF32(os, expirationtime); + writeF32(os, size); + writeU8(os, collisiondetection); + os << serializeLongString(texture); + writeU8(os, vertical); + writeU8(os, collision_removal); + animation.serialize(os, 6); /* NOT the protocol ver */ + writeU8(os, glow); + writeU8(os, object_collision); + writeU16(os, node.param0); + writeU8(os, node.param2); + writeU8(os, node_tile); +} + +void ParticleParameters::deSerialize(std::istream &is, u16 protocol_ver) +{ + pos = readV3F32(is); + vel = readV3F32(is); + acc = readV3F32(is); + expirationtime = readF32(is); + size = readF32(is); + collisiondetection = readU8(is); + texture = deSerializeLongString(is); + vertical = readU8(is); + collision_removal = readU8(is); + animation.deSerialize(is, 6); /* NOT the protocol ver */ + glow = readU8(is); + object_collision = readU8(is); + // This is kinda awful + u16 tmp_param0 = readU16(is); + if (is.eof()) + return; + node.param0 = tmp_param0; + node.param2 = readU8(is); + node_tile = readU8(is); +} diff -Nru minetest-5.2.0/src/particles.h minetest-5.3.0/src/particles.h --- minetest-5.2.0/src/particles.h 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/particles.h 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,79 @@ +/* +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 +#include "irrlichttypes_bloated.h" +#include "tileanimation.h" +#include "mapnode.h" + +// This file defines the particle-related structures that both the server and +// client need. The ParticleManager and rendering is in client/particles.h + +struct CommonParticleParams { + bool collisiondetection = false; + bool collision_removal = false; + bool object_collision = false; + bool vertical = false; + std::string texture; + struct TileAnimationParams animation; + u8 glow = 0; + MapNode node; + u8 node_tile = 0; + + CommonParticleParams() { + animation.type = TAT_NONE; + node.setContent(CONTENT_IGNORE); + } + + /* This helper is useful for copying params from + * ParticleSpawnerParameters to ParticleParameters */ + inline void copyCommon(CommonParticleParams &to) const { + to.collisiondetection = collisiondetection; + to.collision_removal = collision_removal; + to.object_collision = object_collision; + to.vertical = vertical; + to.texture = texture; + to.animation = animation; + to.glow = glow; + to.node = node; + to.node_tile = node_tile; + } +}; + +struct ParticleParameters : CommonParticleParams { + v3f pos; + v3f vel; + v3f acc; + f32 expirationtime = 1; + f32 size = 1; + + void serialize(std::ostream &os, u16 protocol_ver) const; + void deSerialize(std::istream &is, u16 protocol_ver); +}; + +struct ParticleSpawnerParameters : CommonParticleParams { + u16 amount = 1; + v3f minpos, maxpos, minvel, maxvel, minacc, maxacc; + f32 time = 1; + f32 minexptime = 1, maxexptime = 1, minsize = 1, maxsize = 1; + + // For historical reasons no (de-)serialization methods here +}; diff -Nru minetest-5.2.0/src/pathfinder.cpp minetest-5.3.0/src/pathfinder.cpp --- minetest-5.2.0/src/pathfinder.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/pathfinder.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -23,8 +23,7 @@ /******************************************************************************/ #include "pathfinder.h" -#include "serverenvironment.h" -#include "server.h" +#include "map.h" #include "nodedef.h" //#define PATHFINDER_DEBUG @@ -180,10 +179,8 @@ class Pathfinder { public: - /** - * default constructor - */ - Pathfinder() = default; + Pathfinder() = delete; + Pathfinder(Map *map, const NodeDefManager *ndef) : m_map(map), m_ndef(ndef) {} ~Pathfinder(); @@ -197,8 +194,7 @@ * @param max_drop maximum number of blocks a path may drop * @param algo Algorithm to use for finding a path */ - std::vector getPath(ServerEnvironment *env, - v3s16 source, + std::vector getPath(v3s16 source, v3s16 destination, unsigned int searchdistance, unsigned int max_jump, @@ -328,7 +324,9 @@ friend class GridNodeContainer; GridNodeContainer *m_nodes_container = nullptr; - ServerEnvironment *m_env = 0; /**< minetest environment pointer */ + Map *m_map = nullptr; + + const NodeDefManager *m_ndef = nullptr; friend class PathfinderCompareHeuristic; @@ -410,18 +408,15 @@ /* implementation */ /******************************************************************************/ -std::vector get_path(ServerEnvironment* env, - v3s16 source, - v3s16 destination, - unsigned int searchdistance, - unsigned int max_jump, - unsigned int max_drop, - PathAlgorithm algo) +std::vector get_path(Map* map, const NodeDefManager *ndef, + v3s16 source, + v3s16 destination, + unsigned int searchdistance, + unsigned int max_jump, + unsigned int max_drop, + PathAlgorithm algo) { - Pathfinder searchclass; - - return searchclass.getPath(env, - source, destination, + return Pathfinder(map, ndef).getPath(source, destination, searchdistance, max_jump, max_drop, algo); } @@ -521,13 +516,13 @@ void GridNodeContainer::initNode(v3s16 ipos, PathGridnode *p_node) { - const NodeDefManager *ndef = m_pathf->m_env->getGameDef()->ndef(); + const NodeDefManager *ndef = m_pathf->m_ndef; PathGridnode &elem = *p_node; v3s16 realpos = m_pathf->getRealPos(ipos); - MapNode current = m_pathf->m_env->getMap().getNode(realpos); - MapNode below = m_pathf->m_env->getMap().getNode(realpos + v3s16(0, -1, 0)); + MapNode current = m_pathf->m_map->getNode(realpos); + MapNode below = m_pathf->m_map->getNode(realpos + v3s16(0, -1, 0)); if ((current.param0 == CONTENT_IGNORE) || @@ -610,8 +605,7 @@ /******************************************************************************/ -std::vector Pathfinder::getPath(ServerEnvironment *env, - v3s16 source, +std::vector Pathfinder::getPath(v3s16 source, v3s16 destination, unsigned int searchdistance, unsigned int max_jump, @@ -624,15 +618,8 @@ #endif std::vector retval; - //check parameters - if (env == 0) { - ERROR_TARGET << "Missing environment pointer" << std::endl; - return retval; - } - //initialization m_searchdistance = searchdistance; - m_env = env; m_maxjump = max_jump; m_maxdrop = max_drop; m_start = source; @@ -681,15 +668,14 @@ #endif //fail if source or destination is walkable - const NodeDefManager *ndef = m_env->getGameDef()->ndef(); - MapNode node_at_pos = m_env->getMap().getNode(destination); - if (ndef->get(node_at_pos).walkable) { + MapNode node_at_pos = m_map->getNode(destination); + if (m_ndef->get(node_at_pos).walkable) { VERBOSE_TARGET << "Destination is walkable. " << "Pos: " << PP(destination) << std::endl; return retval; } - node_at_pos = m_env->getMap().getNode(source); - if (ndef->get(node_at_pos).walkable) { + node_at_pos = m_map->getNode(source); + if (m_ndef->get(node_at_pos).walkable) { VERBOSE_TARGET << "Source is walkable. " << "Pos: " << PP(source) << std::endl; return retval; @@ -843,7 +829,6 @@ /******************************************************************************/ PathCost Pathfinder::calcCost(v3s16 pos, v3s16 dir) { - const NodeDefManager *ndef = m_env->getGameDef()->ndef(); PathCost retval; retval.updated = true; @@ -857,7 +842,7 @@ return retval; } - MapNode node_at_pos2 = m_env->getMap().getNode(pos2); + MapNode node_at_pos2 = m_map->getNode(pos2); //did we get information about node? if (node_at_pos2.param0 == CONTENT_IGNORE ) { @@ -866,9 +851,9 @@ return retval; } - if (!ndef->get(node_at_pos2).walkable) { + if (!m_ndef->get(node_at_pos2).walkable) { MapNode node_below_pos2 = - m_env->getMap().getNode(pos2 + v3s16(0, -1, 0)); + m_map->getNode(pos2 + v3s16(0, -1, 0)); //did we get information about node? if (node_below_pos2.param0 == CONTENT_IGNORE ) { @@ -878,7 +863,7 @@ } //test if the same-height neighbor is suitable - if (ndef->get(node_below_pos2).walkable) { + if (m_ndef->get(node_below_pos2).walkable) { //SUCCESS! retval.valid = true; retval.value = 1; @@ -889,19 +874,19 @@ else { //test if we can fall a couple of nodes (m_maxdrop) v3s16 testpos = pos2 + v3s16(0, -1, 0); - MapNode node_at_pos = m_env->getMap().getNode(testpos); + MapNode node_at_pos = m_map->getNode(testpos); while ((node_at_pos.param0 != CONTENT_IGNORE) && - (!ndef->get(node_at_pos).walkable) && + (!m_ndef->get(node_at_pos).walkable) && (testpos.Y > m_limits.MinEdge.Y)) { testpos += v3s16(0, -1, 0); - node_at_pos = m_env->getMap().getNode(testpos); + node_at_pos = m_map->getNode(testpos); } //did we find surface? if ((testpos.Y >= m_limits.MinEdge.Y) && (node_at_pos.param0 != CONTENT_IGNORE) && - (ndef->get(node_at_pos).walkable)) { + (m_ndef->get(node_at_pos).walkable)) { if ((pos2.Y - testpos.Y - 1) <= m_maxdrop) { //SUCCESS! retval.valid = true; @@ -927,34 +912,34 @@ v3s16 targetpos = pos2; // position for jump target v3s16 jumppos = pos; // position for checking if jumping space is free - MapNode node_target = m_env->getMap().getNode(targetpos); - MapNode node_jump = m_env->getMap().getNode(jumppos); + MapNode node_target = m_map->getNode(targetpos); + MapNode node_jump = m_map->getNode(jumppos); bool headbanger = false; // true if anything blocks jumppath while ((node_target.param0 != CONTENT_IGNORE) && - (ndef->get(node_target).walkable) && + (m_ndef->get(node_target).walkable) && (targetpos.Y < m_limits.MaxEdge.Y)) { //if the jump would hit any solid node, discard if ((node_jump.param0 == CONTENT_IGNORE) || - (ndef->get(node_jump).walkable)) { + (m_ndef->get(node_jump).walkable)) { headbanger = true; break; } targetpos += v3s16(0, 1, 0); jumppos += v3s16(0, 1, 0); - node_target = m_env->getMap().getNode(targetpos); - node_jump = m_env->getMap().getNode(jumppos); + node_target = m_map->getNode(targetpos); + node_jump = m_map->getNode(jumppos); } //check headbanger one last time if ((node_jump.param0 == CONTENT_IGNORE) || - (ndef->get(node_jump).walkable)) { + (m_ndef->get(node_jump).walkable)) { headbanger = true; } //did we find surface without banging our head? if ((!headbanger) && (targetpos.Y <= m_limits.MaxEdge.Y) && - (!ndef->get(node_target).walkable)) { + (!m_ndef->get(node_target).walkable)) { if (targetpos.Y - pos2.Y <= m_maxjump) { //SUCCESS! @@ -1254,21 +1239,20 @@ if (max_down == 0) return pos; v3s16 testpos = v3s16(pos); - MapNode node_at_pos = m_env->getMap().getNode(testpos); - const NodeDefManager *ndef = m_env->getGameDef()->ndef(); + MapNode node_at_pos = m_map->getNode(testpos); unsigned int down = 0; while ((node_at_pos.param0 != CONTENT_IGNORE) && - (!ndef->get(node_at_pos).walkable) && + (!m_ndef->get(node_at_pos).walkable) && (testpos.Y > m_limits.MinEdge.Y) && (down <= max_down)) { testpos += v3s16(0, -1, 0); down++; - node_at_pos = m_env->getMap().getNode(testpos); + node_at_pos = m_map->getNode(testpos); } //did we find surface? if ((testpos.Y >= m_limits.MinEdge.Y) && (node_at_pos.param0 != CONTENT_IGNORE) && - (ndef->get(node_at_pos).walkable)) { + (m_ndef->get(node_at_pos).walkable)) { if (down == 0) { pos = testpos; } else if ((down - 1) <= max_down) { diff -Nru minetest-5.2.0/src/pathfinder.h minetest-5.3.0/src/pathfinder.h --- minetest-5.2.0/src/pathfinder.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/pathfinder.h 2020-07-09 21:13:21.000000000 +0000 @@ -29,7 +29,8 @@ /* Forward declarations */ /******************************************************************************/ -class ServerEnvironment; +class NodeDefManager; +class Map; /******************************************************************************/ /* Typedefs and macros */ @@ -54,10 +55,10 @@ /******************************************************************************/ /** c wrapper function to use from scriptapi */ -std::vector get_path(ServerEnvironment *env, - v3s16 source, - v3s16 destination, - unsigned int searchdistance, - unsigned int max_jump, - unsigned int max_drop, - PathAlgorithm algo); +std::vector get_path(Map *map, const NodeDefManager *ndef, + v3s16 source, + v3s16 destination, + unsigned int searchdistance, + unsigned int max_jump, + unsigned int max_drop, + PathAlgorithm algo); diff -Nru minetest-5.2.0/src/player.h minetest-5.3.0/src/player.h --- minetest-5.2.0/src/player.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/player.h 2020-07-09 21:13:21.000000000 +0000 @@ -35,7 +35,13 @@ struct PlayerFovSpec { f32 fov; + + // Whether to multiply the client's FOV or to override it bool is_multiplier; + + // The time to be take to trasition to the new FOV value. + // Transition is instantaneous if omitted. Omitted by default. + f32 transition_time; }; struct PlayerControl @@ -186,12 +192,12 @@ void setFov(const PlayerFovSpec &spec) { - m_fov_spec = spec; + m_fov_override_spec = spec; } const PlayerFovSpec &getFov() const { - return m_fov_spec; + return m_fov_override_spec; } u32 keyPressed = 0; @@ -208,7 +214,7 @@ char m_name[PLAYERNAME_SIZE]; v3f m_speed; u16 m_wield_index = 0; - PlayerFovSpec m_fov_spec = { 0.0f, false }; + PlayerFovSpec m_fov_override_spec = { 0.0f, false, 0.0f }; std::vector hud; private: diff -Nru minetest-5.2.0/src/porting_android.cpp minetest-5.3.0/src/porting_android.cpp --- minetest-5.2.0/src/porting_android.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/porting_android.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -47,8 +47,7 @@ Thread::setName("Main"); try { - app_dummy(); - char *argv[] = {strdup(PROJECT_NAME), NULL}; + char *argv[] = {strdup(PROJECT_NAME), nullptr}; main(ARRLEN(argv) - 1, argv); free(argv[0]); } catch (std::exception &e) { @@ -64,96 +63,73 @@ exit(retval); } -/* handler for finished message box input */ -/* Intentionally NOT in namespace porting */ -/* TODO this doesn't work as expected, no idea why but there's a workaround */ -/* for it right now */ +/** + * Handler for finished message box input + * Intentionally NOT in namespace porting + * ToDo: this doesn't work as expected, there's a workaround for it right now + */ extern "C" { - JNIEXPORT void JNICALL Java_net_minetest_MtNativeActivity_putMessageBoxResult( - JNIEnv * env, jclass thiz, jstring text) + JNIEXPORT void JNICALL Java_net_minetest_minetest_GameActivity_putMessageBoxResult( + JNIEnv *env, jclass thiz, jstring text) { - errorstream << "Java_net_minetest_MtNativeActivity_putMessageBoxResult got: " - << std::string((const char*)env->GetStringChars(text,0)) - << std::endl; + errorstream << + "Java_net_minetest_minetest_GameActivity_putMessageBoxResult got: " << + std::string((const char*) env->GetStringChars(text, nullptr)) << std::endl; } } namespace porting { - -std::string path_storage = DIR_DELIM "sdcard" DIR_DELIM; - -android_app* app_global; -JNIEnv* jnienv; +android_app *app_global; +JNIEnv *jnienv; jclass nativeActivity; -jclass findClass(std::string classname) +jclass findClass(const std::string &classname) { - if (jnienv == 0) { - return 0; - } + if (jnienv == nullptr) + return nullptr; jclass nativeactivity = jnienv->FindClass("android/app/NativeActivity"); - jmethodID getClassLoader = - jnienv->GetMethodID(nativeactivity,"getClassLoader", - "()Ljava/lang/ClassLoader;"); - jobject cls = - jnienv->CallObjectMethod(app_global->activity->clazz, getClassLoader); + jmethodID getClassLoader = jnienv->GetMethodID( + nativeactivity, "getClassLoader", "()Ljava/lang/ClassLoader;"); + jobject cls = jnienv->CallObjectMethod( + app_global->activity->clazz, getClassLoader); jclass classLoader = jnienv->FindClass("java/lang/ClassLoader"); - jmethodID findClass = - jnienv->GetMethodID(classLoader, "loadClass", + jmethodID findClass = jnienv->GetMethodID(classLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); - jstring strClassName = - jnienv->NewStringUTF(classname.c_str()); + jstring strClassName = jnienv->NewStringUTF(classname.c_str()); return (jclass) jnienv->CallObjectMethod(cls, findClass, strClassName); } -void copyAssets() -{ - jmethodID assetcopy = jnienv->GetMethodID(nativeActivity,"copyAssets","()V"); - - if (assetcopy == 0) { - assert("porting::copyAssets unable to find copy assets method" == 0); - } - - jnienv->CallVoidMethod(app_global->activity->clazz, assetcopy); -} - void initAndroid() { - porting::jnienv = NULL; + porting::jnienv = nullptr; JavaVM *jvm = app_global->activity->vm; JavaVMAttachArgs lJavaVMAttachArgs; lJavaVMAttachArgs.version = JNI_VERSION_1_6; lJavaVMAttachArgs.name = PROJECT_NAME_C "NativeThread"; - lJavaVMAttachArgs.group = NULL; -#ifdef NDEBUG - // This is a ugly hack as arm v7a non debuggable builds crash without this - // printf ... if someone finds out why please fix it! - infostream << "Attaching native thread. " << std::endl; -#endif - if ( jvm->AttachCurrentThread(&porting::jnienv, &lJavaVMAttachArgs) == JNI_ERR) { + lJavaVMAttachArgs.group = nullptr; + + if (jvm->AttachCurrentThread(&porting::jnienv, &lJavaVMAttachArgs) == JNI_ERR) { errorstream << "Failed to attach native thread to jvm" << std::endl; exit(-1); } - nativeActivity = findClass("net/minetest/minetest/MtNativeActivity"); - if (nativeActivity == 0) { + nativeActivity = findClass("net/minetest/minetest/GameActivity"); + if (nativeActivity == nullptr) errorstream << "porting::initAndroid unable to find java native activity class" << std::endl; - } #ifdef GPROF - /* in the start-up code */ + // in the start-up code __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME_C, "Initializing GPROF profiler"); - monstartup("libminetest.so"); + monstartup("libMinetest.so"); #endif } void cleanupAndroid() { - #ifdef GPROF errorstream << "Shutting down GPROF profiler" << std::endl; setenv("CPUPROFILE", (path_user + DIR_DELIM + "gmon.out").c_str(), 1); @@ -168,7 +144,7 @@ { std::string str; // Get string as a UTF-8 c-string - const char *c_str = jnienv->GetStringUTFChars(js, NULL); + const char *c_str = jnienv->GetStringUTFChars(js, nullptr); // Save it str = c_str; // And free the c-string @@ -177,17 +153,15 @@ } // Calls static method if obj is NULL -static std::string getAndroidPath(jclass cls, jobject obj, jclass cls_File, - jmethodID mt_getAbsPath, const char *getter) +static std::string getAndroidPath( + jclass cls, jobject obj, jmethodID mt_getAbsPath, const char *getter) { // Get getter method jmethodID mt_getter; if (obj) - mt_getter = jnienv->GetMethodID(cls, getter, - "()Ljava/io/File;"); + mt_getter = jnienv->GetMethodID(cls, getter, "()Ljava/io/File;"); else - mt_getter = jnienv->GetStaticMethodID(cls, getter, - "()Ljava/io/File;"); + mt_getter = jnienv->GetStaticMethodID(cls, getter, "()Ljava/io/File;"); // Call getter jobject ob_file; @@ -197,8 +171,7 @@ ob_file = jnienv->CallStaticObjectMethod(cls, mt_getter); // Call getAbsolutePath - jstring js_path = (jstring) jnienv->CallObjectMethod(ob_file, - mt_getAbsPath); + auto js_path = (jstring) jnienv->CallObjectMethod(ob_file, mt_getAbsPath); return javaStringToUTF8(js_path); } @@ -212,26 +185,24 @@ // Get getAbsolutePath method jmethodID mt_getAbsPath = jnienv->GetMethodID(cls_File, "getAbsolutePath", "()Ljava/lang/String;"); + std::string path_storage = getAndroidPath(cls_Env, nullptr, + mt_getAbsPath, "getExternalStorageDirectory"); - path_cache = getAndroidPath(nativeActivity, app_global->activity->clazz, - cls_File, mt_getAbsPath, "getCacheDir"); - path_storage = getAndroidPath(cls_Env, NULL, cls_File, mt_getAbsPath, - "getExternalStorageDirectory"); path_user = path_storage + DIR_DELIM + PROJECT_NAME_C; path_share = path_storage + DIR_DELIM + PROJECT_NAME_C; - + path_cache = getAndroidPath(nativeActivity, + app_global->activity->clazz, mt_getAbsPath, "getCacheDir"); migrateCachePath(); } -void showInputDialog(const std::string& acceptButton, const std::string& hint, - const std::string& current, int editType) +void showInputDialog(const std::string &acceptButton, const std::string &hint, + const std::string ¤t, int editType) { - jmethodID showdialog = jnienv->GetMethodID(nativeActivity,"showDialog", + jmethodID showdialog = jnienv->GetMethodID(nativeActivity, "showDialog", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V"); - if (showdialog == 0) { - assert("porting::showInputDialog unable to find java show dialog method" == 0); - } + FATAL_ERROR_IF(showdialog == nullptr, + "porting::showInputDialog unable to find java show dialog method"); jstring jacceptButton = jnienv->NewStringUTF(acceptButton.c_str()); jstring jhint = jnienv->NewStringUTF(hint.c_str()); @@ -242,14 +213,25 @@ jacceptButton, jhint, jcurrent, jeditType); } +void openURLAndroid(const std::string &url) +{ + jmethodID url_open = jnienv->GetMethodID(nativeActivity, "openURL", + "(Ljava/lang/String;)V"); + + FATAL_ERROR_IF(url_open == nullptr, + "porting::openURLAndroid unable to find java openURL method"); + + jstring jurl = jnienv->NewStringUTF(url.c_str()); + jnienv->CallVoidMethod(app_global->activity->clazz, url_open, jurl); +} + int getInputDialogState() { jmethodID dialogstate = jnienv->GetMethodID(nativeActivity, "getDialogState", "()I"); - if (dialogstate == 0) { - assert("porting::getInputDialogState unable to find java dialog state method" == 0); - } + FATAL_ERROR_IF(dialogstate == nullptr, + "porting::getInputDialogState unable to find java dialog state method"); return jnienv->CallIntMethod(app_global->activity->clazz, dialogstate); } @@ -259,14 +241,13 @@ jmethodID dialogvalue = jnienv->GetMethodID(nativeActivity, "getDialogValue", "()Ljava/lang/String;"); - if (dialogvalue == 0) { - assert("porting::getInputDialogValue unable to find java dialog value method" == 0); - } + FATAL_ERROR_IF(dialogvalue == nullptr, + "porting::getInputDialogValue unable to find java dialog value method"); jobject result = jnienv->CallObjectMethod(app_global->activity->clazz, dialogvalue); - const char* javachars = jnienv->GetStringUTFChars((jstring) result,0); + const char *javachars = jnienv->GetStringUTFChars((jstring) result, nullptr); std::string text(javachars); jnienv->ReleaseStringUTFChars((jstring) result, javachars); @@ -280,12 +261,11 @@ static float value = 0; if (firstrun) { - jmethodID getDensity = jnienv->GetMethodID(nativeActivity, "getDensity", - "()F"); + jmethodID getDensity = jnienv->GetMethodID(nativeActivity, + "getDensity", "()F"); - if (getDensity == 0) { - assert("porting::getDisplayDensity unable to find java getDensity method" == 0); - } + FATAL_ERROR_IF(getDensity == nullptr, + "porting::getDisplayDensity unable to find java getDensity method"); value = jnienv->CallFloatMethod(app_global->activity->clazz, getDensity); firstrun = false; @@ -302,9 +282,8 @@ jmethodID getDisplayWidth = jnienv->GetMethodID(nativeActivity, "getDisplayWidth", "()I"); - if (getDisplayWidth == 0) { - assert("porting::getDisplayWidth unable to find java getDisplayWidth method" == 0); - } + FATAL_ERROR_IF(getDisplayWidth == nullptr, + "porting::getDisplayWidth unable to find java getDisplayWidth method"); retval.X = jnienv->CallIntMethod(app_global->activity->clazz, getDisplayWidth); @@ -312,9 +291,8 @@ jmethodID getDisplayHeight = jnienv->GetMethodID(nativeActivity, "getDisplayHeight", "()I"); - if (getDisplayHeight == 0) { - assert("porting::getDisplayHeight unable to find java getDisplayHeight method" == 0); - } + FATAL_ERROR_IF(getDisplayHeight == nullptr, + "porting::getDisplayHeight unable to find java getDisplayHeight method"); retval.Y = jnienv->CallIntMethod(app_global->activity->clazz, getDisplayHeight); diff -Nru minetest-5.2.0/src/porting_android.h minetest-5.3.0/src/porting_android.h --- minetest-5.2.0/src/porting_android.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/porting_android.h 2020-07-09 21:13:21.000000000 +0000 @@ -30,16 +30,15 @@ #include namespace porting { -/** java app **/ +// java app extern android_app *app_global; -/** java <-> c++ interaction interface **/ +// java <-> c++ interaction interface extern JNIEnv *jnienv; -/** - * do initialization required on android only - */ +// do initialization required on android only void initAndroid(); + void cleanupAndroid(); /** @@ -49,11 +48,6 @@ void initializePathsAndroid(); /** - * use java function to copy media from assets to external storage - */ -void copyAssets(); - -/** * show text input dialog in java * @param acceptButton text to display on accept button * @param hint hint to show @@ -61,8 +55,10 @@ * @param editType type of texfield * (1==multiline text input; 2==single line text input; 3=password field) */ -void showInputDialog(const std::string& acceptButton, - const std::string& hint, const std::string& current, int editType); +void showInputDialog(const std::string &acceptButton, + const std::string &hint, const std::string ¤t, int editType); + +void openURLAndroid(const std::string &url); /** * WORKAROUND for not working callbacks from java -> c++ @@ -80,5 +76,4 @@ float getDisplayDensity(); v2u32 getDisplaySize(); #endif - } diff -Nru minetest-5.2.0/src/porting.cpp minetest-5.3.0/src/porting.cpp --- minetest-5.2.0/src/porting.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/porting.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -28,27 +28,39 @@ #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) #include #include + extern char **environ; #elif defined(_WIN32) #include #include #include #include + #include #endif #if !defined(_WIN32) #include #include + #if !defined(__ANDROID__) + #include + #endif #endif #if defined(__hpux) #define _PSTAT64 #include #endif +#if defined(__ANDROID__) + #include "porting_android.h" +#endif +#if defined(__APPLE__) + // For _NSGetEnviron() + // Related: https://gitlab.haskell.org/ghc/ghc/issues/2458 + #include +#endif #include "config.h" #include "debug.h" #include "filesys.h" #include "log.h" #include "util/string.h" -#include "settings.h" #include #include #include @@ -598,18 +610,18 @@ #if USE_GETTEXT bool found_localedir = false; # ifdef STATIC_LOCALEDIR - if (STATIC_LOCALEDIR[0] && fs::PathExists(STATIC_LOCALEDIR)) { + /* STATIC_LOCALEDIR may be a generalized path such as /usr/share/locale that + * doesn't necessarily contain our locale files, so check data path first. */ + path_locale = getDataPath("locale"); + if (fs::PathExists(path_locale)) { + found_localedir = true; + infostream << "Using in-place locale directory " << path_locale + << " even though a static one was provided." << std::endl; + } else if (STATIC_LOCALEDIR[0] && fs::PathExists(STATIC_LOCALEDIR)) { found_localedir = true; path_locale = STATIC_LOCALEDIR; - infostream << "Using locale directory " << STATIC_LOCALEDIR << std::endl; - } else { - path_locale = getDataPath("locale"); - if (fs::PathExists(path_locale)) { - found_localedir = true; - infostream << "Using in-place locale directory " << path_locale - << " even though a static one was provided " - << "(RUN_IN_PLACE or CUSTOM_LOCALEDIR)." << std::endl; - } + infostream << "Using static locale directory " << STATIC_LOCALEDIR + << std::endl; } # else path_locale = getDataPath("locale"); @@ -697,6 +709,29 @@ return c; } +bool openURL(const std::string &url) +{ + if ((url.substr(0, 7) != "http://" && url.substr(0, 8) != "https://") || + url.find_first_of("\r\n") != std::string::npos) { + errorstream << "Invalid url: " << url << std::endl; + return false; + } + +#if defined(_WIN32) + return (intptr_t)ShellExecuteA(NULL, NULL, url.c_str(), NULL, NULL, SW_SHOWNORMAL) > 32; +#elif defined(__ANDROID__) + openURLAndroid(url); + return true; +#elif defined(__APPLE__) + const char *argv[] = {"open", url.c_str(), NULL}; + return posix_spawnp(NULL, "open", NULL, NULL, (char**)argv, + (*_NSGetEnviron())) == 0; +#else + const char *argv[] = {"xdg-open", url.c_str(), NULL}; + return posix_spawnp(NULL, "xdg-open", NULL, NULL, (char**)argv, environ) == 0; +#endif +} + // Load performance counter frequency only once at startup #ifdef _WIN32 diff -Nru minetest-5.2.0/src/porting.h minetest-5.3.0/src/porting.h --- minetest-5.2.0/src/porting.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/porting.h 2020-07-09 21:13:21.000000000 +0000 @@ -329,6 +329,9 @@ void attachOrCreateConsole(); int mt_snprintf(char *buf, const size_t buf_size, const char *fmt, ...); + +bool openURL(const std::string &url); + } // namespace porting #ifdef __ANDROID__ diff -Nru minetest-5.2.0/src/remoteplayer.cpp minetest-5.3.0/src/remoteplayer.cpp --- minetest-5.2.0/src/remoteplayer.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/remoteplayer.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -20,13 +20,13 @@ #include "remoteplayer.h" #include -#include "content_sao.h" #include "filesys.h" #include "gamedef.h" #include "porting.h" // strlcpy #include "server.h" #include "settings.h" #include "convert_json.h" +#include "server/player_sao.h" /* RemotePlayer @@ -74,9 +74,9 @@ m_skybox_params.sky_color = sky_defaults.getSkyColorDefaults(); m_skybox_params.type = "regular"; m_skybox_params.clouds = true; - m_skybox_params.sun_tint = video::SColor(255, 244, 125, 29); - m_skybox_params.moon_tint = video::SColorf(0.5, 0.6, 0.8, 1).toSColor(); - m_skybox_params.tint_type = "default"; + m_skybox_params.fog_sun_tint = video::SColor(255, 244, 125, 29); + m_skybox_params.fog_moon_tint = video::SColorf(0.5, 0.6, 0.8, 1).toSColor(); + m_skybox_params.fog_tint_type = "default"; m_sun_params = sky_defaults.getSunDefaults(); m_moon_params = sky_defaults.getMoonDefaults(); diff -Nru minetest-5.2.0/src/script/common/c_content.cpp minetest-5.3.0/src/script/common/c_content.cpp --- minetest-5.2.0/src/script/common/c_content.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/common/c_content.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -21,7 +21,7 @@ #include "common/c_types.h" #include "nodedef.h" #include "object_properties.h" -#include "content_sao.h" +#include "collision.h" #include "cpp_api/s_node.h" #include "lua_api/l_object.h" #include "lua_api/l_item.h" @@ -29,10 +29,10 @@ #include "server.h" #include "log.h" #include "tool.h" -#include "serverobject.h" #include "porting.h" #include "mapgen/mg_schematic.h" #include "noise.h" +#include "server/player_sao.h" #include "util/pointedthing.h" #include "debug.h" // For FATAL_ERROR #include @@ -103,7 +103,8 @@ lua_pop(L, 1); lua_getfield(L, index, "sounds"); - if(lua_istable(L, -1)){ + if (!lua_isnil(L, -1)) { + luaL_checktype(L, -1, LUA_TTABLE); lua_getfield(L, -1, "place"); read_soundspec(L, -1, def.sound_place); lua_pop(L, 1); @@ -163,7 +164,7 @@ lua_setfield(L, -2, "usable"); lua_pushboolean(L, i.liquids_pointable); lua_setfield(L, -2, "liquids_pointable"); - if (i.type == ITEM_TOOL) { + if (i.tool_capabilities) { push_tool_capabilities(L, *i.tool_capabilities); lua_setfield(L, -2, "tool_capabilities"); } @@ -183,9 +184,11 @@ { if(index < 0) index = lua_gettop(L) + 1 + index; - if(!lua_istable(L, index)) + if (lua_isnil(L, index)) return; + luaL_checktype(L, -1, LUA_TTABLE); + int hp_max = 0; if (getintfield(L, -1, "hp_max", hp_max)) { prop->hp_max = (u16)rangelim(hp_max, 0, U16_MAX); @@ -324,6 +327,9 @@ getfloatfield(L, -1, "zoom_fov", prop->zoom_fov); getboolfield(L, -1, "use_texture_alpha", prop->use_texture_alpha); + getboolfield(L, -1, "shaded", prop->shaded); + + getstringfield(L, -1, "damage_texture_modifier", prop->damage_texture_modifier); } /******************************************************************************/ @@ -351,7 +357,7 @@ push_v3f(L, prop->visual_size); lua_setfield(L, -2, "visual_size"); - lua_newtable(L); + lua_createtable(L, prop->textures.size(), 0); u16 i = 1; for (const std::string &texture : prop->textures) { lua_pushlstring(L, texture.c_str(), texture.size()); @@ -359,7 +365,7 @@ } lua_setfield(L, -2, "textures"); - lua_newtable(L); + lua_createtable(L, prop->colors.size(), 0); i = 1; for (const video::SColor &color : prop->colors) { push_ARGB8(L, color); @@ -406,6 +412,10 @@ lua_setfield(L, -2, "zoom_fov"); lua_pushboolean(L, prop->use_texture_alpha); lua_setfield(L, -2, "use_texture_alpha"); + lua_pushboolean(L, prop->shaded); + lua_setfield(L, -2, "shaded"); + lua_pushlstring(L, prop->damage_texture_modifier.c_str(), prop->damage_texture_modifier.size()); + lua_setfield(L, -2, "damage_texture_modifier"); } /******************************************************************************/ @@ -687,6 +697,8 @@ f.liquid_range = getintfield_default(L, index, "liquid_range", f.liquid_range); f.leveled = getintfield_default(L, index, "leveled", f.leveled); + f.leveled_max = getintfield_default(L, index, + "leveled_max", f.leveled_max); getboolfield(L, index, "liquid_renewable", f.liquid_renewable); f.drowning = getintfield_default(L, index, @@ -841,7 +853,7 @@ lua_pushnumber(L, c.connect_sides); lua_setfield(L, -2, "connect_sides"); - lua_newtable(L); + lua_createtable(L, c.connects_to.size(), 0); u16 i = 1; for (const std::string &it : c.connects_to) { lua_pushlstring(L, it.c_str(), it.size()); @@ -853,6 +865,8 @@ lua_setfield(L, -2, "post_effect_color"); lua_pushnumber(L, c.leveled); lua_setfield(L, -2, "leveled"); + lua_pushnumber(L, c.leveled_max); + lua_setfield(L, -2, "leveled_max"); lua_pushboolean(L, c.sunlight_propagates); lua_setfield(L, -2, "sunlight_propagates"); lua_pushnumber(L, c.light_source); @@ -964,7 +978,7 @@ void push_box(lua_State *L, const std::vector &box) { - lua_newtable(L); + lua_createtable(L, box.size(), 0); u8 i = 1; for (const aabb3f &it : box) { push_aabb3f(L, it); @@ -1028,20 +1042,22 @@ { if(index < 0) index = lua_gettop(L) + 1 + index; - if(lua_isnil(L, index)){ - } else if(lua_istable(L, index)){ + if (lua_isnil(L, index)) + return; + + if (lua_istable(L, index)) { getstringfield(L, index, "name", spec.name); getfloatfield(L, index, "gain", spec.gain); getfloatfield(L, index, "fade", spec.fade); getfloatfield(L, index, "pitch", spec.pitch); - } else if(lua_isstring(L, index)){ + } else if (lua_isstring(L, index)) { spec.name = lua_tostring(L, index); } } void push_soundspec(lua_State *L, const SimpleSoundSpec &spec) { - lua_newtable(L); + lua_createtable(L, 0, 3); lua_pushstring(L, spec.name.c_str()); lua_setfield(L, -2, "name"); lua_pushnumber(L, spec.gain); @@ -1056,9 +1072,13 @@ NodeBox read_nodebox(lua_State *L, int index) { NodeBox nodebox; - if(lua_istable(L, -1)){ - nodebox.type = (NodeBoxType)getenumfield(L, index, "type", - ScriptApiNode::es_NodeBoxType, NODEBOX_REGULAR); + if (lua_isnil(L, -1)) + return nodebox; + + luaL_checktype(L, -1, LUA_TTABLE); + + nodebox.type = (NodeBoxType)getenumfield(L, index, "type", + ScriptApiNode::es_NodeBoxType, NODEBOX_REGULAR); #define NODEBOXREAD(n, s){ \ lua_getfield(L, index, (s)); \ @@ -1068,30 +1088,30 @@ } #define NODEBOXREADVEC(n, s) \ - lua_getfield(L, index, (s)); \ - if (lua_istable(L, -1)) \ - (n) = read_aabb3f_vector(L, -1, BS); \ - lua_pop(L, 1); + lua_getfield(L, index, (s)); \ + if (lua_istable(L, -1)) \ + (n) = read_aabb3f_vector(L, -1, BS); \ + lua_pop(L, 1); + + NODEBOXREADVEC(nodebox.fixed, "fixed"); + NODEBOXREAD(nodebox.wall_top, "wall_top"); + NODEBOXREAD(nodebox.wall_bottom, "wall_bottom"); + NODEBOXREAD(nodebox.wall_side, "wall_side"); + NODEBOXREADVEC(nodebox.connect_top, "connect_top"); + NODEBOXREADVEC(nodebox.connect_bottom, "connect_bottom"); + NODEBOXREADVEC(nodebox.connect_front, "connect_front"); + NODEBOXREADVEC(nodebox.connect_left, "connect_left"); + NODEBOXREADVEC(nodebox.connect_back, "connect_back"); + NODEBOXREADVEC(nodebox.connect_right, "connect_right"); + NODEBOXREADVEC(nodebox.disconnected_top, "disconnected_top"); + NODEBOXREADVEC(nodebox.disconnected_bottom, "disconnected_bottom"); + NODEBOXREADVEC(nodebox.disconnected_front, "disconnected_front"); + NODEBOXREADVEC(nodebox.disconnected_left, "disconnected_left"); + NODEBOXREADVEC(nodebox.disconnected_back, "disconnected_back"); + NODEBOXREADVEC(nodebox.disconnected_right, "disconnected_right"); + NODEBOXREADVEC(nodebox.disconnected, "disconnected"); + NODEBOXREADVEC(nodebox.disconnected_sides, "disconnected_sides"); - NODEBOXREADVEC(nodebox.fixed, "fixed"); - NODEBOXREAD(nodebox.wall_top, "wall_top"); - NODEBOXREAD(nodebox.wall_bottom, "wall_bottom"); - NODEBOXREAD(nodebox.wall_side, "wall_side"); - NODEBOXREADVEC(nodebox.connect_top, "connect_top"); - NODEBOXREADVEC(nodebox.connect_bottom, "connect_bottom"); - NODEBOXREADVEC(nodebox.connect_front, "connect_front"); - NODEBOXREADVEC(nodebox.connect_left, "connect_left"); - NODEBOXREADVEC(nodebox.connect_back, "connect_back"); - NODEBOXREADVEC(nodebox.connect_right, "connect_right"); - NODEBOXREADVEC(nodebox.disconnected_top, "disconnected_top"); - NODEBOXREADVEC(nodebox.disconnected_bottom, "disconnected_bottom"); - NODEBOXREADVEC(nodebox.disconnected_front, "disconnected_front"); - NODEBOXREADVEC(nodebox.disconnected_left, "disconnected_left"); - NODEBOXREADVEC(nodebox.disconnected_back, "disconnected_back"); - NODEBOXREADVEC(nodebox.disconnected_right, "disconnected_right"); - NODEBOXREADVEC(nodebox.disconnected, "disconnected"); - NODEBOXREADVEC(nodebox.disconnected_sides, "disconnected_sides"); - } return nodebox; } @@ -1126,12 +1146,12 @@ /******************************************************************************/ void pushnode(lua_State *L, const MapNode &n, const NodeDefManager *ndef) { - lua_newtable(L); + lua_createtable(L, 0, 3); lua_pushstring(L, ndef->get(n).name.c_str()); lua_setfield(L, -2, "name"); - lua_pushnumber(L, n.getParam1()); + lua_pushinteger(L, n.getParam1()); lua_setfield(L, -2, "param1"); - lua_pushnumber(L, n.getParam2()); + lua_pushinteger(L, n.getParam2()); lua_setfield(L, -2, "param2"); } @@ -1164,7 +1184,7 @@ { const EnumString *esp = spec; while(esp->str){ - if(str == std::string(esp->str)){ + if (!strcmp(str.c_str(), esp->str)) { result = esp->num; return true; } @@ -1439,7 +1459,7 @@ /******************************************************************************/ void push_dig_params(lua_State *L,const DigParams ¶ms) { - lua_newtable(L); + lua_createtable(L, 0, 3); setboolfield(L, -1, "diggable", params.diggable); setfloatfield(L, -1, "time", params.time); setintfield(L, -1, "wear", params.wear); @@ -1448,7 +1468,7 @@ /******************************************************************************/ void push_hit_params(lua_State *L,const HitParams ¶ms) { - lua_newtable(L); + lua_createtable(L, 0, 3); setintfield(L, -1, "hp", params.hp); setintfield(L, -1, "wear", params.wear); } @@ -1520,8 +1540,11 @@ /******************************************************************************/ void read_groups(lua_State *L, int index, ItemGroupList &result) { - if (!lua_istable(L,index)) + if (lua_isnil(L, index)) return; + + luaL_checktype(L, index, LUA_TTABLE); + result.clear(); lua_pushnil(L); if (index < 0) @@ -1541,9 +1564,9 @@ /******************************************************************************/ void push_groups(lua_State *L, const ItemGroupList &groups) { - lua_newtable(L); + lua_createtable(L, 0, groups.size()); for (const auto &group : groups) { - lua_pushnumber(L, group.second); + lua_pushinteger(L, group.second); lua_setfield(L, -2, group.first.c_str()); } } @@ -1588,7 +1611,7 @@ lua_getglobal(L, "core"); lua_getfield(L, -1, "luaentities"); luaL_checktype(L, -1, LUA_TTABLE); - lua_pushnumber(L, id); + lua_pushinteger(L, id); lua_gettable(L, -2); lua_remove(L, -2); // Remove luaentities lua_remove(L, -2); // Remove core @@ -1672,10 +1695,10 @@ lua_pushvalue(L, nullindex); break; case Json::intValue: - lua_pushinteger(L, value.asInt()); + lua_pushinteger(L, value.asLargestInt()); break; case Json::uintValue: - lua_pushinteger(L, value.asUInt()); + lua_pushinteger(L, value.asLargestUInt()); break; case Json::realValue: lua_pushnumber(L, value.asDouble()); @@ -1690,7 +1713,7 @@ lua_pushboolean(L, value.asInt()); break; case Json::arrayValue: - lua_newtable(L); + lua_createtable(L, value.size(), 0); for (Json::Value::const_iterator it = value.begin(); it != value.end(); ++it) { push_json_value_helper(L, *it, nullindex); @@ -1698,10 +1721,10 @@ } break; case Json::objectValue: - lua_newtable(L); + lua_createtable(L, 0, value.size()); for (Json::Value::const_iterator it = value.begin(); it != value.end(); ++it) { -#ifndef JSONCPP_STRING +#if !defined(JSONCPP_STRING) && (JSONCPP_VERSION_MAJOR < 1 || JSONCPP_VERSION_MINOR < 9) const char *str = it.memberName(); lua_pushstring(L, str ? str : ""); #else @@ -1825,7 +1848,7 @@ lua_getglobal(L, "core"); lua_getfield(L, -1, "object_refs"); luaL_checktype(L, -1, LUA_TTABLE); - lua_pushnumber(L, id); + lua_pushinteger(L, id); lua_gettable(L, -2); lua_remove(L, -2); // object_refs lua_remove(L, -2); // core @@ -1851,10 +1874,15 @@ elem->name = getstringfield_default(L, 2, "name", ""); elem->text = getstringfield_default(L, 2, "text", ""); elem->number = getintfield_default(L, 2, "number", 0); - elem->item = getintfield_default(L, 2, "item", 0); + if (elem->type == HUD_ELEM_WAYPOINT) + // waypoints reuse the item field to store precision, item = precision + 1 + elem->item = getintfield_default(L, 2, "precision", -1) + 1; + else + elem->item = getintfield_default(L, 2, "item", 0); elem->dir = getintfield_default(L, 2, "direction", 0); elem->z_index = MYMAX(S16_MIN, MYMIN(S16_MAX, getintfield_default(L, 2, "z_index", 0))); + elem->text2 = getstringfield_default(L, 2, "text2", ""); // Deprecated, only for compatibility's sake if (elem->dir == 0) @@ -1923,6 +1951,9 @@ lua_pushnumber(L, elem->z_index); lua_setfield(L, -2, "z_index"); + + lua_pushstring(L, elem->text2.c_str()); + lua_setfield(L, -2, "text2"); } HudElementStat read_hud_change(lua_State *L, HudElement *elem, void **value) @@ -1984,6 +2015,66 @@ elem->z_index = MYMAX(S16_MIN, MYMIN(S16_MAX, luaL_checknumber(L, 4))); *value = &elem->z_index; break; + case HUD_STAT_TEXT2: + elem->text2 = luaL_checkstring(L, 4); + *value = &elem->text2; + break; } return stat; } + +/******************************************************************************/ + +// Indices must match values in `enum CollisionType` exactly!! +static const char *collision_type_str[] = { + "node", + "object", +}; + +// Indices must match values in `enum CollisionAxis` exactly!! +static const char *collision_axis_str[] = { + "x", + "y", + "z", +}; + +void push_collision_move_result(lua_State *L, const collisionMoveResult &res) +{ + lua_createtable(L, 0, 4); + + setboolfield(L, -1, "touching_ground", res.touching_ground); + setboolfield(L, -1, "collides", res.collides); + setboolfield(L, -1, "standing_on_object", res.standing_on_object); + + /* collisions */ + lua_createtable(L, res.collisions.size(), 0); + int i = 1; + for (const auto &c : res.collisions) { + lua_createtable(L, 0, 5); + + lua_pushstring(L, collision_type_str[c.type]); + lua_setfield(L, -2, "type"); + + assert(c.axis != COLLISION_AXIS_NONE); + lua_pushstring(L, collision_axis_str[c.axis]); + lua_setfield(L, -2, "axis"); + + if (c.type == COLLISION_NODE) { + push_v3s16(L, c.node_p); + lua_setfield(L, -2, "node_pos"); + } else if (c.type == COLLISION_OBJECT) { + push_objectRef(L, c.object->getId()); + lua_setfield(L, -2, "object"); + } + + push_v3f(L, c.old_speed / BS); + lua_setfield(L, -2, "old_velocity"); + + push_v3f(L, c.new_speed / BS); + lua_setfield(L, -2, "new_velocity"); + + lua_rawseti(L, -2, i++); + } + lua_setfield(L, -2, "collisions"); + /**/ +} diff -Nru minetest-5.2.0/src/script/common/c_content.h minetest-5.3.0/src/script/common/c_content.h --- minetest-5.2.0/src/script/common/c_content.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/common/c_content.h 2020-07-09 21:13:21.000000000 +0000 @@ -63,7 +63,9 @@ struct NoiseParams; class Schematic; class ServerActiveObject; +struct collisionMoveResult; +extern struct EnumString es_TileAnimationType[]; ContentFeatures read_content_features (lua_State *L, int index); void push_content_features (lua_State *L, @@ -196,4 +198,4 @@ HudElementStat read_hud_change (lua_State *L, HudElement *elem, void **value); -extern struct EnumString es_TileAnimationType[]; +void push_collision_move_result(lua_State *L, const collisionMoveResult &res); diff -Nru minetest-5.2.0/src/script/common/c_converter.cpp minetest-5.3.0/src/script/common/c_converter.cpp --- minetest-5.2.0/src/script/common/c_converter.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/common/c_converter.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -28,15 +28,15 @@ #include "common/c_converter.h" #include "common/c_internal.h" #include "constants.h" +#include #define CHECK_TYPE(index, name, type) { \ int t = lua_type(L, (index)); \ if (t != (type)) { \ - std::string traceback = script_get_backtrace(L); \ throw LuaError(std::string("Invalid ") + (name) + \ " (expected " + lua_typename(L, (type)) + \ - " got " + lua_typename(L, t) + ").\n" + traceback); \ + " got " + lua_typename(L, t) + ")."); \ } \ } #define CHECK_POS_COORD(name) CHECK_TYPE(-1, "position coordinate '" name "'", LUA_TNUMBER) @@ -62,7 +62,7 @@ void push_v3f(lua_State *L, v3f p) { - lua_newtable(L); + lua_createtable(L, 0, 3); lua_pushnumber(L, p.X); lua_setfield(L, -2, "x"); lua_pushnumber(L, p.Y); @@ -73,7 +73,7 @@ void push_v2f(lua_State *L, v2f p) { - lua_newtable(L); + lua_createtable(L, 0, 2); lua_pushnumber(L, p.X); lua_setfield(L, -2, "x"); lua_pushnumber(L, p.Y); @@ -82,7 +82,7 @@ void push_v3_float_string(lua_State *L, v3f p) { - lua_newtable(L); + lua_createtable(L, 0, 3); push_float_string(L, p.X); lua_setfield(L, -2, "x"); push_float_string(L, p.Y); @@ -93,7 +93,7 @@ void push_v2_float_string(lua_State *L, v2f p) { - lua_newtable(L); + lua_createtable(L, 0, 2); push_float_string(L, p.X); lua_setfield(L, -2, "x"); push_float_string(L, p.Y); @@ -115,19 +115,19 @@ void push_v2s16(lua_State *L, v2s16 p) { - lua_newtable(L); - lua_pushnumber(L, p.X); + lua_createtable(L, 0, 2); + lua_pushinteger(L, p.X); lua_setfield(L, -2, "x"); - lua_pushnumber(L, p.Y); + lua_pushinteger(L, p.Y); lua_setfield(L, -2, "y"); } void push_v2s32(lua_State *L, v2s32 p) { - lua_newtable(L); - lua_pushnumber(L, p.X); + lua_createtable(L, 0, 2); + lua_pushinteger(L, p.X); lua_setfield(L, -2, "x"); - lua_pushnumber(L, p.Y); + lua_pushinteger(L, p.Y); lua_setfield(L, -2, "y"); } @@ -250,14 +250,14 @@ void push_ARGB8(lua_State *L, video::SColor color) { - lua_newtable(L); - lua_pushnumber(L, color.getAlpha()); + lua_createtable(L, 0, 4); + lua_pushinteger(L, color.getAlpha()); lua_setfield(L, -2, "a"); - lua_pushnumber(L, color.getRed()); + lua_pushinteger(L, color.getRed()); lua_setfield(L, -2, "r"); - lua_pushnumber(L, color.getGreen()); + lua_pushinteger(L, color.getGreen()); lua_setfield(L, -2, "g"); - lua_pushnumber(L, color.getBlue()); + lua_pushinteger(L, color.getBlue()); lua_setfield(L, -2, "b"); } @@ -274,12 +274,12 @@ void push_v3s16(lua_State *L, v3s16 p) { - lua_newtable(L); - lua_pushnumber(L, p.X); + lua_createtable(L, 0, 3); + lua_pushinteger(L, p.X); lua_setfield(L, -2, "x"); - lua_pushnumber(L, p.Y); + lua_pushinteger(L, p.Y); lua_setfield(L, -2, "y"); - lua_pushnumber(L, p.Z); + lua_pushinteger(L, p.Z); lua_setfield(L, -2, "z"); } @@ -386,7 +386,7 @@ void push_aabb3f(lua_State *L, aabb3f box) { - lua_newtable(L); + lua_createtable(L, 6, 0); lua_pushnumber(L, box.MinEdge.X); lua_rawseti(L, -2, 1); lua_pushnumber(L, box.MinEdge.Y); @@ -457,12 +457,55 @@ Table field getters */ +#if defined(__MINGW32__) && !defined(__MINGW64__) +/* MinGW 32-bit somehow crashes in the std::set destructor when this + * variable is thread-local, so just don't do that. */ +static std::set warned_msgs; +#endif + +bool check_field_or_nil(lua_State *L, int index, int type, const char *fieldname) +{ +#if !defined(__MINGW32__) || defined(__MINGW64__) + thread_local std::set warned_msgs; +#endif + + int t = lua_type(L, index); + if (t == LUA_TNIL) + return false; + + if (t == type) + return true; + + // Check coercion types + if (type == LUA_TNUMBER) { + if (lua_isnumber(L, index)) + return true; + } else if (type == LUA_TSTRING) { + if (lua_isstring(L, index)) + return true; + } + + // Types mismatch. Log unique line. + std::string backtrace = std::string("Invalid field ") + fieldname + + " (expected " + lua_typename(L, type) + + " got " + lua_typename(L, t) + ").\n" + script_get_backtrace(L); + + u64 hash = murmur_hash_64_ua(backtrace.data(), backtrace.length(), 0xBADBABE); + if (warned_msgs.find(hash) == warned_msgs.end()) { + errorstream << backtrace << std::endl; + warned_msgs.insert(hash); + } + + return false; +} + bool getstringfield(lua_State *L, int table, const char *fieldname, std::string &result) { lua_getfield(L, table, fieldname); bool got = false; - if(lua_isstring(L, -1)){ + + if (check_field_or_nil(L, -1, LUA_TSTRING, fieldname)) { size_t len = 0; const char *ptr = lua_tolstring(L, -1, &len); if (ptr) { @@ -479,7 +522,8 @@ { lua_getfield(L, table, fieldname); bool got = false; - if(lua_isnumber(L, -1)){ + + if (check_field_or_nil(L, -1, LUA_TNUMBER, fieldname)) { result = lua_tonumber(L, -1); got = true; } @@ -492,7 +536,8 @@ { lua_getfield(L, table, fieldname); bool got = false; - if(lua_isboolean(L, -1)){ + + if (check_field_or_nil(L, -1, LUA_TBOOLEAN, fieldname)){ result = lua_toboolean(L, -1); got = true; } @@ -511,17 +556,6 @@ return num_strings_read; } -std::string checkstringfield(lua_State *L, int table, - const char *fieldname) -{ - lua_getfield(L, table, fieldname); - CHECK_TYPE(-1, std::string("field \"") + fieldname + '"', LUA_TSTRING); - size_t len; - const char *s = lua_tolstring(L, -1, &len); - lua_pop(L, 1); - return std::string(s, len); -} - std::string getstringfield_default(lua_State *L, int table, const char *fieldname, const std::string &default_) { diff -Nru minetest-5.2.0/src/script/common/c_converter.h minetest-5.3.0/src/script/common/c_converter.h --- minetest-5.2.0/src/script/common/c_converter.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/common/c_converter.h 2020-07-09 21:13:21.000000000 +0000 @@ -45,13 +45,15 @@ int getintfield_default(lua_State *L, int table, const char *fieldname, int default_); +bool check_field_or_nil(lua_State *L, int index, int type, const char *fieldname); + template bool getintfield(lua_State *L, int table, const char *fieldname, T &result) { lua_getfield(L, table, fieldname); bool got = false; - if (lua_isnumber(L, -1)){ + if (check_field_or_nil(L, -1, LUA_TNUMBER, fieldname)){ result = lua_tointeger(L, -1); got = true; } @@ -87,8 +89,6 @@ const char *fieldname, bool &result); bool getfloatfield(lua_State *L, int table, const char *fieldname, float &result); -std::string checkstringfield(lua_State *L, int table, - const char *fieldname); void setstringfield(lua_State *L, int table, const char *fieldname, const std::string &value); diff -Nru minetest-5.2.0/src/script/common/c_internal.cpp minetest-5.3.0/src/script/common/c_internal.cpp --- minetest-5.2.0/src/script/common/c_internal.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/common/c_internal.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -157,9 +157,9 @@ void log_deprecated(lua_State *L, const std::string &message, int stack_depth) { - static bool configured = false; - static bool do_log = false; - static bool do_error = false; + static thread_local bool configured = false; + static thread_local bool do_log = false; + static thread_local bool do_error = false; // Only read settings on first call if (!configured) { @@ -167,9 +167,10 @@ if (value == "log") { do_log = true; } else if (value == "error") { - do_log = true; + do_log = true; do_error = true; } + configured = true; } if (do_log) diff -Nru minetest-5.2.0/src/script/common/c_internal.h minetest-5.3.0/src/script/common/c_internal.h --- minetest-5.2.0/src/script/common/c_internal.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/common/c_internal.h 2020-07-09 21:13:21.000000000 +0000 @@ -31,6 +31,7 @@ #include } +#include "config.h" #include "common/c_types.h" @@ -54,6 +55,15 @@ #define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2) #define CUSTOM_RIDX_BACKTRACE (CUSTOM_RIDX_BASE + 3) +// Determine if CUSTOM_RIDX_SCRIPTAPI will hold a light or full userdata +#if defined(__aarch64__) && USE_LUAJIT +/* LuaJIT has a 47-bit limit for lightuserdata on this platform and we cannot + * assume that the ScriptApi class was allocated at a fitting address. */ +#define INDIRECT_SCRIPTAPI_RIDX 1 +#else +#define INDIRECT_SCRIPTAPI_RIDX 0 +#endif + // Pushes the error handler onto the stack and returns its index #define PUSH_ERROR_HANDLER(L) \ (lua_rawgeti((L), LUA_REGISTRYINDEX, CUSTOM_RIDX_BACKTRACE), lua_gettop((L))) diff -Nru minetest-5.2.0/src/script/cpp_api/s_base.cpp minetest-5.3.0/src/script/cpp_api/s_base.cpp --- minetest-5.2.0/src/script/cpp_api/s_base.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/cpp_api/s_base.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -22,7 +22,7 @@ #include "cpp_api/s_security.h" #include "lua_api/l_object.h" #include "common/c_converter.h" -#include "serverobject.h" +#include "server/player_sao.h" #include "filesys.h" #include "content/mods.h" #include "porting.h" @@ -43,7 +43,6 @@ #include #include #include "script/common/c_content.h" -#include "content_sao.h" #include @@ -90,7 +89,11 @@ luaL_openlibs(m_luastack); // Make the ScriptApiBase* accessible to ModApiBase +#if INDIRECT_SCRIPTAPI_RIDX + *(void **)(lua_newuserdata(m_luastack, sizeof(void *))) = this; +#else lua_pushlightuserdata(m_luastack, this); +#endif lua_rawseti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI); // Add and save an error handler @@ -184,7 +187,9 @@ } ok = ok && !lua_pcall(L, 0, 0, error_handler); if (!ok) { - std::string error_msg = readParam(L, -1); + const char *error_msg = lua_tostring(L, -1); + if (!error_msg) + error_msg = "(error object is not a string)"; lua_pop(L, 2); // Pop error message and error handler throw ModError("Failed to load and run script from " + script_path + ":\n" + error_msg); @@ -216,7 +221,9 @@ if (ok) ok = !lua_pcall(L, 0, 0, error_handler); if (!ok) { - std::string error_msg = luaL_checkstring(L, -1); + const char *error_msg = lua_tostring(L, -1); + if (!error_msg) + error_msg = "(error object is not a string)"; lua_pop(L, 2); // Pop error message and error handler throw ModError("Failed to load and run mod \"" + mod_name + "\":\n" + error_msg); diff -Nru minetest-5.2.0/src/script/cpp_api/s_base.h minetest-5.3.0/src/script/cpp_api/s_base.h --- minetest-5.2.0/src/script/cpp_api/s_base.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/cpp_api/s_base.h 2020-07-09 21:13:21.000000000 +0000 @@ -136,8 +136,10 @@ Environment* getEnv() { return m_environment; } void setEnv(Environment* env) { m_environment = env; } +#ifndef SERVER GUIEngine* getGuiEngine() { return m_guiengine; } void setGuiEngine(GUIEngine* guiengine) { m_guiengine = guiengine; } +#endif void objectrefGetOrCreate(lua_State *L, ServerActiveObject *cobj); @@ -158,6 +160,8 @@ IGameDef *m_gamedef = nullptr; Environment *m_environment = nullptr; +#ifndef SERVER GUIEngine *m_guiengine = nullptr; +#endif ScriptingType m_type; }; diff -Nru minetest-5.2.0/src/script/cpp_api/s_entity.cpp minetest-5.3.0/src/script/cpp_api/s_entity.cpp --- minetest-5.2.0/src/script/cpp_api/s_entity.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/cpp_api/s_entity.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -178,12 +178,11 @@ lua_pop(L, 1); } -void ScriptApiEntity::luaentity_Step(u16 id, float dtime) +void ScriptApiEntity::luaentity_Step(u16 id, float dtime, + const collisionMoveResult *moveresult) { SCRIPTAPI_PRECHECKHEADER - //infostream<<"scriptapi_luaentity_step: id="<getGameDef(); if (!gamedef) diff -Nru minetest-5.2.0/src/script/cpp_api/s_server.cpp minetest-5.3.0/src/script/cpp_api/s_server.cpp --- minetest-5.2.0/src/script/cpp_api/s_server.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/cpp_api/s_server.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -23,7 +23,8 @@ bool ScriptApiServer::getAuth(const std::string &playername, std::string *dst_password, - std::set *dst_privs) + std::set *dst_privs, + s64 *dst_last_login) { SCRIPTAPI_PRECHECKHEADER @@ -43,8 +44,7 @@ luaL_checktype(L, -1, LUA_TTABLE); std::string password; - bool found = getstringfield(L, -1, "password", password); - if (!found) + if (!getstringfield(L, -1, "password", password)) throw LuaError("Authentication handler didn't return password"); if (dst_password) *dst_password = password; @@ -54,7 +54,13 @@ throw LuaError("Authentication handler didn't return privilege table"); if (dst_privs) readPrivileges(-1, *dst_privs); - lua_pop(L, 1); + lua_pop(L, 1); // Remove key from privs table + + s64 last_login; + if(!getintfield(L, -1, "last_login", last_login)) + throw LuaError("Authentication handler didn't return last_login"); + if (dst_last_login) + *dst_last_login = (s64)last_login; return true; } diff -Nru minetest-5.2.0/src/script/cpp_api/s_server.h minetest-5.3.0/src/script/cpp_api/s_server.h --- minetest-5.2.0/src/script/cpp_api/s_server.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/cpp_api/s_server.h 2020-07-09 21:13:21.000000000 +0000 @@ -43,7 +43,8 @@ /* auth */ bool getAuth(const std::string &playername, std::string *dst_password, - std::set *dst_privs); + std::set *dst_privs, + s64 *dst_last_login = nullptr); void createAuth(const std::string &playername, const std::string &password); bool setPassword(const std::string &playername, diff -Nru minetest-5.2.0/src/script/lua_api/l_base.cpp minetest-5.3.0/src/script/lua_api/l_base.cpp --- minetest-5.2.0/src/script/lua_api/l_base.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_base.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -30,7 +30,12 @@ { // Get server from registry lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI); - ScriptApiBase *sapi_ptr = (ScriptApiBase*) lua_touserdata(L, -1); + ScriptApiBase *sapi_ptr; +#if INDIRECT_SCRIPTAPI_RIDX + sapi_ptr = (ScriptApiBase*) *(void**)(lua_touserdata(L, -1)); +#else + sapi_ptr = (ScriptApiBase*) lua_touserdata(L, -1); +#endif lua_pop(L, 1); return sapi_ptr; } @@ -40,6 +45,11 @@ return getScriptApiBase(L)->getServer(); } +ServerInventoryManager *ModApiBase::getServerInventoryMgr(lua_State *L) +{ + return getScriptApiBase(L)->getServer()->getInventoryMgr(); +} + #ifndef SERVER Client *ModApiBase::getClient(lua_State *L) { @@ -57,10 +67,12 @@ return getScriptApiBase(L)->getEnv(); } +#ifndef SERVER GUIEngine *ModApiBase::getGuiEngine(lua_State *L) { return getScriptApiBase(L)->getGuiEngine(); } +#endif std::string ModApiBase::getCurrentModPath(lua_State *L) { diff -Nru minetest-5.2.0/src/script/lua_api/l_base.h minetest-5.3.0/src/script/lua_api/l_base.h --- minetest-5.2.0/src/script/lua_api/l_base.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_base.h 2020-07-09 21:13:21.000000000 +0000 @@ -32,26 +32,29 @@ #ifndef SERVER class Client; +class GUIEngine; #endif class ScriptApiBase; class Server; class Environment; -class GUIEngine; +class ServerInventoryManager; class ModApiBase : protected LuaHelper { public: static ScriptApiBase* getScriptApiBase(lua_State *L); static Server* getServer(lua_State *L); + static ServerInventoryManager *getServerInventoryMgr(lua_State *L); #ifndef SERVER static Client* getClient(lua_State *L); + static GUIEngine* getGuiEngine(lua_State *L); #endif // !SERVER static IGameDef* getGameDef(lua_State *L); static Environment* getEnv(lua_State *L); - static GUIEngine* getGuiEngine(lua_State *L); + // When we are not loading the mod, this function returns "." static std::string getCurrentModPath(lua_State *L); diff -Nru minetest-5.2.0/src/script/lua_api/l_camera.cpp minetest-5.3.0/src/script/lua_api/l_camera.cpp --- minetest-5.2.0/src/script/lua_api/l_camera.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_camera.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -51,6 +51,7 @@ lua_setfield(L, objectstable, "camera"); } +// set_camera_mode(self, mode) int LuaCamera::l_set_camera_mode(lua_State *L) { Camera *camera = getobject(L, 1); @@ -67,17 +68,19 @@ return 0; } +// get_camera_mode(self) int LuaCamera::l_get_camera_mode(lua_State *L) { Camera *camera = getobject(L, 1); if (!camera) return 0; - lua_pushnumber(L, (int)camera->getCameraMode()); + lua_pushinteger(L, (int)camera->getCameraMode()); return 1; } +// get_fov(self) int LuaCamera::l_get_fov(lua_State *L) { Camera *camera = getobject(L, 1); @@ -85,9 +88,9 @@ return 0; lua_newtable(L); - lua_pushnumber(L, camera->getFovX() * core::DEGTORAD); + lua_pushnumber(L, camera->getFovX() * core::RADTODEG); lua_setfield(L, -2, "x"); - lua_pushnumber(L, camera->getFovY() * core::DEGTORAD); + lua_pushnumber(L, camera->getFovY() * core::RADTODEG); lua_setfield(L, -2, "y"); lua_pushnumber(L, camera->getCameraNode()->getFOV() * core::RADTODEG); lua_setfield(L, -2, "actual"); @@ -96,16 +99,18 @@ return 1; } +// get_pos(self) int LuaCamera::l_get_pos(lua_State *L) { Camera *camera = getobject(L, 1); if (!camera) return 0; - push_v3f(L, camera->getPosition()); + push_v3f(L, camera->getPosition() / BS); return 1; } +// get_offset(self) int LuaCamera::l_get_offset(lua_State *L) { LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer(); @@ -115,38 +120,40 @@ return 1; } +// get_look_dir(self) int LuaCamera::l_get_look_dir(lua_State *L) { - LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer(); - sanity_check(player); - - float pitch = -1.0 * player->getPitch() * core::DEGTORAD; - float yaw = (player->getYaw() + 90.) * core::DEGTORAD; - v3f v(std::cos(pitch) * std::cos(yaw), std::sin(pitch), - std::cos(pitch) * std::sin(yaw)); + Camera *camera = getobject(L, 1); + if (!camera) + return 0; - push_v3f(L, v); + push_v3f(L, camera->getDirection()); return 1; } +// get_look_horizontal(self) +// FIXME: wouldn't localplayer be a better place for this? int LuaCamera::l_get_look_horizontal(lua_State *L) { LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer(); sanity_check(player); - lua_pushnumber(L, (player->getYaw() + 90.) * core::DEGTORAD); + lua_pushnumber(L, (player->getYaw() + 90.f) * core::DEGTORAD); return 1; } +// get_look_vertical(self) +// FIXME: wouldn't localplayer be a better place for this? int LuaCamera::l_get_look_vertical(lua_State *L) { LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer(); sanity_check(player); - lua_pushnumber(L, -1.0 * player->getPitch() * core::DEGTORAD); + lua_pushnumber(L, -1.0f * player->getPitch() * core::DEGTORAD); return 1; } +// get_aspect_ratio(self) int LuaCamera::l_get_aspect_ratio(lua_State *L) { Camera *camera = getobject(L, 1); @@ -215,13 +222,19 @@ lua_pop(L, 1); } +// clang-format off const char LuaCamera::className[] = "Camera"; -const luaL_Reg LuaCamera::methods[] = {luamethod(LuaCamera, set_camera_mode), - luamethod(LuaCamera, get_camera_mode), luamethod(LuaCamera, get_fov), - luamethod(LuaCamera, get_pos), luamethod(LuaCamera, get_offset), - luamethod(LuaCamera, get_look_dir), - luamethod(LuaCamera, get_look_vertical), - luamethod(LuaCamera, get_look_horizontal), - luamethod(LuaCamera, get_aspect_ratio), - - {0, 0}}; +const luaL_Reg LuaCamera::methods[] = { + luamethod(LuaCamera, set_camera_mode), + luamethod(LuaCamera, get_camera_mode), + luamethod(LuaCamera, get_fov), + luamethod(LuaCamera, get_pos), + luamethod(LuaCamera, get_offset), + luamethod(LuaCamera, get_look_dir), + luamethod(LuaCamera, get_look_vertical), + luamethod(LuaCamera, get_look_horizontal), + luamethod(LuaCamera, get_aspect_ratio), + + {0, 0} +}; +// clang-format on diff -Nru minetest-5.2.0/src/script/lua_api/l_client.cpp minetest-5.3.0/src/script/lua_api/l_client.cpp --- minetest-5.2.0/src/script/lua_api/l_client.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_client.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -29,7 +29,6 @@ #include "cpp_api/s_base.h" #include "gettext.h" #include "l_internal.h" -#include "lua_api/l_item.h" #include "lua_api/l_nodemeta.h" #include "gui/mainmenumanager.h" #include "map.h" @@ -209,7 +208,7 @@ return 1; } -// get_node(pos) +// get_node_or_nil(pos) // pos = {x=num, y=num, z=num} int ModApiClient::l_get_node_or_nil(lua_State *L) { @@ -228,6 +227,7 @@ return 1; } +// get_langauge() int ModApiClient::l_get_language(lua_State *L) { #ifdef _WIN32 @@ -244,34 +244,30 @@ return 2; } -int ModApiClient::l_get_wielded_item(lua_State *L) -{ - Client *client = getClient(L); - LocalPlayer *player = client->getEnv().getLocalPlayer(); - if (!player) - return 0; - - ItemStack selected_item; - player->getWieldedItem(&selected_item, nullptr); - LuaItemStack::create(L, selected_item); - return 1; -} - // get_meta(pos) int ModApiClient::l_get_meta(lua_State *L) { v3s16 p = read_v3s16(L, 1); - NodeMetadata *meta = getClient(L)->getEnv().getMap().getNodeMetadata(p); + + // check restrictions first + bool pos_ok; + getClient(L)->CSMGetNode(p, &pos_ok); + if (!pos_ok) + return 0; + + NodeMetadata *meta = getEnv(L)->getMap().getNodeMetadata(p); NodeMetaRef::createClient(L, meta); return 1; } +// sound_play(spec, parameters) int ModApiClient::l_sound_play(lua_State *L) { ISoundManager *sound = getClient(L)->getSoundManager(); SimpleSoundSpec spec; read_soundspec(L, 1, spec); + float gain = 1.0f; float pitch = 1.0f; bool looped = false; @@ -293,21 +289,32 @@ } } - handle = sound->playSound(spec.name, looped, gain * spec.gain, 0.0f, pitch); + handle = sound->playSound(spec.name, looped, gain * spec.gain, spec.fade, pitch); lua_pushinteger(L, handle); return 1; } +// sound_stop(handle) int ModApiClient::l_sound_stop(lua_State *L) { - u32 handle = luaL_checkinteger(L, 1); + s32 handle = luaL_checkinteger(L, 1); getClient(L)->getSoundManager()->stopSound(handle); return 0; } +// sound_fade(handle, step, gain) +int ModApiClient::l_sound_fade(lua_State *L) +{ + s32 handle = luaL_checkinteger(L, 1); + float step = readParam(L, 2); + float gain = readParam(L, 3); + getClient(L)->getSoundManager()->fadeSound(handle, step, gain); + return 0; +} + // get_server_info() int ModApiClient::l_get_server_info(lua_State *L) { @@ -375,6 +382,7 @@ return 1; } +// get_privilege_list() int ModApiClient::l_get_privilege_list(lua_State *L) { const Client *client = getClient(L); @@ -421,11 +429,11 @@ API_FCT(send_respawn); API_FCT(gettext); API_FCT(get_node_or_nil); - API_FCT(get_wielded_item); API_FCT(disconnect); API_FCT(get_meta); API_FCT(sound_play); API_FCT(sound_stop); + API_FCT(sound_fade); API_FCT(get_server_info); API_FCT(get_item_def); API_FCT(get_node_def); diff -Nru minetest-5.2.0/src/script/lua_api/l_client.h minetest-5.3.0/src/script/lua_api/l_client.h --- minetest-5.2.0/src/script/lua_api/l_client.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_client.h 2020-07-09 21:13:21.000000000 +0000 @@ -69,6 +69,7 @@ // get_node(pos) static int l_get_node_or_nil(lua_State *L); + // get_language() static int l_get_language(lua_State *L); // get_wielded_item() @@ -77,10 +78,15 @@ // get_meta(pos) static int l_get_meta(lua_State *L); + // sound_play(spec, parameters) static int l_sound_play(lua_State *L); + // sound_stop(handle) static int l_sound_stop(lua_State *L); + // sound_fade(handle, step, gain) + static int l_sound_fade(lua_State *L); + // get_server_info() static int l_get_server_info(lua_State *L); diff -Nru minetest-5.2.0/src/script/lua_api/l_env.cpp minetest-5.3.0/src/script/lua_api/l_env.cpp --- minetest-5.2.0/src/script/lua_api/l_env.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_env.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -17,6 +17,7 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include #include "lua_api/l_env.h" #include "lua_api/l_internal.h" #include "lua_api/l_nodemeta.h" @@ -25,7 +26,6 @@ #include "lua_api/l_vmanip.h" #include "common/c_converter.h" #include "common/c_content.h" -#include #include "scripting_server.h" #include "environment.h" #include "mapblock.h" @@ -33,12 +33,15 @@ #include "nodedef.h" #include "daynightratio.h" #include "util/pointedthing.h" -#include "content_sao.h" #include "mapgen/treegen.h" #include "emerge.h" #include "pathfinder.h" #include "face_position_cache.h" #include "remoteplayer.h" +#include "server/luaentity_sao.h" +#include "server/player_sao.h" +#include "util/string.h" +#include "translation.h" #ifndef SERVER #include "client/client.h" #endif @@ -72,7 +75,7 @@ lua_remove(L, -2); // Remove core // Get registered_abms[m_id] - lua_pushnumber(L, m_id); + lua_pushinteger(L, m_id); lua_gettable(L, -2); if(lua_isnil(L, -1)) FATAL_ERROR(""); @@ -115,7 +118,7 @@ lua_remove(L, -2); // Remove core // Get registered_lbms[m_id] - lua_pushnumber(L, 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 @@ -139,8 +142,7 @@ int LuaRaycast::l_next(lua_State *L) { - MAP_LOCK_REQUIRED; - GET_ENV_PTR; + GET_PLAIN_ENV_PTR; bool csm = false; #ifndef SERVER @@ -384,7 +386,7 @@ // timeofday: nil = current time, 0 = night, 0.5 = day int ModApiEnvMod::l_get_node_light(lua_State *L) { - GET_ENV_PTR; + GET_PLAIN_ENV_PTR; // Do it v3s16 pos = read_v3s16(L, 1); @@ -488,10 +490,7 @@ // pos = {x=num, y=num, z=num} int ModApiEnvMod::l_get_node_max_level(lua_State *L) { - Environment *env = getEnv(L); - if (!env) { - return 0; - } + GET_PLAIN_ENV_PTR; v3s16 pos = read_v3s16(L, 1); MapNode n = env->getMap().getNode(pos); @@ -503,10 +502,7 @@ // pos = {x=num, y=num, z=num} int ModApiEnvMod::l_get_node_level(lua_State *L) { - Environment *env = getEnv(L); - if (!env) { - return 0; - } + GET_PLAIN_ENV_PTR; v3s16 pos = read_v3s16(L, 1); MapNode n = env->getMap().getNode(pos); @@ -533,13 +529,13 @@ // add_node_level(pos, level) // pos = {x=num, y=num, z=num} -// level: 0..63 +// level: -127..127 int ModApiEnvMod::l_add_node_level(lua_State *L) { GET_ENV_PTR; v3s16 pos = read_v3s16(L, 1); - u8 level = 1; + s16 level = 1; if(lua_isnumber(L, 2)) level = lua_tonumber(L, 2); MapNode n = env->getMap().getNode(pos); @@ -551,12 +547,12 @@ // find_nodes_with_meta(pos1, pos2) int ModApiEnvMod::l_find_nodes_with_meta(lua_State *L) { - GET_ENV_PTR; + GET_PLAIN_ENV_PTR; std::vector positions = env->getMap().findNodesWithMetadata( check_v3s16(L, 1), check_v3s16(L, 2)); - lua_newtable(L); + lua_createtable(L, positions.size(), 0); for (size_t i = 0; i != positions.size(); i++) { push_v3s16(L, positions[i]); lua_rawseti(L, -2, i + 1); @@ -583,7 +579,7 @@ // Do it v3s16 p = read_v3s16(L, 1); - NodeTimerRef::create(L, p, env); + NodeTimerRef::create(L, p, &env->getServerMap()); return 1; } @@ -593,19 +589,19 @@ { GET_ENV_PTR; - // pos v3f pos = checkFloatPos(L, 1); - // content const char *name = luaL_checkstring(L, 2); - // staticdata const char *staticdata = luaL_optstring(L, 3, ""); - // Do it + ServerActiveObject *obj = new LuaEntitySAO(env, pos, name, staticdata); int objectid = env->addActiveObject(obj); // If failed to add, return nothing (reads as nil) if(objectid == 0) return 0; - // Return ObjectRef + + // If already deleted (can happen in on_activate), return nil + if (obj->isGone()) + return 0; getScriptApiBase(L)->objectrefGetOrCreate(L, obj); return 1; } @@ -687,22 +683,22 @@ int ModApiEnvMod::l_get_objects_inside_radius(lua_State *L) { GET_ENV_PTR; + ScriptApiBase *script = getScriptApiBase(L); // Do it v3f pos = checkFloatPos(L, 1); float radius = readParam(L, 2) * BS; - std::vector ids; - env->getObjectsInsideRadius(ids, pos, radius); - ScriptApiBase *script = getScriptApiBase(L); - lua_createtable(L, ids.size(), 0); - std::vector::const_iterator iter = ids.begin(); - for(u32 i = 0; iter != ids.end(); ++iter) { - ServerActiveObject *obj = env->getActiveObject(*iter); - if (!obj->isGone()) { - // Insert object reference into table - script->objectrefGetOrCreate(L, obj); - lua_rawseti(L, -2, ++i); - } + std::vector objs; + + auto include_obj_cb = [](ServerActiveObject *obj){ return !obj->isGone(); }; + env->getObjectsInsideRadius(objs, pos, radius, include_obj_cb); + + int i = 0; + lua_createtable(L, objs.size(), 0); + for (const auto obj : objs) { + // Insert object reference into table + script->objectrefGetOrCreate(L, obj); + lua_rawseti(L, -2, ++i); } return 1; } @@ -728,10 +724,7 @@ // get_timeofday() -> 0...1 int ModApiEnvMod::l_get_timeofday(lua_State *L) { - Environment *env = getEnv(L); - if (!env) { - return 0; - } + GET_PLAIN_ENV_PTR; // Do it int timeofday_mh = env->getTimeOfDay(); @@ -743,10 +736,7 @@ // get_day_count() -> int int ModApiEnvMod::l_get_day_count(lua_State *L) { - Environment *env = getEnv(L); - if (!env) { - return 0; - } + GET_PLAIN_ENV_PTR; lua_pushnumber(L, env->getDayCount()); return 1; @@ -767,12 +757,9 @@ // nodenames: eg. {"ignore", "group:tree"} or "default:dirt" int ModApiEnvMod::l_find_node_near(lua_State *L) { - Environment *env = getEnv(L); - if (!env) { - return 0; - } + GET_PLAIN_ENV_PTR; - const NodeDefManager *ndef = getGameDef(L)->ndef(); + const NodeDefManager *ndef = env->getGameDef()->ndef(); v3s16 pos = read_v3s16(L, 1); int radius = luaL_checkinteger(L, 2); std::vector filter; @@ -793,8 +780,8 @@ #ifndef SERVER // Client API limitations - if (getClient(L)) - radius = getClient(L)->CSMClampRadius(pos, radius); + if (Client *client = getClient(L)) + radius = client->CSMClampRadius(pos, radius); #endif for (int d = start_radius; d <= radius; d++) { @@ -815,20 +802,19 @@ // nodenames: eg. {"ignore", "group:tree"} or "default:dirt" int ModApiEnvMod::l_find_nodes_in_area(lua_State *L) { - GET_ENV_PTR; + GET_PLAIN_ENV_PTR; v3s16 minp = read_v3s16(L, 1); v3s16 maxp = read_v3s16(L, 2); sortBoxVerticies(minp, maxp); + const NodeDefManager *ndef = env->getGameDef()->ndef(); + #ifndef SERVER - const NodeDefManager *ndef = getClient(L) ? getClient(L)->ndef() : getServer(L)->ndef(); - if (getClient(L)) { - minp = getClient(L)->CSMClampPos(minp); - maxp = getClient(L)->CSMClampPos(maxp); + if (Client *client = getClient(L)) { + minp = client->CSMClampPos(minp); + maxp = client->CSMClampPos(maxp); } -#else - const NodeDefManager *ndef = getServer(L)->ndef(); #endif v3s16 cube = maxp - minp + 1; @@ -892,20 +878,19 @@ * TODO */ - GET_ENV_PTR; + GET_PLAIN_ENV_PTR; v3s16 minp = read_v3s16(L, 1); v3s16 maxp = read_v3s16(L, 2); sortBoxVerticies(minp, maxp); + const NodeDefManager *ndef = env->getGameDef()->ndef(); + #ifndef SERVER - const NodeDefManager *ndef = getClient(L) ? getClient(L)->ndef() : getServer(L)->ndef(); - if (getClient(L)) { - minp = getClient(L)->CSMClampPos(minp); - maxp = getClient(L)->CSMClampPos(maxp); + if (Client *client = getClient(L)) { + minp = client->CSMClampPos(minp); + maxp = client->CSMClampPos(maxp); } -#else - const NodeDefManager *ndef = getServer(L)->ndef(); #endif v3s16 cube = maxp - minp + 1; @@ -1034,7 +1019,7 @@ // line_of_sight(pos1, pos2) -> true/false, pos int ModApiEnvMod::l_line_of_sight(lua_State *L) { - GET_ENV_PTR; + GET_PLAIN_ENV_PTR; // read position 1 from lua v3f pos1 = checkFloatPos(L, 1); @@ -1210,11 +1195,11 @@ algo = PA_DIJKSTRA; } - std::vector path = get_path(env, pos1, pos2, + std::vector path = get_path(&env->getServerMap(), env->getGameDef()->ndef(), pos1, pos2, searchdistance, max_jump, max_drop, algo); if (!path.empty()) { - lua_newtable(L); + lua_createtable(L, path.size(), 0); int top = lua_gettop(L); unsigned int index = 1; for (const v3s16 &i : path) { @@ -1274,8 +1259,9 @@ else return 0; + ServerMap *map = &env->getServerMap(); treegen::error e; - if ((e = treegen::spawn_ltree (env, p0, ndef, tree_def)) != treegen::SUCCESS) { + if ((e = treegen::spawn_ltree (map, p0, ndef, tree_def)) != treegen::SUCCESS) { if (e == treegen::UNBALANCED_BRACKETS) { luaL_error(L, "spawn_tree(): closing ']' has no matching opening bracket"); } else { @@ -1318,6 +1304,19 @@ return 0; } +// get_translated_string(lang_code, string) +int ModApiEnvMod::l_get_translated_string(lua_State * L) +{ + GET_ENV_PTR; + std::string lang_code = luaL_checkstring(L, 1); + std::string string = luaL_checkstring(L, 2); + getServer(L)->loadTranslationLanguage(lang_code); + string = wide_to_utf8(translate_string(utf8_to_wide(string), + &(*g_server_translations)[lang_code])); + lua_pushstring(L, string.c_str()); + return 1; +} + void ModApiEnvMod::Initialize(lua_State *L, int top) { API_FCT(set_node); @@ -1365,6 +1364,7 @@ API_FCT(transforming_liquid_add); API_FCT(forceload_block); API_FCT(forceload_free_block); + API_FCT(get_translated_string); } void ModApiEnvMod::InitializeClient(lua_State *L, int top) diff -Nru minetest-5.2.0/src/script/lua_api/l_env.h minetest-5.3.0/src/script/lua_api/l_env.h --- minetest-5.2.0/src/script/lua_api/l_env.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_env.h 2020-07-09 21:13:21.000000000 +0000 @@ -187,6 +187,9 @@ // stops forceloading a position static int l_forceload_free_block(lua_State *L); + // Get a string translated server side + static int l_get_translated_string(lua_State * L); + public: static void Initialize(lua_State *L, int top); static void InitializeClient(lua_State *L, int top); diff -Nru minetest-5.2.0/src/script/lua_api/l_http.cpp minetest-5.3.0/src/script/lua_api/l_http.cpp --- minetest-5.2.0/src/script/lua_api/l_http.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_http.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -83,6 +83,24 @@ setstringfield(L, -1, "data", res.data); } +// http_api.fetch_sync(HTTPRequest definition) +int ModApiHttp::l_http_fetch_sync(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + HTTPFetchRequest req; + read_http_fetch_request(L, req); + + infostream << "Mod performs HTTP request with URL " << req.url << std::endl; + + HTTPFetchResult res; + httpfetch_sync(req, res); + + push_http_fetch_result(L, res, true); + + return 1; +} + // http_api.fetch_async(HTTPRequest definition) int ModApiHttp::l_http_fetch_async(lua_State *L) { @@ -180,11 +198,42 @@ return 1; } + +int ModApiHttp::l_get_http_api(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + lua_newtable(L); + HTTP_API(fetch_async); + HTTP_API(fetch_async_get); + HTTP_API(fetch_sync); + + return 1; +} + #endif void ModApiHttp::Initialize(lua_State *L, int top) { #if USE_CURL - API_FCT(request_http_api); + + bool isMainmenu = false; +#ifndef SERVER + isMainmenu = ModApiBase::getGuiEngine(L) != nullptr; +#endif + + if (isMainmenu) { + API_FCT(get_http_api); + } else { + API_FCT(request_http_api); + } + +#endif +} + +void ModApiHttp::InitializeAsync(lua_State *L, int top) +{ +#if USE_CURL + API_FCT(get_http_api); #endif } diff -Nru minetest-5.2.0/src/script/lua_api/l_http.h minetest-5.3.0/src/script/lua_api/l_http.h --- minetest-5.2.0/src/script/lua_api/l_http.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_http.h 2020-07-09 21:13:21.000000000 +0000 @@ -32,6 +32,9 @@ static void read_http_fetch_request(lua_State *L, HTTPFetchRequest &req); static void push_http_fetch_result(lua_State *L, HTTPFetchResult &res, bool completed = true); + // http_fetch_sync({url=, timeout=, post_data=}) + static int l_http_fetch_sync(lua_State *L); + // http_fetch_async({url=, timeout=, post_data=}) static int l_http_fetch_async(lua_State *L); @@ -40,8 +43,12 @@ // request_http_api() static int l_request_http_api(lua_State *L); + + // get_http_api() + static int l_get_http_api(lua_State *L); #endif public: static void Initialize(lua_State *L, int top); + static void InitializeAsync(lua_State *L, int top); }; diff -Nru minetest-5.2.0/src/script/lua_api/l_internal.h minetest-5.3.0/src/script/lua_api/l_internal.h --- minetest-5.2.0/src/script/lua_api/l_internal.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_internal.h 2020-07-09 21:13:21.000000000 +0000 @@ -32,14 +32,39 @@ #define luamethod_aliased(class, name, alias) {#name, class::l_##name}, {#alias, class::l_##name} #define API_FCT(name) registerFunction(L, #name, l_##name, top) -#define MAP_LOCK_REQUIRED -#define NO_MAP_LOCK_REQUIRED +// For future use +#define MAP_LOCK_REQUIRED ((void)0) +#define NO_MAP_LOCK_REQUIRED ((void)0) +/* In debug mode ensure no code tries to retrieve the server env when it isn't + * actually available (in CSM) */ +#if !defined(SERVER) && !defined(NDEBUG) +#define DEBUG_ASSERT_NO_CLIENTAPI \ + FATAL_ERROR_IF(getClient(L) != nullptr, "Tried " \ + "to retrieve ServerEnvironment on client") +#else +#define DEBUG_ASSERT_NO_CLIENTAPI ((void)0) +#endif + +// Retrieve ServerEnvironment pointer as `env` (no map lock) #define GET_ENV_PTR_NO_MAP_LOCK \ + DEBUG_ASSERT_NO_CLIENTAPI; \ ServerEnvironment *env = (ServerEnvironment *)getEnv(L); \ if (env == NULL) \ return 0 +// Retrieve ServerEnvironment pointer as `env` #define GET_ENV_PTR \ MAP_LOCK_REQUIRED; \ GET_ENV_PTR_NO_MAP_LOCK + +// Retrieve Environment pointer as `env` (no map lock) +#define GET_PLAIN_ENV_PTR_NO_MAP_LOCK \ + Environment *env = (Environment *)getEnv(L); \ + if (env == NULL) \ + return 0 + +// Retrieve Environment pointer as `env` +#define GET_PLAIN_ENV_PTR \ + MAP_LOCK_REQUIRED; \ + GET_PLAIN_ENV_PTR_NO_MAP_LOCK diff -Nru minetest-5.2.0/src/script/lua_api/l_inventory.cpp minetest-5.3.0/src/script/lua_api/l_inventory.cpp --- minetest-5.2.0/src/script/lua_api/l_inventory.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_inventory.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -23,6 +23,7 @@ #include "common/c_converter.h" #include "common/c_content.h" #include "server.h" +#include "server/serverinventorymgr.h" #include "remoteplayer.h" /* @@ -38,7 +39,7 @@ Inventory* InvRef::getinv(lua_State *L, InvRef *ref) { - return getServer(L)->getInventory(ref->m_loc); + return getServerInventoryMgr(L)->getInventory(ref->m_loc); } InventoryList* InvRef::getlist(lua_State *L, InvRef *ref, @@ -54,7 +55,7 @@ void InvRef::reportInventoryChange(lua_State *L, InvRef *ref) { // Inform other things that the inventory has changed - getServer(L)->setInventoryModified(ref->m_loc); + getServerInventoryMgr(L)->setInventoryModified(ref->m_loc); } // Exported functions @@ -487,7 +488,9 @@ { InventoryLocation loc; - std::string type = checkstringfield(L, 1, "type"); + lua_getfield(L, 1, "type"); + std::string type = luaL_checkstring(L, -1); + lua_pop(L, 1); if(type == "node"){ MAP_LOCK_REQUIRED; @@ -495,7 +498,7 @@ v3s16 pos = check_v3s16(L, -1); loc.setNodeMeta(pos); - if (getServer(L)->getInventory(loc) != NULL) + if (getServerInventoryMgr(L)->getInventory(loc) != NULL) InvRef::create(L, loc); else lua_pushnil(L); @@ -504,14 +507,16 @@ NO_MAP_LOCK_REQUIRED; if (type == "player") { - std::string name = checkstringfield(L, 1, "name"); - loc.setPlayer(name); + lua_getfield(L, 1, "name"); + loc.setPlayer(luaL_checkstring(L, -1)); + lua_pop(L, 1); } else if (type == "detached") { - std::string name = checkstringfield(L, 1, "name"); - loc.setDetached(name); + lua_getfield(L, 1, "name"); + loc.setDetached(luaL_checkstring(L, -1)); + lua_pop(L, 1); } - if (getServer(L)->getInventory(loc) != NULL) + if (getServerInventoryMgr(L)->getInventory(loc) != NULL) InvRef::create(L, loc); else lua_pushnil(L); @@ -526,7 +531,7 @@ NO_MAP_LOCK_REQUIRED; const char *name = luaL_checkstring(L, 1); std::string player = readParam(L, 2, ""); - if (getServer(L)->createDetachedInventory(name, player) != NULL) { + if (getServerInventoryMgr(L)->createDetachedInventory(name, getServer(L)->idef(), player) != NULL) { InventoryLocation loc; loc.setDetached(name); InvRef::create(L, loc); @@ -541,7 +546,7 @@ { NO_MAP_LOCK_REQUIRED; const std::string &name = luaL_checkstring(L, 1); - lua_pushboolean(L, getServer(L)->removeDetachedInventory(name)); + lua_pushboolean(L, getServerInventoryMgr(L)->removeDetachedInventory(name)); return 1; } diff -Nru minetest-5.2.0/src/script/lua_api/l_item.cpp minetest-5.3.0/src/script/lua_api/l_item.cpp --- minetest-5.2.0/src/script/lua_api/l_item.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_item.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -25,7 +25,6 @@ #include "itemdef.h" #include "nodedef.h" #include "server.h" -#include "content_sao.h" #include "inventory.h" #include "log.h" @@ -38,6 +37,15 @@ return 0; } +// __tostring metamethod +int LuaItemStack::mt_tostring(lua_State *L) +{ + LuaItemStack *o = checkobject(L, 1); + std::string itemstring = o->m_stack.getItemString(false); + lua_pushfstring(L, "ItemStack(\"%s\")", itemstring.c_str()); + return 1; +} + // is_empty(self) -> true/false int LuaItemStack::l_is_empty(lua_State *L) { @@ -434,12 +442,9 @@ return 1; } -LuaItemStack* LuaItemStack::checkobject(lua_State *L, int narg) +LuaItemStack *LuaItemStack::checkobject(lua_State *L, int narg) { - luaL_checktype(L, narg, LUA_TUSERDATA); - void *ud = luaL_checkudata(L, narg, className); - if(!ud) luaL_typerror(L, narg, className); - return *(LuaItemStack**)ud; // unbox pointer + return *(LuaItemStack **)luaL_checkudata(L, narg, className); } void LuaItemStack::Register(lua_State *L) @@ -449,9 +454,10 @@ luaL_newmetatable(L, className); int metatable = lua_gettop(L); + // hide metatable from Lua getmetatable() lua_pushliteral(L, "__metatable"); lua_pushvalue(L, methodtable); - lua_settable(L, metatable); // hide metatable from Lua getmetatable() + lua_settable(L, metatable); lua_pushliteral(L, "__index"); lua_pushvalue(L, methodtable); @@ -461,12 +467,16 @@ lua_pushcfunction(L, gc_object); lua_settable(L, metatable); + lua_pushliteral(L, "__tostring"); + lua_pushcfunction(L, mt_tostring); + lua_settable(L, metatable); + lua_pop(L, 1); // drop metatable luaL_openlib(L, 0, methods, 0); // fill methodtable lua_pop(L, 1); // drop methodtable - // Can be created from Lua (LuaItemStack(itemstack or itemstring or table or nil)) + // Can be created from Lua (ItemStack(itemstack or itemstring or table or nil)) lua_register(L, className, create_object); } @@ -522,7 +532,6 @@ lua_getfield(L, table, "name"); if(lua_isstring(L, -1)){ name = readParam(L, -1); - verbosestream<<"register_item_raw: "<getItemDefManager(); const NodeDefManager *ndef = getGameDef(L)->getNodeDefManager(); + + // If this is called at mod load time, NodeDefManager isn't aware of + // aliases yet, so we need to handle them manually + std::string alias_name = idef->getAlias(name); + content_t content_id; - if (!ndef->getId(name, content_id)) + if (alias_name != name) { + if (!ndef->getId(alias_name, content_id)) + throw LuaError("Unknown node: " + alias_name + + " (from alias " + name + ")"); + } else if (!ndef->getId(name, content_id)) { throw LuaError("Unknown node: " + name); + } lua_pushinteger(L, content_id); return 1; /* number of results */ diff -Nru minetest-5.2.0/src/script/lua_api/l_item.h minetest-5.3.0/src/script/lua_api/l_item.h --- minetest-5.2.0/src/script/lua_api/l_item.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_item.h 2020-07-09 21:13:21.000000000 +0000 @@ -34,6 +34,9 @@ // garbage collector static int gc_object(lua_State *L); + // __tostring metamethod + static int mt_tostring(lua_State *L); + // is_empty(self) -> true/false static int l_is_empty(lua_State *L); diff -Nru minetest-5.2.0/src/script/lua_api/l_localplayer.cpp minetest-5.3.0/src/script/lua_api/l_localplayer.cpp --- minetest-5.2.0/src/script/lua_api/l_localplayer.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_localplayer.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -19,10 +19,12 @@ #include "l_localplayer.h" #include "l_internal.h" +#include "lua_api/l_item.h" #include "script/common/c_converter.h" #include "client/localplayer.h" #include "hud.h" #include "common/c_content.h" +#include "client/content_cao.h" LuaLocalPlayer::LuaLocalPlayer(LocalPlayer *m) : m_localplayer(m) { @@ -74,6 +76,26 @@ return 1; } +// get_wield_index(self) +int LuaLocalPlayer::l_get_wield_index(lua_State *L) +{ + LocalPlayer *player = getobject(L, 1); + + lua_pushinteger(L, player->getWieldIndex()); + return 1; +} + +// get_wielded_item(self) +int LuaLocalPlayer::l_get_wielded_item(lua_State *L) +{ + LocalPlayer *player = getobject(L, 1); + + ItemStack selected_item; + player->getWieldedItem(&selected_item, nullptr); + LuaItemStack::create(L, selected_item); + return 1; +} + int LuaLocalPlayer::l_is_attached(lua_State *L) { LocalPlayer *player = getobject(L, 1); @@ -130,6 +152,7 @@ return 1; } +// get_physics_override(self) int LuaLocalPlayer::l_get_physics_override(lua_State *L) { LocalPlayer *player = getobject(L, 1); @@ -150,14 +173,9 @@ lua_pushboolean(L, player->physics_override_sneak_glitch); lua_setfield(L, -2, "sneak_glitch"); - return 1; -} - -int LuaLocalPlayer::l_get_override_pos(lua_State *L) -{ - LocalPlayer *player = getobject(L, 1); + lua_pushboolean(L, player->physics_override_new_move); + lua_setfield(L, -2, "new_move"); - push_v3f(L, player->getPosition()); return 1; } @@ -193,14 +211,33 @@ return 1; } -int LuaLocalPlayer::l_get_key_pressed(lua_State *L) +// get_control(self) +int LuaLocalPlayer::l_get_control(lua_State *L) { LocalPlayer *player = getobject(L, 1); + const PlayerControl &c = player->getPlayerControl(); + + auto set = [L] (const char *name, bool value) { + lua_pushboolean(L, value); + lua_setfield(L, -2, name); + }; + + lua_createtable(L, 0, 12); + set("up", c.up); + set("down", c.down); + set("left", c.left); + set("right", c.right); + set("jump", c.jump); + set("aux1", c.aux1); + set("sneak", c.sneak); + set("zoom", c.zoom); + set("LMB", c.LMB); + set("RMB", c.RMB); - lua_pushinteger(L, player->last_keyPressed); return 1; } +// get_breath(self) int LuaLocalPlayer::l_get_breath(lua_State *L) { LocalPlayer *player = getobject(L, 1); @@ -209,6 +246,7 @@ return 1; } +// get_pos(self) int LuaLocalPlayer::l_get_pos(lua_State *L) { LocalPlayer *player = getobject(L, 1); @@ -217,6 +255,7 @@ return 1; } +// get_movement_acceleration(self) int LuaLocalPlayer::l_get_movement_acceleration(lua_State *L) { LocalPlayer *player = getobject(L, 1); @@ -234,6 +273,7 @@ return 1; } +// get_movement_speed(self) int LuaLocalPlayer::l_get_movement_speed(lua_State *L) { LocalPlayer *player = getobject(L, 1); @@ -257,6 +297,7 @@ return 1; } +// get_movement(self) int LuaLocalPlayer::l_get_movement(lua_State *L) { LocalPlayer *player = getobject(L, 1); @@ -278,6 +319,13 @@ return 1; } +// get_armor_groups(self) +int LuaLocalPlayer::l_get_armor_groups(lua_State *L) +{ + LocalPlayer *player = getobject(L, 1); + push_groups(L, player->getCAO()->getGroups()); + return 1; +} // hud_add(self, form) int LuaLocalPlayer::l_hud_add(lua_State *L) @@ -407,6 +455,8 @@ luamethod(LuaLocalPlayer, get_velocity), luamethod(LuaLocalPlayer, get_hp), luamethod(LuaLocalPlayer, get_name), + luamethod(LuaLocalPlayer, get_wield_index), + luamethod(LuaLocalPlayer, get_wielded_item), luamethod(LuaLocalPlayer, is_attached), luamethod(LuaLocalPlayer, is_touching_ground), luamethod(LuaLocalPlayer, is_in_liquid), @@ -415,17 +465,19 @@ luamethod(LuaLocalPlayer, is_climbing), luamethod(LuaLocalPlayer, swimming_vertical), luamethod(LuaLocalPlayer, get_physics_override), - luamethod(LuaLocalPlayer, get_override_pos), + // TODO: figure our if these are useful in any way luamethod(LuaLocalPlayer, get_last_pos), luamethod(LuaLocalPlayer, get_last_velocity), luamethod(LuaLocalPlayer, get_last_look_horizontal), luamethod(LuaLocalPlayer, get_last_look_vertical), - luamethod(LuaLocalPlayer, get_key_pressed), + // + luamethod(LuaLocalPlayer, get_control), luamethod(LuaLocalPlayer, get_breath), luamethod(LuaLocalPlayer, get_pos), luamethod(LuaLocalPlayer, get_movement_acceleration), luamethod(LuaLocalPlayer, get_movement_speed), luamethod(LuaLocalPlayer, get_movement), + luamethod(LuaLocalPlayer, get_armor_groups), luamethod(LuaLocalPlayer, hud_add), luamethod(LuaLocalPlayer, hud_remove), luamethod(LuaLocalPlayer, hud_change), diff -Nru minetest-5.2.0/src/script/lua_api/l_localplayer.h minetest-5.3.0/src/script/lua_api/l_localplayer.h --- minetest-5.2.0/src/script/lua_api/l_localplayer.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_localplayer.h 2020-07-09 21:13:21.000000000 +0000 @@ -32,12 +32,21 @@ // garbage collector static int gc_object(lua_State *L); + // get_velocity(self) static int l_get_velocity(lua_State *L); + // get_hp(self) static int l_get_hp(lua_State *L); + // get_name(self) static int l_get_name(lua_State *L); + // get_wield_index(self) + static int l_get_wield_index(lua_State *L); + + // get_wielded_item(self) + static int l_get_wielded_item(lua_State *L); + static int l_is_attached(lua_State *L); static int l_is_touching_ground(lua_State *L); static int l_is_in_liquid(lua_State *L); @@ -54,18 +63,28 @@ static int l_get_last_velocity(lua_State *L); static int l_get_last_look_vertical(lua_State *L); static int l_get_last_look_horizontal(lua_State *L); - static int l_get_key_pressed(lua_State *L); + // get_control(self) + static int l_get_control(lua_State *L); + + // get_breath(self) static int l_get_breath(lua_State *L); + // get_pos(self) static int l_get_pos(lua_State *L); + // get_movement_acceleration(self) static int l_get_movement_acceleration(lua_State *L); + // get_movement_speed(self) static int l_get_movement_speed(lua_State *L); + // get_movement(self) static int l_get_movement(lua_State *L); + // get_armor_groups(self) + static int l_get_armor_groups(lua_State *L); + // hud_add(self, id, form) static int l_hud_add(lua_State *L); diff -Nru minetest-5.2.0/src/script/lua_api/l_mainmenu.cpp minetest-5.3.0/src/script/lua_api/l_mainmenu.cpp --- minetest-5.2.0/src/script/lua_api/l_mainmenu.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_mainmenu.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -280,8 +280,8 @@ { std::string listtype = "local"; - if (!lua_isnone(L,1)) { - listtype = luaL_checkstring(L,1); + if (!lua_isnone(L, 1)) { + listtype = luaL_checkstring(L, 1); } std::vector servers; @@ -298,7 +298,7 @@ for (const Json::Value &server : servers) { - lua_pushnumber(L,index); + lua_pushnumber(L, index); lua_newtable(L); int top_lvl2 = lua_gettop(L); @@ -306,11 +306,11 @@ if (!server["clients"].asString().empty()) { std::string clients_raw = server["clients"].asString(); char* endptr = 0; - int numbervalue = strtol(clients_raw.c_str(),&endptr,10); + int numbervalue = strtol(clients_raw.c_str(), &endptr,10); if ((!clients_raw.empty()) && (*endptr == 0)) { - lua_pushstring(L,"clients"); - lua_pushnumber(L,numbervalue); + lua_pushstring(L, "clients"); + lua_pushnumber(L, numbervalue); lua_settable(L, top_lvl2); } } @@ -319,83 +319,83 @@ std::string clients_max_raw = server["clients_max"].asString(); char* endptr = 0; - int numbervalue = strtol(clients_max_raw.c_str(),&endptr,10); + int numbervalue = strtol(clients_max_raw.c_str(), &endptr,10); if ((!clients_max_raw.empty()) && (*endptr == 0)) { - lua_pushstring(L,"clients_max"); - lua_pushnumber(L,numbervalue); + lua_pushstring(L, "clients_max"); + lua_pushnumber(L, numbervalue); lua_settable(L, top_lvl2); } } if (!server["version"].asString().empty()) { - lua_pushstring(L,"version"); + lua_pushstring(L, "version"); std::string topush = server["version"].asString(); - lua_pushstring(L,topush.c_str()); + lua_pushstring(L, topush.c_str()); lua_settable(L, top_lvl2); } if (!server["proto_min"].asString().empty()) { - lua_pushstring(L,"proto_min"); + lua_pushstring(L, "proto_min"); lua_pushinteger(L, server["proto_min"].asInt()); lua_settable(L, top_lvl2); } if (!server["proto_max"].asString().empty()) { - lua_pushstring(L,"proto_max"); + lua_pushstring(L, "proto_max"); lua_pushinteger(L, server["proto_max"].asInt()); lua_settable(L, top_lvl2); } if (!server["password"].asString().empty()) { - lua_pushstring(L,"password"); + lua_pushstring(L, "password"); lua_pushboolean(L, server["password"].asBool()); lua_settable(L, top_lvl2); } if (!server["creative"].asString().empty()) { - lua_pushstring(L,"creative"); + lua_pushstring(L, "creative"); lua_pushboolean(L, server["creative"].asBool()); lua_settable(L, top_lvl2); } if (!server["damage"].asString().empty()) { - lua_pushstring(L,"damage"); + lua_pushstring(L, "damage"); lua_pushboolean(L, server["damage"].asBool()); lua_settable(L, top_lvl2); } if (!server["pvp"].asString().empty()) { - lua_pushstring(L,"pvp"); + lua_pushstring(L, "pvp"); lua_pushboolean(L, server["pvp"].asBool()); lua_settable(L, top_lvl2); } if (!server["description"].asString().empty()) { - lua_pushstring(L,"description"); + lua_pushstring(L, "description"); std::string topush = server["description"].asString(); - lua_pushstring(L,topush.c_str()); + lua_pushstring(L, topush.c_str()); lua_settable(L, top_lvl2); } if (!server["name"].asString().empty()) { - lua_pushstring(L,"name"); + lua_pushstring(L, "name"); std::string topush = server["name"].asString(); - lua_pushstring(L,topush.c_str()); + lua_pushstring(L, topush.c_str()); lua_settable(L, top_lvl2); } if (!server["address"].asString().empty()) { - lua_pushstring(L,"address"); + lua_pushstring(L, "address"); std::string topush = server["address"].asString(); - lua_pushstring(L,topush.c_str()); + lua_pushstring(L, topush.c_str()); lua_settable(L, top_lvl2); } if (!server["port"].asString().empty()) { - lua_pushstring(L,"port"); + lua_pushstring(L, "port"); std::string topush = server["port"].asString(); - lua_pushstring(L,topush.c_str()); + lua_pushstring(L, topush.c_str()); lua_settable(L, top_lvl2); } @@ -406,6 +406,37 @@ lua_settable(L, top_lvl2); } + if (server["clients_list"].isArray()) { + unsigned int index_lvl2 = 1; + lua_pushstring(L, "clients_list"); + lua_newtable(L); + int top_lvl3 = lua_gettop(L); + for (const Json::Value &client : server["clients_list"]) { + lua_pushnumber(L, index_lvl2); + std::string topush = client.asString(); + lua_pushstring(L, topush.c_str()); + lua_settable(L, top_lvl3); + index_lvl2++; + } + lua_settable(L, top_lvl2); + } + + if (server["mods"].isArray()) { + unsigned int index_lvl2 = 1; + lua_pushstring(L, "mods"); + lua_newtable(L); + int top_lvl3 = lua_gettop(L); + for (const Json::Value &mod : server["mods"]) { + + lua_pushnumber(L, index_lvl2); + std::string topush = mod.asString(); + lua_pushstring(L, topush.c_str()); + lua_settable(L, top_lvl3); + index_lvl2++; + } + lua_settable(L, top_lvl2); + } + lua_settable(L, top); index++; } @@ -571,9 +602,10 @@ sanity_check(engine != NULL); GUIKeyChangeMenu *kmenu = new GUIKeyChangeMenu(RenderingEngine::get_gui_env(), - engine->m_parent, - -1, - engine->m_menumanager); + engine->m_parent, + -1, + engine->m_menumanager, + engine->m_texture_source); kmenu->drop(); return 0; } @@ -904,12 +936,12 @@ GUIFileSelectMenu* fileOpenMenu = new GUIFileSelectMenu(RenderingEngine::get_gui_env(), - engine->m_parent, - -1, - engine->m_menumanager, - title, - formname, - is_file_select); + engine->m_parent, + -1, + engine->m_menumanager, + title, + formname, + is_file_select); fileOpenMenu->setTextDest(engine->m_buttonhandler); fileOpenMenu->drop(); return 0; @@ -1032,6 +1064,14 @@ } /******************************************************************************/ +int ModApiMainMenu::l_open_url(lua_State *L) +{ + std::string url = luaL_checkstring(L, 1); + lua_pushboolean(L, porting::openURL(url)); + return 1; +} + +/******************************************************************************/ int ModApiMainMenu::l_do_async_callback(lua_State *L) { GUIEngine* engine = getGuiEngine(L); @@ -1093,6 +1133,7 @@ API_FCT(get_screen_info); API_FCT(get_min_supp_proto); API_FCT(get_max_supp_proto); + API_FCT(open_url); API_FCT(do_async_callback); } diff -Nru minetest-5.2.0/src/script/lua_api/l_mainmenu.h minetest-5.3.0/src/script/lua_api/l_mainmenu.h --- minetest-5.2.0/src/script/lua_api/l_mainmenu.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_mainmenu.h 2020-07-09 21:13:21.000000000 +0000 @@ -145,6 +145,9 @@ static int l_get_max_supp_proto(lua_State *L); + // other + static int l_open_url(lua_State *L); + // async static int l_do_async_callback(lua_State *L); diff -Nru minetest-5.2.0/src/script/lua_api/l_mapgen.cpp minetest-5.3.0/src/script/lua_api/l_mapgen.cpp --- minetest-5.2.0/src/script/lua_api/l_mapgen.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_mapgen.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -91,13 +91,13 @@ {0, NULL}, }; -ObjDef *get_objdef(lua_State *L, int index, ObjDefManager *objmgr); +ObjDef *get_objdef(lua_State *L, int index, const ObjDefManager *objmgr); Biome *get_or_load_biome(lua_State *L, int index, BiomeManager *biomemgr); Biome *read_biome_def(lua_State *L, int index, const NodeDefManager *ndef); size_t get_biome_list(lua_State *L, int index, - BiomeManager *biomemgr, std::unordered_set *biome_id_list); + BiomeManager *biomemgr, std::unordered_set *biome_id_list); Schematic *get_or_load_schematic(lua_State *L, int index, SchematicManager *schemmgr, StringMap *replace_names); @@ -114,7 +114,7 @@ /////////////////////////////////////////////////////////////////////////////// -ObjDef *get_objdef(lua_State *L, int index, ObjDefManager *objmgr) +ObjDef *get_objdef(lua_State *L, int index, const ObjDefManager *objmgr) { if (index < 0) index = lua_gettop(L) + 1 + index; @@ -425,7 +425,7 @@ size_t get_biome_list(lua_State *L, int index, - BiomeManager *biomemgr, std::unordered_set *biome_id_list) + BiomeManager *biomemgr, std::unordered_set *biome_id_list) { if (index < 0) index = lua_gettop(L) + 1 + index; @@ -486,11 +486,11 @@ if (!biome_str) return 0; - BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; + const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager(); if (!bmgr) return 0; - Biome *biome = (Biome *)bmgr->getByName(biome_str); + const Biome *biome = (Biome *)bmgr->getByName(biome_str); if (!biome || biome->index == OBJDEF_INVALID_INDEX) return 0; @@ -508,11 +508,11 @@ int biome_id = luaL_checkinteger(L, 1); - BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; + const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager(); if (!bmgr) return 0; - Biome *b = (Biome *)bmgr->getRaw(biome_id); + const Biome *b = (Biome *)bmgr->getRaw(biome_id); lua_pushstring(L, b->name.c_str()); return 1; @@ -546,13 +546,11 @@ u64 seed; ss >> seed; - BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; + const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager(); if (!bmgr) return 0; float heat = bmgr->getHeatAtPosOriginal(pos, np_heat, np_heat_blend, seed); - if (!heat) - return 0; lua_pushnumber(L, heat); @@ -587,14 +585,12 @@ u64 seed; ss >> seed; - BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; + const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager(); if (!bmgr) return 0; float humidity = bmgr->getHumidityAtPosOriginal(pos, np_humidity, np_humidity_blend, seed); - if (!humidity) - return 0; lua_pushnumber(L, humidity); @@ -635,7 +631,7 @@ u64 seed; ss >> seed; - BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; + const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager(); if (!bmgr) return 0; @@ -648,7 +644,7 @@ if (!humidity) return 0; - Biome *biome = (Biome *)bmgr->getBiomeFromNoiseOriginal(heat, humidity, pos); + const Biome *biome = bmgr->getBiomeFromNoiseOriginal(heat, humidity, pos); if (!biome || biome->index == OBJDEF_INVALID_INDEX) return 0; @@ -710,7 +706,7 @@ if (!mg->heightmap) return 0; - lua_newtable(L); + lua_createtable(L, maplen, 0); for (size_t i = 0; i != maplen; i++) { lua_pushinteger(L, mg->heightmap[i]); lua_rawseti(L, -2, i + 1); @@ -722,7 +718,7 @@ if (!mg->biomegen) return 0; - lua_newtable(L); + lua_createtable(L, maplen, 0); for (size_t i = 0; i != maplen; i++) { lua_pushinteger(L, mg->biomegen->biomemap[i]); lua_rawseti(L, -2, i + 1); @@ -736,7 +732,7 @@ BiomeGenOriginal *bg = (BiomeGenOriginal *)mg->biomegen; - lua_newtable(L); + lua_createtable(L, maplen, 0); for (size_t i = 0; i != maplen; i++) { lua_pushnumber(L, bg->heatmap[i]); lua_rawseti(L, -2, i + 1); @@ -751,7 +747,7 @@ BiomeGenOriginal *bg = (BiomeGenOriginal *)mg->biomegen; - lua_newtable(L); + lua_createtable(L, maplen, 0); for (size_t i = 0; i != maplen; i++) { lua_pushnumber(L, bg->humidmap[i]); lua_rawseti(L, -2, i + 1); @@ -761,13 +757,12 @@ } case MGOBJ_GENNOTIFY: { std::map >event_map; - std::map >::iterator it; mg->gennotify.getEvents(event_map); - lua_newtable(L); - for (it = event_map.begin(); it != event_map.end(); ++it) { - lua_newtable(L); + lua_createtable(L, 0, event_map.size()); + for (auto it = event_map.begin(); it != event_map.end(); ++it) { + lua_createtable(L, it->second.size(), 0); for (size_t j = 0; j != it->second.size(); j++) { push_v3s16(L, it->second[j]); @@ -1067,7 +1062,8 @@ if (!deco_str) return 0; - DecorationManager *dmgr = getServer(L)->getEmergeManager()->decomgr; + const DecorationManager *dmgr = + getServer(L)->getEmergeManager()->getDecorationManager(); if (!dmgr) return 0; @@ -1092,7 +1088,7 @@ luaL_checktype(L, index, LUA_TTABLE); const NodeDefManager *ndef = getServer(L)->getNodeDefManager(); - BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; + BiomeManager *bmgr = getServer(L)->getEmergeManager()->getWritableBiomeManager(); Biome *biome = read_biome_def(L, index, ndef); if (!biome) @@ -1118,9 +1114,10 @@ luaL_checktype(L, index, LUA_TTABLE); const NodeDefManager *ndef = getServer(L)->getNodeDefManager(); - DecorationManager *decomgr = getServer(L)->getEmergeManager()->decomgr; - BiomeManager *biomemgr = getServer(L)->getEmergeManager()->biomemgr; - SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr; + EmergeManager *emerge = getServer(L)->getEmergeManager(); + DecorationManager *decomgr = emerge->getWritableDecorationManager(); + BiomeManager *biomemgr = emerge->getWritableBiomeManager(); + SchematicManager *schemmgr = emerge->getWritableSchematicManager(); enum DecorationType decotype = (DecorationType)getenumfield(L, index, "deco_type", es_DecorationType, -1); @@ -1275,8 +1272,9 @@ luaL_checktype(L, index, LUA_TTABLE); const NodeDefManager *ndef = getServer(L)->getNodeDefManager(); - BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; - OreManager *oremgr = getServer(L)->getEmergeManager()->oremgr; + EmergeManager *emerge = getServer(L)->getEmergeManager(); + BiomeManager *bmgr = emerge->getWritableBiomeManager(); + OreManager *oremgr = emerge->getWritableOreManager(); enum OreType oretype = (OreType)getenumfield(L, index, "ore_type", es_OreType, ORE_SCATTER); @@ -1423,7 +1421,8 @@ { NO_MAP_LOCK_REQUIRED; - SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr; + SchematicManager *schemmgr = + getServer(L)->getEmergeManager()->getWritableSchematicManager(); StringMap replace_names; if (lua_istable(L, 2)) @@ -1450,7 +1449,8 @@ { NO_MAP_LOCK_REQUIRED; - BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; + BiomeManager *bmgr = + getServer(L)->getEmergeManager()->getWritableBiomeManager(); bmgr->clear(); return 0; } @@ -1461,7 +1461,8 @@ { NO_MAP_LOCK_REQUIRED; - DecorationManager *dmgr = getServer(L)->getEmergeManager()->decomgr; + DecorationManager *dmgr = + getServer(L)->getEmergeManager()->getWritableDecorationManager(); dmgr->clear(); return 0; } @@ -1472,7 +1473,8 @@ { NO_MAP_LOCK_REQUIRED; - OreManager *omgr = getServer(L)->getEmergeManager()->oremgr; + OreManager *omgr = + getServer(L)->getEmergeManager()->getWritableOreManager(); omgr->clear(); return 0; } @@ -1483,7 +1485,8 @@ { NO_MAP_LOCK_REQUIRED; - SchematicManager *smgr = getServer(L)->getEmergeManager()->schemmgr; + SchematicManager *smgr = + getServer(L)->getEmergeManager()->getWritableSchematicManager(); smgr->clear(); return 0; } @@ -1708,7 +1711,7 @@ { NO_MAP_LOCK_REQUIRED; - SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr; + const SchematicManager *schemmgr = getServer(L)->getEmergeManager()->getSchematicManager(); //// Read options bool use_comments = getboolfield_default(L, 3, "lua_use_comments", false); @@ -1716,7 +1719,7 @@ //// Get schematic bool was_loaded = false; - Schematic *schem = (Schematic *)get_objdef(L, 1, schemmgr); + const Schematic *schem = (Schematic *)get_objdef(L, 1, schemmgr); if (!schem) { schem = load_schematic(L, 1, NULL, NULL); was_loaded = true; @@ -1759,7 +1762,8 @@ { NO_MAP_LOCK_REQUIRED; - SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr; + const SchematicManager *schemmgr = + getServer(L)->getEmergeManager()->getSchematicManager(); //// Read options std::string write_yslice = getstringfield_default(L, 2, "write_yslice_prob", "all"); diff -Nru minetest-5.2.0/src/script/lua_api/l_mapgen.h minetest-5.3.0/src/script/lua_api/l_mapgen.h --- minetest-5.2.0/src/script/lua_api/l_mapgen.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_mapgen.h 2020-07-09 21:13:21.000000000 +0000 @@ -21,6 +21,8 @@ #include "lua_api/l_base.h" +typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include + class ModApiMapgen : public ModApiBase { private: diff -Nru minetest-5.2.0/src/script/lua_api/l_metadata.cpp minetest-5.3.0/src/script/lua_api/l_metadata.cpp --- minetest-5.2.0/src/script/lua_api/l_metadata.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_metadata.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -153,7 +153,9 @@ MetaDataRef *ref = checkobject(L, 1); std::string name = luaL_checkstring(L, 2); int a = luaL_checkint(L, 3); - std::string str = itos(a); + std::string str; + if (a != 0) + str = itos(a); Metadata *meta = ref->getmeta(true); if (meta == NULL || str == meta->getString(name)) @@ -191,7 +193,9 @@ MetaDataRef *ref = checkobject(L, 1); std::string name = luaL_checkstring(L, 2); float a = readParam(L, 3); - std::string str = ftos(a); + std::string str; + if (a != 0) + str = ftos(a); Metadata *meta = ref->getmeta(true); if (meta == NULL || str == meta->getString(name)) diff -Nru minetest-5.2.0/src/script/lua_api/l_nodemeta.cpp minetest-5.3.0/src/script/lua_api/l_nodemeta.cpp --- minetest-5.2.0/src/script/lua_api/l_nodemeta.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_nodemeta.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -55,11 +55,13 @@ void NodeMetaRef::clearMeta() { + SANITY_CHECK(!m_is_local); m_env->getMap().removeNodeMetadata(m_p); } void NodeMetaRef::reportMetadataChange(const std::string *name) { + SANITY_CHECK(!m_is_local); // NOTE: This same code is in rollback_interface.cpp // Inform other things that the metadata has changed NodeMetadata *meta = dynamic_cast(m_meta); diff -Nru minetest-5.2.0/src/script/lua_api/l_nodetimer.cpp minetest-5.3.0/src/script/lua_api/l_nodetimer.cpp --- minetest-5.2.0/src/script/lua_api/l_nodetimer.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_nodetimer.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -41,11 +41,9 @@ { MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); - ServerEnvironment *env = o->m_env; - if(env == NULL) return 0; f32 t = readParam(L,2); f32 e = readParam(L,3); - env->getMap().setNodeTimer(NodeTimer(t, e, o->m_p)); + o->m_map->setNodeTimer(NodeTimer(t, e, o->m_p)); return 0; } @@ -53,10 +51,8 @@ { MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); - ServerEnvironment *env = o->m_env; - if(env == NULL) return 0; f32 t = readParam(L,2); - env->getMap().setNodeTimer(NodeTimer(t, 0, o->m_p)); + o->m_map->setNodeTimer(NodeTimer(t, 0, o->m_p)); return 0; } @@ -64,9 +60,7 @@ { MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); - ServerEnvironment *env = o->m_env; - if(env == NULL) return 0; - env->getMap().removeNodeTimer(o->m_p); + o->m_map->removeNodeTimer(o->m_p); return 0; } @@ -74,10 +68,7 @@ { MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); - ServerEnvironment *env = o->m_env; - if(env == NULL) return 0; - - NodeTimer t = env->getMap().getNodeTimer(o->m_p); + NodeTimer t = o->m_map->getNodeTimer(o->m_p); lua_pushboolean(L,(t.timeout != 0)); return 1; } @@ -86,10 +77,7 @@ { MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); - ServerEnvironment *env = o->m_env; - if(env == NULL) return 0; - - NodeTimer t = env->getMap().getNodeTimer(o->m_p); + NodeTimer t = o->m_map->getNodeTimer(o->m_p); lua_pushnumber(L,t.timeout); return 1; } @@ -98,37 +86,21 @@ { MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); - ServerEnvironment *env = o->m_env; - if(env == NULL) return 0; - - NodeTimer t = env->getMap().getNodeTimer(o->m_p); + NodeTimer t = o->m_map->getNodeTimer(o->m_p); lua_pushnumber(L,t.elapsed); return 1; } - -NodeTimerRef::NodeTimerRef(v3s16 p, ServerEnvironment *env): - m_p(p), - m_env(env) -{ -} - // Creates an NodeTimerRef and leaves it on top of stack // Not callable from Lua; all references are created on the C side. -void NodeTimerRef::create(lua_State *L, v3s16 p, ServerEnvironment *env) +void NodeTimerRef::create(lua_State *L, v3s16 p, ServerMap *map) { - NodeTimerRef *o = new NodeTimerRef(p, env); + NodeTimerRef *o = new NodeTimerRef(p, map); *(void **)(lua_newuserdata(L, sizeof(void *))) = o; luaL_getmetatable(L, className); lua_setmetatable(L, -2); } -void NodeTimerRef::set_null(lua_State *L) -{ - NodeTimerRef *o = checkobject(L, -1); - o->m_env = NULL; -} - void NodeTimerRef::Register(lua_State *L) { lua_newtable(L); diff -Nru minetest-5.2.0/src/script/lua_api/l_nodetimer.h minetest-5.3.0/src/script/lua_api/l_nodetimer.h --- minetest-5.2.0/src/script/lua_api/l_nodetimer.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_nodetimer.h 2020-07-09 21:13:21.000000000 +0000 @@ -22,13 +22,13 @@ #include "irr_v3d.h" #include "lua_api/l_base.h" -class ServerEnvironment; +class ServerMap; class NodeTimerRef : public ModApiBase { private: v3s16 m_p; - ServerEnvironment *m_env = nullptr; + ServerMap *m_map; static const char className[]; static const luaL_Reg methods[]; @@ -50,14 +50,12 @@ static int l_get_elapsed(lua_State *L); public: - NodeTimerRef(v3s16 p, ServerEnvironment *env); + NodeTimerRef(v3s16 p, ServerMap *map) : m_p(p), m_map(map) {} ~NodeTimerRef() = default; // Creates an NodeTimerRef and leaves it on top of stack // Not callable from Lua; all references are created on the C side. - static void create(lua_State *L, v3s16 p, ServerEnvironment *env); - - static void set_null(lua_State *L); + static void create(lua_State *L, v3s16 p, ServerMap *map); static void Register(lua_State *L); }; diff -Nru minetest-5.2.0/src/script/lua_api/l_noise.cpp minetest-5.3.0/src/script/lua_api/l_noise.cpp --- minetest-5.2.0/src/script/lua_api/l_noise.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_noise.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -171,9 +171,9 @@ Noise *n = o->noise; n->perlinMap2D(p.X, p.Y); - lua_newtable(L); + lua_createtable(L, n->sy, 0); for (u32 y = 0; y != n->sy; y++) { - lua_newtable(L); + lua_createtable(L, n->sx, 0); for (u32 x = 0; x != n->sx; x++) { lua_pushnumber(L, n->result[i++]); lua_rawseti(L, -2, x + 1); @@ -200,7 +200,7 @@ if (use_buffer) lua_pushvalue(L, 3); else - lua_newtable(L); + lua_createtable(L, maplen, 0); for (size_t i = 0; i != maplen; i++) { lua_pushnumber(L, n->result[i]); @@ -224,11 +224,11 @@ Noise *n = o->noise; n->perlinMap3D(p.X, p.Y, p.Z); - lua_newtable(L); + lua_createtable(L, n->sz, 0); for (u32 z = 0; z != n->sz; z++) { - lua_newtable(L); + lua_createtable(L, n->sy, 0); for (u32 y = 0; y != n->sy; y++) { - lua_newtable(L); + lua_createtable(L, n->sx, 0); for (u32 x = 0; x != n->sx; x++) { lua_pushnumber(L, n->result[i++]); lua_rawseti(L, -2, x + 1); @@ -260,7 +260,7 @@ if (use_buffer) lua_pushvalue(L, 3); else - lua_newtable(L); + lua_createtable(L, maplen, 0); for (size_t i = 0; i != maplen; i++) { lua_pushnumber(L, n->result[i]); diff -Nru minetest-5.2.0/src/script/lua_api/l_object.cpp minetest-5.3.0/src/script/lua_api/l_object.cpp --- minetest-5.2.0/src/script/lua_api/l_object.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_object.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -27,12 +27,13 @@ #include "common/c_content.h" #include "log.h" #include "tool.h" -#include "serverobject.h" -#include "content_sao.h" #include "remoteplayer.h" #include "server.h" #include "hud.h" #include "scripting_server.h" +#include "server/luaentity_sao.h" +#include "server/player_sao.h" +#include "server/serverinventorymgr.h" /* ObjectRef @@ -50,6 +51,8 @@ ServerActiveObject* ObjectRef::getobject(ObjectRef *ref) { ServerActiveObject *co = ref->m_object; + if (co && co->isGone()) + return NULL; return co; } @@ -60,8 +63,6 @@ return NULL; if (obj->getType() != ACTIVEOBJECT_TYPE_LUAENTITY) return NULL; - if (obj->isGone()) - return NULL; return (LuaEntitySAO*)obj; } @@ -72,8 +73,6 @@ return NULL; if (obj->getType() != ACTIVEOBJECT_TYPE_PLAYER) return NULL; - if (obj->isGone()) - return NULL; return (PlayerSAO*)obj; } @@ -123,14 +122,7 @@ ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); if (co == NULL) return 0; - v3f pos = co->getBasePosition() / BS; - lua_newtable(L); - lua_pushnumber(L, pos.X); - lua_setfield(L, -2, "x"); - lua_pushnumber(L, pos.Y); - lua_setfield(L, -2, "y"); - lua_pushnumber(L, pos.Z); - lua_setfield(L, -2, "z"); + push_v3f(L, co->getBasePosition() / BS); return 1; } @@ -139,7 +131,6 @@ { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); - //LuaEntitySAO *co = getluaobject(ref); ServerActiveObject *co = getobject(ref); if (co == NULL) return 0; // pos @@ -154,7 +145,6 @@ { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); - //LuaEntitySAO *co = getluaobject(ref); ServerActiveObject *co = getobject(ref); if (co == NULL) return 0; // pos @@ -300,7 +290,7 @@ if (co == NULL) return 0; // Do it InventoryLocation loc = co->getInventoryLocation(); - if (getServer(L)->getInventory(loc) != NULL) + if (getServerInventoryMgr(L)->getInventory(loc) != NULL) InvRef::create(L, loc); else lua_pushnil(L); // An object may have no inventory (nil) @@ -533,7 +523,7 @@ // get_local_animation(self) int ObjectRef::l_get_local_animation(lua_State *L) { - NO_MAP_LOCK_REQUIRED + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) @@ -685,8 +675,13 @@ ServerActiveObject *parent = getobject(parent_ref); if (co == NULL) return 0; + if (parent == NULL) return 0; + + if (co == parent) + throw LuaError("ObjectRef::set_attach: attaching object to itself is not allowed."); + // Do it int parent_id = 0; std::string bone; @@ -1109,17 +1104,13 @@ ObjectRef *ref = checkobject(L, 1); v3f vel = checkFloatPos(L, 2); - RemotePlayer *player = getplayer(ref); PlayerSAO *co = getplayersao(ref); - if (!player || !co) + if (!co) return 0; - session_t peer_id = player->getPeerId(); - if (peer_id == PEER_ID_INEXISTENT) - return 0; // Do it co->setMaxSpeedOverride(vel); - getServer(L)->SendPlayerSpeed(peer_id, vel); + getServer(L)->SendPlayerSpeed(co->getPeerID(), vel); return 0; } @@ -1259,7 +1250,7 @@ return 1; } -// set_fov(self, degrees[, is_multiplier]) +// set_fov(self, degrees[, is_multiplier, transition_time]) int ObjectRef::l_set_fov(lua_State *L) { NO_MAP_LOCK_REQUIRED; @@ -1268,7 +1259,11 @@ if (!player) return 0; - player->setFov({ static_cast(luaL_checknumber(L, 2)), readParam(L, 3) }); + player->setFov({ + static_cast(luaL_checknumber(L, 2)), + readParam(L, 3, false), + lua_isnumber(L, 4) ? static_cast(luaL_checknumber(L, 4)) : 0.0f + }); getServer(L)->SendPlayerFov(player->getPeerId()); return 0; @@ -1286,8 +1281,9 @@ PlayerFovSpec fov_spec = player->getFov(); lua_pushnumber(L, fov_spec.fov); lua_pushboolean(L, fov_spec.is_multiplier); + lua_pushnumber(L, fov_spec.transition_time); - return 2; + return 3; } // set_breath(self, breath) @@ -1463,6 +1459,8 @@ lua_setfield(L, -2, "LMB"); lua_pushboolean(L, control.RMB); lua_setfield(L, -2, "RMB"); + lua_pushboolean(L, control.zoom); + lua_setfield(L, -2, "zoom"); return 1; } @@ -1787,19 +1785,19 @@ lua_pop(L, 1); // Prevent flickering clouds at dawn/dusk: - skybox_params.sun_tint = video::SColor(255, 255, 255, 255); + skybox_params.fog_sun_tint = video::SColor(255, 255, 255, 255); lua_getfield(L, -1, "fog_sun_tint"); - read_color(L, -1, &skybox_params.sun_tint); + read_color(L, -1, &skybox_params.fog_sun_tint); lua_pop(L, 1); - skybox_params.moon_tint = video::SColor(255, 255, 255, 255); + skybox_params.fog_moon_tint = video::SColor(255, 255, 255, 255); lua_getfield(L, -1, "fog_moon_tint"); - read_color(L, -1, &skybox_params.moon_tint); + read_color(L, -1, &skybox_params.fog_moon_tint); lua_pop(L, 1); lua_getfield(L, -1, "fog_tint_type"); if (!lua_isnil(L, -1)) - skybox_params.tint_type = luaL_checkstring(L, -1); + skybox_params.fog_tint_type = luaL_checkstring(L, -1); lua_pop(L, 1); // Because we need to leave the "sky_color" table. @@ -1917,12 +1915,12 @@ push_ARGB8(L, skybox_params.sky_color.indoors); lua_setfield(L, -2, "indoors"); } - push_ARGB8(L, skybox_params.sun_tint); - lua_setfield(L, -2, "sun_tint"); - push_ARGB8(L, skybox_params.moon_tint); - lua_setfield(L, -2, "moon_tint"); - lua_pushstring(L, skybox_params.tint_type.c_str()); - lua_setfield(L, -2, "tint_type"); + push_ARGB8(L, skybox_params.fog_sun_tint); + lua_setfield(L, -2, "fog_sun_tint"); + push_ARGB8(L, skybox_params.fog_moon_tint); + lua_setfield(L, -2, "fog_moon_tint"); + lua_pushstring(L, skybox_params.fog_tint_type.c_str()); + lua_setfield(L, -2, "fog_tint_type"); return 1; } @@ -2177,9 +2175,7 @@ ratio = readParam(L, 2); } - if (!getServer(L)->overrideDayNightRatio(player, do_override, ratio)) - return 0; - + getServer(L)->overrideDayNightRatio(player, do_override, ratio); lua_pushboolean(L, true); return 1; } diff -Nru minetest-5.2.0/src/script/lua_api/l_particles.cpp minetest-5.3.0/src/script/lua_api/l_particles.cpp --- minetest-5.2.0/src/script/lua_api/l_particles.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_particles.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -23,7 +23,7 @@ #include "common/c_converter.h" #include "common/c_content.h" #include "server.h" -#include "client/particles.h" +#include "particles.h" // add_particle({pos=, velocity=, acceleration=, expirationtime=, // size=, collisiondetection=, collision_removal=, object_collision=, @@ -40,85 +40,88 @@ // glow = num int ModApiParticles::l_add_particle(lua_State *L) { - MAP_LOCK_REQUIRED; + NO_MAP_LOCK_REQUIRED; // Get parameters - v3f pos, vel, acc; - float expirationtime, size; - expirationtime = size = 1; - bool collisiondetection, vertical, collision_removal, object_collision; - collisiondetection = vertical = collision_removal = object_collision = false; - struct TileAnimationParams animation; - animation.type = TAT_NONE; - std::string texture; + struct ParticleParameters p; std::string playername; - u8 glow = 0; if (lua_gettop(L) > 1) // deprecated { - log_deprecated(L, "Deprecated add_particle call with individual parameters instead of definition"); - pos = check_v3f(L, 1); - vel = check_v3f(L, 2); - acc = check_v3f(L, 3); - expirationtime = luaL_checknumber(L, 4); - size = luaL_checknumber(L, 5); - collisiondetection = readParam(L, 6); - texture = luaL_checkstring(L, 7); + log_deprecated(L, "Deprecated add_particle call with " + "individual parameters instead of definition"); + p.pos = check_v3f(L, 1); + p.vel = check_v3f(L, 2); + p.acc = check_v3f(L, 3); + p.expirationtime = luaL_checknumber(L, 4); + p.size = luaL_checknumber(L, 5); + p.collisiondetection = readParam(L, 6); + p.texture = luaL_checkstring(L, 7); if (lua_gettop(L) == 8) // only spawn for a single player playername = luaL_checkstring(L, 8); } else if (lua_istable(L, 1)) { lua_getfield(L, 1, "pos"); - pos = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(); + if (lua_istable(L, -1)) + p.pos = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "vel"); if (lua_istable(L, -1)) { - vel = check_v3f(L, -1); + p.vel = check_v3f(L, -1); log_deprecated(L, "The use of vel is deprecated. " "Use velocity instead"); } lua_pop(L, 1); lua_getfield(L, 1, "velocity"); - vel = lua_istable(L, -1) ? check_v3f(L, -1) : vel; + if (lua_istable(L, -1)) + p.vel = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "acc"); if (lua_istable(L, -1)) { - acc = check_v3f(L, -1); + p.acc = check_v3f(L, -1); log_deprecated(L, "The use of acc is deprecated. " "Use acceleration instead"); } lua_pop(L, 1); lua_getfield(L, 1, "acceleration"); - acc = lua_istable(L, -1) ? check_v3f(L, -1) : acc; + if (lua_istable(L, -1)) + p.acc = check_v3f(L, -1); lua_pop(L, 1); - expirationtime = getfloatfield_default(L, 1, "expirationtime", 1); - size = getfloatfield_default(L, 1, "size", 1); - collisiondetection = getboolfield_default(L, 1, - "collisiondetection", collisiondetection); - collision_removal = getboolfield_default(L, 1, - "collision_removal", collision_removal); - object_collision = getboolfield_default(L, 1, - "object_collision", object_collision); - vertical = getboolfield_default(L, 1, "vertical", vertical); + p.expirationtime = getfloatfield_default(L, 1, "expirationtime", + p.expirationtime); + p.size = getfloatfield_default(L, 1, "size", p.size); + p.collisiondetection = getboolfield_default(L, 1, + "collisiondetection", p.collisiondetection); + p.collision_removal = getboolfield_default(L, 1, + "collision_removal", p.collision_removal); + p.object_collision = getboolfield_default(L, 1, + "object_collision", p.object_collision); + p.vertical = getboolfield_default(L, 1, "vertical", p.vertical); lua_getfield(L, 1, "animation"); - animation = read_animation_definition(L, -1); + p.animation = read_animation_definition(L, -1); lua_pop(L, 1); - texture = getstringfield_default(L, 1, "texture", ""); - playername = getstringfield_default(L, 1, "playername", ""); + p.texture = getstringfield_default(L, 1, "texture", p.texture); + p.glow = getintfield_default(L, 1, "glow", p.glow); + + lua_getfield(L, 1, "node"); + if (lua_istable(L, -1)) + p.node = readnode(L, -1, getGameDef(L)->ndef()); + lua_pop(L, 1); - glow = getintfield_default(L, 1, "glow", 0); + p.node_tile = getintfield_default(L, 1, "node_tile", p.node_tile); + + playername = getstringfield_default(L, 1, "playername", ""); } - getServer(L)->spawnParticle(playername, pos, vel, acc, expirationtime, size, - collisiondetection, collision_removal, object_collision, vertical, - texture, animation, glow); + + getServer(L)->spawnParticle(playername, p); return 1; } @@ -146,84 +149,82 @@ // glow = num int ModApiParticles::l_add_particlespawner(lua_State *L) { - MAP_LOCK_REQUIRED; + NO_MAP_LOCK_REQUIRED; // Get parameters - u16 amount = 1; - v3f minpos, maxpos, minvel, maxvel, minacc, maxacc; - float time, minexptime, maxexptime, minsize, maxsize; - time = minexptime = maxexptime = minsize = maxsize = 1; - bool collisiondetection, vertical, collision_removal, object_collision; - collisiondetection = vertical = collision_removal = object_collision = false; - struct TileAnimationParams animation; - animation.type = TAT_NONE; + ParticleSpawnerParameters p; ServerActiveObject *attached = NULL; - std::string texture; std::string playername; - u8 glow = 0; if (lua_gettop(L) > 1) //deprecated { - log_deprecated(L,"Deprecated add_particlespawner call with individual parameters instead of definition"); - amount = luaL_checknumber(L, 1); - time = luaL_checknumber(L, 2); - minpos = check_v3f(L, 3); - maxpos = check_v3f(L, 4); - minvel = check_v3f(L, 5); - maxvel = check_v3f(L, 6); - minacc = check_v3f(L, 7); - maxacc = check_v3f(L, 8); - minexptime = luaL_checknumber(L, 9); - maxexptime = luaL_checknumber(L, 10); - minsize = luaL_checknumber(L, 11); - maxsize = luaL_checknumber(L, 12); - collisiondetection = readParam(L, 13); - texture = luaL_checkstring(L, 14); + log_deprecated(L, "Deprecated add_particlespawner call with " + "individual parameters instead of definition"); + p.amount = luaL_checknumber(L, 1); + p.time = luaL_checknumber(L, 2); + p.minpos = check_v3f(L, 3); + p.maxpos = check_v3f(L, 4); + p.minvel = check_v3f(L, 5); + p.maxvel = check_v3f(L, 6); + p.minacc = check_v3f(L, 7); + p.maxacc = check_v3f(L, 8); + p.minexptime = luaL_checknumber(L, 9); + p.maxexptime = luaL_checknumber(L, 10); + p.minsize = luaL_checknumber(L, 11); + p.maxsize = luaL_checknumber(L, 12); + p.collisiondetection = readParam(L, 13); + p.texture = luaL_checkstring(L, 14); if (lua_gettop(L) == 15) // only spawn for a single player playername = luaL_checkstring(L, 15); } else if (lua_istable(L, 1)) { - amount = getintfield_default(L, 1, "amount", amount); - time = getfloatfield_default(L, 1, "time", time); + p.amount = getintfield_default(L, 1, "amount", p.amount); + p.time = getfloatfield_default(L, 1, "time", p.time); lua_getfield(L, 1, "minpos"); - minpos = lua_istable(L, -1) ? check_v3f(L, -1) : minpos; + if (lua_istable(L, -1)) + p.minpos = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "maxpos"); - maxpos = lua_istable(L, -1) ? check_v3f(L, -1) : maxpos; + if (lua_istable(L, -1)) + p.maxpos = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "minvel"); - minvel = lua_istable(L, -1) ? check_v3f(L, -1) : minvel; + if (lua_istable(L, -1)) + p.minvel = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "maxvel"); - maxvel = lua_istable(L, -1) ? check_v3f(L, -1) : maxvel; + if (lua_istable(L, -1)) + p.maxvel = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "minacc"); - minacc = lua_istable(L, -1) ? check_v3f(L, -1) : minacc; + if (lua_istable(L, -1)) + p.minacc = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "maxacc"); - maxacc = lua_istable(L, -1) ? check_v3f(L, -1) : maxacc; + if (lua_istable(L, -1)) + p.maxacc = check_v3f(L, -1); lua_pop(L, 1); - minexptime = getfloatfield_default(L, 1, "minexptime", minexptime); - maxexptime = getfloatfield_default(L, 1, "maxexptime", maxexptime); - minsize = getfloatfield_default(L, 1, "minsize", minsize); - maxsize = getfloatfield_default(L, 1, "maxsize", maxsize); - collisiondetection = getboolfield_default(L, 1, - "collisiondetection", collisiondetection); - collision_removal = getboolfield_default(L, 1, - "collision_removal", collision_removal); - object_collision = getboolfield_default(L, 1, - "object_collision", object_collision); + p.minexptime = getfloatfield_default(L, 1, "minexptime", p.minexptime); + p.maxexptime = getfloatfield_default(L, 1, "maxexptime", p.maxexptime); + p.minsize = getfloatfield_default(L, 1, "minsize", p.minsize); + p.maxsize = getfloatfield_default(L, 1, "maxsize", p.maxsize); + p.collisiondetection = getboolfield_default(L, 1, + "collisiondetection", p.collisiondetection); + p.collision_removal = getboolfield_default(L, 1, + "collision_removal", p.collision_removal); + p.object_collision = getboolfield_default(L, 1, + "object_collision", p.object_collision); lua_getfield(L, 1, "animation"); - animation = read_animation_definition(L, -1); + p.animation = read_animation_definition(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "attached"); @@ -233,25 +234,20 @@ attached = ObjectRef::getobject(ref); } - vertical = getboolfield_default(L, 1, "vertical", vertical); - texture = getstringfield_default(L, 1, "texture", ""); + p.vertical = getboolfield_default(L, 1, "vertical", p.vertical); + p.texture = getstringfield_default(L, 1, "texture", p.texture); playername = getstringfield_default(L, 1, "playername", ""); - glow = getintfield_default(L, 1, "glow", 0); + p.glow = getintfield_default(L, 1, "glow", p.glow); + + lua_getfield(L, 1, "node"); + if (lua_istable(L, -1)) + p.node = readnode(L, -1, getGameDef(L)->ndef()); + lua_pop(L, 1); + + p.node_tile = getintfield_default(L, 1, "node_tile", p.node_tile); } - u32 id = getServer(L)->addParticleSpawner(amount, time, - minpos, maxpos, - minvel, maxvel, - minacc, maxacc, - minexptime, maxexptime, - minsize, maxsize, - collisiondetection, - collision_removal, - object_collision, - attached, - vertical, - texture, playername, - animation, glow); + u32 id = getServer(L)->addParticleSpawner(p, attached, playername); lua_pushnumber(L, id); return 1; @@ -261,7 +257,7 @@ // player (string) is optional int ModApiParticles::l_delete_particlespawner(lua_State *L) { - MAP_LOCK_REQUIRED; + NO_MAP_LOCK_REQUIRED; // Get parameters u32 id = luaL_checknumber(L, 1); diff -Nru minetest-5.2.0/src/script/lua_api/l_particles_local.cpp minetest-5.3.0/src/script/lua_api/l_particles_local.cpp --- minetest-5.2.0/src/script/lua_api/l_particles_local.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_particles_local.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -32,56 +32,51 @@ luaL_checktype(L, 1, LUA_TTABLE); // Get parameters - v3f pos, vel, acc; - float expirationtime, size; - bool collisiondetection, vertical, collision_removal; - - struct TileAnimationParams animation; - animation.type = TAT_NONE; - - std::string texture; - - u8 glow; + ParticleParameters p; lua_getfield(L, 1, "pos"); - pos = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0); + if (lua_istable(L, -1)) + p.pos = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "velocity"); - vel = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0); + if (lua_istable(L, -1)) + p.vel = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "acceleration"); - acc = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0); + if (lua_istable(L, -1)) + p.acc = check_v3f(L, -1); lua_pop(L, 1); - expirationtime = getfloatfield_default(L, 1, "expirationtime", 1); - size = getfloatfield_default(L, 1, "size", 1); - collisiondetection = getboolfield_default(L, 1, "collisiondetection", false); - collision_removal = getboolfield_default(L, 1, "collision_removal", false); - vertical = getboolfield_default(L, 1, "vertical", false); + p.expirationtime = getfloatfield_default(L, 1, "expirationtime", + p.expirationtime); + p.size = getfloatfield_default(L, 1, "size", p.size); + p.collisiondetection = getboolfield_default(L, 1, + "collisiondetection", p.collisiondetection); + p.collision_removal = getboolfield_default(L, 1, + "collision_removal", p.collision_removal); + p.object_collision = getboolfield_default(L, 1, + "object_collision", p.object_collision); + p.vertical = getboolfield_default(L, 1, "vertical", p.vertical); lua_getfield(L, 1, "animation"); - animation = read_animation_definition(L, -1); + p.animation = read_animation_definition(L, -1); lua_pop(L, 1); - texture = getstringfield_default(L, 1, "texture", ""); + p.texture = getstringfield_default(L, 1, "texture", p.texture); + p.glow = getintfield_default(L, 1, "glow", p.glow); + + lua_getfield(L, 1, "node"); + if (lua_istable(L, -1)) + p.node = readnode(L, -1, getGameDef(L)->ndef()); + lua_pop(L, 1); - glow = getintfield_default(L, 1, "glow", 0); + p.node_tile = getintfield_default(L, 1, "node_tile", p.node_tile); ClientEvent *event = new ClientEvent(); - event->type = CE_SPAWN_PARTICLE; - event->spawn_particle.pos = new v3f (pos); - event->spawn_particle.vel = new v3f (vel); - event->spawn_particle.acc = new v3f (acc); - event->spawn_particle.expirationtime = expirationtime; - event->spawn_particle.size = size; - event->spawn_particle.collisiondetection = collisiondetection; - event->spawn_particle.collision_removal = collision_removal; - event->spawn_particle.vertical = vertical; - event->spawn_particle.texture = new std::string(texture); - event->spawn_particle.animation = animation; - event->spawn_particle.glow = glow; + event->type = CE_SPAWN_PARTICLE; + event->spawn_particle = new ParticleParameters(p); getClient(L)->pushToEventQueue(event); return 0; @@ -90,94 +85,76 @@ int ModApiParticlesLocal::l_add_particlespawner(lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); + // Get parameters - u16 amount; - v3f minpos, maxpos, minvel, maxvel, minacc, maxacc; - float time, minexptime, maxexptime, minsize, maxsize; - bool collisiondetection, vertical, collision_removal; - - struct TileAnimationParams animation; - animation.type = TAT_NONE; - // TODO: Implement this when there is a way to get an objectref. - // ServerActiveObject *attached = NULL; - std::string texture; - u8 glow; + ParticleSpawnerParameters p; - amount = getintfield_default(L, 1, "amount", 1); - time = getfloatfield_default(L, 1, "time", 1); + p.amount = getintfield_default(L, 1, "amount", p.amount); + p.time = getfloatfield_default(L, 1, "time", p.time); lua_getfield(L, 1, "minpos"); - minpos = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0); + if (lua_istable(L, -1)) + p.minpos = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "maxpos"); - maxpos = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0); + if (lua_istable(L, -1)) + p.maxpos = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "minvel"); - minvel = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0); + if (lua_istable(L, -1)) + p.minvel = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "maxvel"); - maxvel = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0); + if (lua_istable(L, -1)) + p.maxvel = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "minacc"); - minacc = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0); + if (lua_istable(L, -1)) + p.minacc = check_v3f(L, -1); lua_pop(L, 1); lua_getfield(L, 1, "maxacc"); - maxacc = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0); + if (lua_istable(L, -1)) + p.maxacc = check_v3f(L, -1); lua_pop(L, 1); - minexptime = getfloatfield_default(L, 1, "minexptime", 1); - maxexptime = getfloatfield_default(L, 1, "maxexptime", 1); - minsize = getfloatfield_default(L, 1, "minsize", 1); - maxsize = getfloatfield_default(L, 1, "maxsize", 1); - - collisiondetection = getboolfield_default(L, 1, "collisiondetection", false); - collision_removal = getboolfield_default(L, 1, "collision_removal", false); - vertical = getboolfield_default(L, 1, "vertical", false); + p.minexptime = getfloatfield_default(L, 1, "minexptime", p.minexptime); + p.maxexptime = getfloatfield_default(L, 1, "maxexptime", p.maxexptime); + p.minsize = getfloatfield_default(L, 1, "minsize", p.minsize); + p.maxsize = getfloatfield_default(L, 1, "maxsize", p.maxsize); + p.collisiondetection = getboolfield_default(L, 1, + "collisiondetection", p.collisiondetection); + p.collision_removal = getboolfield_default(L, 1, + "collision_removal", p.collision_removal); + p.object_collision = getboolfield_default(L, 1, + "object_collision", p.object_collision); lua_getfield(L, 1, "animation"); - animation = read_animation_definition(L, -1); + p.animation = read_animation_definition(L, -1); lua_pop(L, 1); - // TODO: Implement this when a way to get an objectref on the client is added -// lua_getfield(L, 1, "attached"); -// if (!lua_isnil(L, -1)) { -// ObjectRef *ref = ObjectRef::checkobject(L, -1); -// lua_pop(L, 1); -// attached = ObjectRef::getobject(ref); -// } + p.vertical = getboolfield_default(L, 1, "vertical", p.vertical); + p.texture = getstringfield_default(L, 1, "texture", p.texture); + p.glow = getintfield_default(L, 1, "glow", p.glow); + + lua_getfield(L, 1, "node"); + if (lua_istable(L, -1)) + p.node = readnode(L, -1, getGameDef(L)->ndef()); + lua_pop(L, 1); - texture = getstringfield_default(L, 1, "texture", ""); - glow = getintfield_default(L, 1, "glow", 0); + p.node_tile = getintfield_default(L, 1, "node_tile", p.node_tile); u64 id = getClient(L)->getParticleManager()->generateSpawnerId(); auto event = new ClientEvent(); - event->type = CE_ADD_PARTICLESPAWNER; - event->add_particlespawner.amount = amount; - event->add_particlespawner.spawntime = time; - event->add_particlespawner.minpos = new v3f (minpos); - event->add_particlespawner.maxpos = new v3f (maxpos); - event->add_particlespawner.minvel = new v3f (minvel); - event->add_particlespawner.maxvel = new v3f (maxvel); - event->add_particlespawner.minacc = new v3f (minacc); - event->add_particlespawner.maxacc = new v3f (maxacc); - event->add_particlespawner.minexptime = minexptime; - event->add_particlespawner.maxexptime = maxexptime; - event->add_particlespawner.minsize = minsize; - event->add_particlespawner.maxsize = maxsize; - event->add_particlespawner.collisiondetection = collisiondetection; - event->add_particlespawner.collision_removal = collision_removal; - event->add_particlespawner.attached_id = 0; - event->add_particlespawner.vertical = vertical; - event->add_particlespawner.texture = new std::string(texture); - event->add_particlespawner.id = id; - event->add_particlespawner.animation = animation; - event->add_particlespawner.glow = glow; + event->type = CE_ADD_PARTICLESPAWNER; + event->add_particlespawner.p = new ParticleSpawnerParameters(p); + event->add_particlespawner.attached_id = 0; + event->add_particlespawner.id = id; getClient(L)->pushToEventQueue(event); lua_pushnumber(L, id); diff -Nru minetest-5.2.0/src/script/lua_api/l_particles_local.h minetest-5.3.0/src/script/lua_api/l_particles_local.h --- minetest-5.2.0/src/script/lua_api/l_particles_local.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_particles_local.h 2020-07-09 21:13:21.000000000 +0000 @@ -18,6 +18,8 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#pragma once + #include "lua_api/l_base.h" class ModApiParticlesLocal : public ModApiBase diff -Nru minetest-5.2.0/src/script/lua_api/l_server.cpp minetest-5.3.0/src/script/lua_api/l_server.cpp --- minetest-5.2.0/src/script/lua_api/l_server.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_server.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -22,6 +22,7 @@ #include "common/c_converter.h" #include "common/c_content.h" #include "cpp_api/s_base.h" +#include "cpp_api/s_security.h" #include "server.h" #include "environment.h" #include "remoteplayer.h" @@ -138,51 +139,53 @@ // get_player_information(name) int ModApiServer::l_get_player_information(lua_State *L) { - NO_MAP_LOCK_REQUIRED; - const char * name = luaL_checkstring(L, 1); - RemotePlayer *player = dynamic_cast(getEnv(L))->getPlayer(name); - if (player == NULL) { + + Server *server = getServer(L); + + const char *name = luaL_checkstring(L, 1); + RemotePlayer *player = server->getEnv().getPlayer(name); + if (!player) { lua_pushnil(L); // no such player return 1; } Address addr; - try - { - addr = getServer(L)->getPeerAddress(player->getPeerId()); - } catch(const con::PeerNotFoundException &) { + try { + addr = server->getPeerAddress(player->getPeerId()); + } catch (const con::PeerNotFoundException &) { dstream << FUNCTION_NAME << ": peer was not found" << std::endl; lua_pushnil(L); // error return 1; } - float min_rtt,max_rtt,avg_rtt,min_jitter,max_jitter,avg_jitter; + float min_rtt, max_rtt, avg_rtt, min_jitter, max_jitter, avg_jitter; ClientState state; u32 uptime; u16 prot_vers; - u8 ser_vers,major,minor,patch; - std::string vers_string; - -#define ERET(code) \ - if (!(code)) { \ - dstream << FUNCTION_NAME << ": peer was not found" << std::endl; \ - lua_pushnil(L); /* error */ \ - return 1; \ - } - - ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MIN_RTT, &min_rtt)) - ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MAX_RTT, &max_rtt)) - ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::AVG_RTT, &avg_rtt)) - ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MIN_JITTER, - &min_jitter)) - ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MAX_JITTER, - &max_jitter)) - ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::AVG_JITTER, - &avg_jitter)) + u8 ser_vers, major, minor, patch; + std::string vers_string, lang_code; - ERET(getServer(L)->getClientInfo(player->getPeerId(), &state, &uptime, &ser_vers, - &prot_vers, &major, &minor, &patch, &vers_string)) + auto getConInfo = [&] (con::rtt_stat_type type, float *value) -> bool { + return server->getClientConInfo(player->getPeerId(), type, value); + }; + + bool have_con_info = + getConInfo(con::MIN_RTT, &min_rtt) && + getConInfo(con::MAX_RTT, &max_rtt) && + getConInfo(con::AVG_RTT, &avg_rtt) && + getConInfo(con::MIN_JITTER, &min_jitter) && + getConInfo(con::MAX_JITTER, &max_jitter) && + getConInfo(con::AVG_JITTER, &avg_jitter); + + bool r = server->getClientInfo(player->getPeerId(), &state, &uptime, + &ser_vers, &prot_vers, &major, &minor, &patch, &vers_string, + &lang_code); + if (!r) { + dstream << FUNCTION_NAME << ": peer was not found" << std::endl; + lua_pushnil(L); // error + return 1; + } lua_newtable(L); int table = lua_gettop(L); @@ -201,29 +204,31 @@ } lua_settable(L, table); - lua_pushstring(L,"min_rtt"); - lua_pushnumber(L, min_rtt); - lua_settable(L, table); - - lua_pushstring(L,"max_rtt"); - lua_pushnumber(L, max_rtt); - lua_settable(L, table); - - lua_pushstring(L,"avg_rtt"); - lua_pushnumber(L, avg_rtt); - lua_settable(L, table); - - lua_pushstring(L,"min_jitter"); - lua_pushnumber(L, min_jitter); - lua_settable(L, table); - - lua_pushstring(L,"max_jitter"); - lua_pushnumber(L, max_jitter); - lua_settable(L, table); - - lua_pushstring(L,"avg_jitter"); - lua_pushnumber(L, avg_jitter); - lua_settable(L, table); + if (have_con_info) { // may be missing + lua_pushstring(L, "min_rtt"); + lua_pushnumber(L, min_rtt); + lua_settable(L, table); + + lua_pushstring(L, "max_rtt"); + lua_pushnumber(L, max_rtt); + lua_settable(L, table); + + lua_pushstring(L, "avg_rtt"); + lua_pushnumber(L, avg_rtt); + lua_settable(L, table); + + lua_pushstring(L, "min_jitter"); + lua_pushnumber(L, min_jitter); + lua_settable(L, table); + + lua_pushstring(L, "max_jitter"); + lua_pushnumber(L, max_jitter); + lua_settable(L, table); + + lua_pushstring(L, "avg_jitter"); + lua_pushnumber(L, avg_jitter); + lua_settable(L, table); + } lua_pushstring(L,"connection_uptime"); lua_pushnumber(L, uptime); @@ -237,6 +242,10 @@ lua_pushnumber(L, player->formspec_version); lua_settable(L, table); + lua_pushstring(L, "lang_code"); + lua_pushstring(L, lang_code.c_str()); + lua_settable(L, table); + #ifndef NDEBUG lua_pushstring(L,"serialization_version"); lua_pushnumber(L, ser_vers); @@ -263,7 +272,6 @@ lua_settable(L, table); #endif -#undef ERET return 1; } @@ -405,9 +413,6 @@ std::vector modlist; getServer(L)->getModNames(modlist); - // Take unsorted items from mods_unsorted and sort them into - // mods_sorted; not great performance but the number of mods on a - // server will likely be small. std::sort(modlist.begin(), modlist.end()); // Package them up for Lua @@ -467,6 +472,23 @@ return 0; } +// dynamic_add_media(filepath) +int ModApiServer::l_dynamic_add_media(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + // Reject adding media before the server has started up + if (!getEnv(L)) + throw LuaError("Dynamic media cannot be added before server has started up"); + + std::string filepath = readParam(L, 1); + CHECK_SECURE_PATH(L, filepath.c_str(), false); + + bool ok = getServer(L)->dynamicAddMedia(filepath); + lua_pushboolean(L, ok); + return 1; +} + // is_singleplayer() int ModApiServer::l_is_singleplayer(lua_State *L) { @@ -531,6 +553,7 @@ API_FCT(sound_play); API_FCT(sound_stop); API_FCT(sound_fade); + API_FCT(dynamic_add_media); API_FCT(get_player_information); API_FCT(get_player_privs); diff -Nru minetest-5.2.0/src/script/lua_api/l_server.h minetest-5.3.0/src/script/lua_api/l_server.h --- minetest-5.2.0/src/script/lua_api/l_server.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_server.h 2020-07-09 21:13:21.000000000 +0000 @@ -70,6 +70,9 @@ // sound_fade(handle, step, gain) static int l_sound_fade(lua_State *L); + // dynamic_add_media(filepath) + static int l_dynamic_add_media(lua_State *L); + // get_player_privs(name, text) static int l_get_player_privs(lua_State *L); diff -Nru minetest-5.2.0/src/script/lua_api/l_util.cpp minetest-5.3.0/src/script/lua_api/l_util.cpp --- minetest-5.2.0/src/script/lua_api/l_util.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_util.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -44,7 +44,7 @@ // log([level,] text) // Writes a line to the logger. -// The one-argument version logs to infostream. +// The one-argument version logs to LL_NONE. // The two-argument version accepts a log level. // Either the special case "deprecated" for deprecation notices, or any specified in // Logger::stringToLevel(name). @@ -318,9 +318,13 @@ NO_MAP_LOCK_REQUIRED; size_t size; - const char *data = luaL_checklstring(L, 1, &size); + const char *d = luaL_checklstring(L, 1, &size); + const std::string data = std::string(d, size); + + if (!base64_is_valid(data)) + return 0; - std::string out = base64_decode(std::string(data, size)); + std::string out = base64_decode(data); lua_pushlstring(L, out.data(), out.size()); return 1; diff -Nru minetest-5.2.0/src/script/lua_api/l_util.h minetest-5.3.0/src/script/lua_api/l_util.h --- minetest-5.2.0/src/script/lua_api/l_util.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_util.h 2020-07-09 21:13:21.000000000 +0000 @@ -37,7 +37,7 @@ // log([level,] text) // Writes a line to the logger. - // The one-argument version logs to infostream. + // The one-argument version logs to LL_NONE. // The two-argument version accepts a log level. static int l_log(lua_State *L); diff -Nru minetest-5.2.0/src/script/lua_api/l_vmanip.cpp minetest-5.3.0/src/script/lua_api/l_vmanip.cpp --- minetest-5.2.0/src/script/lua_api/l_vmanip.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/lua_api/l_vmanip.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -72,7 +72,7 @@ if (use_buffer) lua_pushvalue(L, 2); else - lua_newtable(L); + lua_createtable(L, volume, 0); for (u32 i = 0; i != volume; i++) { lua_Integer cid = vm->m_data[i].getContent(); @@ -261,7 +261,7 @@ u32 volume = vm->m_area.getVolume(); - lua_newtable(L); + lua_createtable(L, volume, 0); for (u32 i = 0; i != volume; i++) { lua_Integer light = vm->m_data[i].param1; lua_pushinteger(L, light); @@ -309,7 +309,7 @@ if (use_buffer) lua_pushvalue(L, 2); else - lua_newtable(L); + lua_createtable(L, volume, 0); for (u32 i = 0; i != volume; i++) { lua_Integer param2 = vm->m_data[i].param2; diff -Nru minetest-5.2.0/src/script/scripting_client.cpp minetest-5.3.0/src/script/scripting_client.cpp --- minetest-5.2.0/src/script/scripting_client.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/scripting_client.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -55,9 +55,6 @@ InitializeModApi(L, top); lua_pop(L, 1); - if (client->getMinimap()) - LuaMinimap::create(L, client->getMinimap()); - // Push builtin initialization type lua_pushstring(L, "client"); lua_setglobal(L, "INIT"); @@ -94,3 +91,8 @@ { LuaCamera::create(getStack(), camera); } + +void ClientScripting::on_minimap_ready(Minimap *minimap) +{ + LuaMinimap::create(getStack(), minimap); +} diff -Nru minetest-5.2.0/src/script/scripting_client.h minetest-5.3.0/src/script/scripting_client.h --- minetest-5.2.0/src/script/scripting_client.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/scripting_client.h 2020-07-09 21:13:21.000000000 +0000 @@ -28,6 +28,8 @@ class Client; class LocalPlayer; class Camera; +class Minimap; + class ClientScripting: virtual public ScriptApiBase, public ScriptApiSecurity, @@ -38,6 +40,7 @@ ClientScripting(Client *client); void on_client_ready(LocalPlayer *localplayer); void on_camera_ready(Camera *camera); + void on_minimap_ready(Minimap *minimap); private: virtual void InitializeModApi(lua_State *L, int top); diff -Nru minetest-5.2.0/src/script/scripting_mainmenu.cpp minetest-5.3.0/src/script/scripting_mainmenu.cpp --- minetest-5.2.0/src/script/scripting_mainmenu.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/scripting_mainmenu.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -21,6 +21,7 @@ #include "content/mods.h" #include "cpp_api/s_internal.h" #include "lua_api/l_base.h" +#include "lua_api/l_http.h" #include "lua_api/l_mainmenu.h" #include "lua_api/l_sound.h" #include "lua_api/l_util.h" @@ -67,10 +68,12 @@ ModApiMainMenu::Initialize(L, top); ModApiUtil::Initialize(L, top); ModApiSound::Initialize(L, top); + ModApiHttp::Initialize(L, top); asyncEngine.registerStateInitializer(registerLuaClasses); asyncEngine.registerStateInitializer(ModApiMainMenu::InitializeAsync); asyncEngine.registerStateInitializer(ModApiUtil::InitializeAsync); + asyncEngine.registerStateInitializer(ModApiHttp::InitializeAsync); // Initialize async environment //TODO possibly make number of async threads configurable diff -Nru minetest-5.2.0/src/script/scripting_server.cpp minetest-5.3.0/src/script/scripting_server.cpp --- minetest-5.2.0/src/script/scripting_server.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/script/scripting_server.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -62,6 +62,10 @@ if (g_settings->getBool("secure.enable_security")) { initializeSecurity(); + } else { + warningstream << "\\!/ Mod security should never be disabled, as it allows any mod to " + << "access the host machine." + << "Mods should use minetest.request_insecure_environment() instead \\!/" << std::endl; } lua_getglobal(L, "core"); diff -Nru minetest-5.2.0/src/server/activeobjectmgr.cpp minetest-5.3.0/src/server/activeobjectmgr.cpp --- minetest-5.2.0/src/server/activeobjectmgr.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/server/activeobjectmgr.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -111,17 +111,19 @@ } // clang-format on -void ActiveObjectMgr::getObjectsInsideRadius( - const v3f &pos, float radius, std::vector &result) +void ActiveObjectMgr::getObjectsInsideRadius(const v3f &pos, float radius, + std::vector &result, + std::function include_obj_cb) { float r2 = radius * radius; for (auto &activeObject : m_active_objects) { ServerActiveObject *obj = activeObject.second; - u16 id = activeObject.first; const v3f &objectpos = obj->getBasePosition(); if (objectpos.getDistanceFromSQ(pos) > r2) continue; - result.push_back(id); + + if (!include_obj_cb || include_obj_cb(obj)) + result.push_back(obj); } } diff -Nru minetest-5.2.0/src/server/activeobjectmgr.h minetest-5.3.0/src/server/activeobjectmgr.h --- minetest-5.2.0/src/server/activeobjectmgr.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/server/activeobjectmgr.h 2020-07-09 21:13:21.000000000 +0000 @@ -22,7 +22,7 @@ #include #include #include "../activeobjectmgr.h" -#include "serverobject.h" +#include "serveractiveobject.h" namespace server { @@ -35,8 +35,9 @@ bool registerObject(ServerActiveObject *obj) override; void removeObject(u16 id) override; - void getObjectsInsideRadius( - const v3f &pos, float radius, std::vector &result); + void getObjectsInsideRadius(const v3f &pos, float radius, + std::vector &result, + std::function include_obj_cb); void getAddedActiveObjectsAroundPos(const v3f &player_pos, f32 radius, f32 player_radius, std::set ¤t_objects, diff -Nru minetest-5.2.0/src/server/CMakeLists.txt minetest-5.3.0/src/server/CMakeLists.txt --- minetest-5.2.0/src/server/CMakeLists.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/server/CMakeLists.txt 2020-07-09 21:13:21.000000000 +0000 @@ -1,4 +1,9 @@ set(server_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/activeobjectmgr.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/luaentity_sao.cpp ${CMAKE_CURRENT_SOURCE_DIR}/mods.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/player_sao.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/serveractiveobject.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/serverinventorymgr.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/unit_sao.cpp PARENT_SCOPE) diff -Nru minetest-5.2.0/src/server/luaentity_sao.cpp minetest-5.3.0/src/server/luaentity_sao.cpp --- minetest-5.2.0/src/server/luaentity_sao.cpp 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/server/luaentity_sao.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,541 @@ +/* +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2013-2020 Minetest core developers & community + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "luaentity_sao.h" +#include "collision.h" +#include "constants.h" +#include "player_sao.h" +#include "scripting_server.h" +#include "server.h" +#include "serverenvironment.h" + +LuaEntitySAO::LuaEntitySAO(ServerEnvironment *env, v3f pos, const std::string &data) + : UnitSAO(env, pos) +{ + std::string name; + std::string state; + u16 hp = 1; + v3f velocity; + v3f rotation; + + while (!data.empty()) { // breakable, run for one iteration + std::istringstream is(data, std::ios::binary); + // 'version' does not allow to incrementally extend the parameter list thus + // we need another variable to build on top of 'version=1'. Ugly hack but works™ + u8 version2 = 0; + u8 version = readU8(is); + + name = deSerializeString(is); + state = deSerializeLongString(is); + + if (version < 1) + break; + + hp = readU16(is); + velocity = readV3F1000(is); + // yaw must be yaw to be backwards-compatible + rotation.Y = readF1000(is); + + if (is.good()) // EOF for old formats + version2 = readU8(is); + + if (version2 < 1) // PROTOCOL_VERSION < 37 + break; + + // version2 >= 1 + rotation.X = readF1000(is); + rotation.Z = readF1000(is); + + // if (version2 < 2) + // break; + // + break; + } + // create object + infostream << "LuaEntitySAO::create(name=\"" << name << "\" state=\"" + << state << "\")" << std::endl; + + m_init_name = name; + m_init_state = state; + m_hp = hp; + m_velocity = velocity; + m_rotation = rotation; +} + +LuaEntitySAO::~LuaEntitySAO() +{ + if(m_registered){ + m_env->getScriptIface()->luaentity_Remove(m_id); + } + + for (u32 attached_particle_spawner : m_attached_particle_spawners) { + m_env->deleteParticleSpawner(attached_particle_spawner, false); + } +} + +void LuaEntitySAO::addedToEnvironment(u32 dtime_s) +{ + ServerActiveObject::addedToEnvironment(dtime_s); + + // Create entity from name + m_registered = m_env->getScriptIface()-> + luaentity_Add(m_id, m_init_name.c_str()); + + if(m_registered){ + // Get properties + m_env->getScriptIface()-> + luaentity_GetProperties(m_id, this, &m_prop); + // Initialize HP from properties + m_hp = m_prop.hp_max; + // Activate entity, supplying serialized state + m_env->getScriptIface()-> + luaentity_Activate(m_id, m_init_state, dtime_s); + } else { + m_prop.infotext = m_init_name; + } +} + +void LuaEntitySAO::step(float dtime, bool send_recommended) +{ + if(!m_properties_sent) + { + m_properties_sent = true; + std::string str = getPropertyPacket(); + // create message and add to list + m_messages_out.emplace(getId(), true, str); + } + + // If attached, check that our parent is still there. If it isn't, detach. + if (m_attachment_parent_id && !isAttached()) { + // This is handled when objects are removed from the map + warningstream << "LuaEntitySAO::step() id=" << m_id << + " is attached to nonexistent parent. This is a bug." << std::endl; + clearParentAttachment(); + sendPosition(false, true); + } + + m_last_sent_position_timer += dtime; + + collisionMoveResult moveresult, *moveresult_p = nullptr; + + // Each frame, parent position is copied if the object is attached, otherwise it's calculated normally + // If the object gets detached this comes into effect automatically from the last known origin + if(isAttached()) + { + v3f pos = m_env->getActiveObject(m_attachment_parent_id)->getBasePosition(); + m_base_position = pos; + m_velocity = v3f(0,0,0); + m_acceleration = v3f(0,0,0); + } + else + { + if(m_prop.physical){ + aabb3f box = m_prop.collisionbox; + box.MinEdge *= BS; + box.MaxEdge *= BS; + f32 pos_max_d = BS*0.25; // Distance per iteration + v3f p_pos = m_base_position; + v3f p_velocity = m_velocity; + v3f p_acceleration = m_acceleration; + moveresult = collisionMoveSimple(m_env, m_env->getGameDef(), + pos_max_d, box, m_prop.stepheight, dtime, + &p_pos, &p_velocity, p_acceleration, + this, m_prop.collideWithObjects); + moveresult_p = &moveresult; + + // Apply results + m_base_position = p_pos; + m_velocity = p_velocity; + m_acceleration = p_acceleration; + } else { + m_base_position += dtime * m_velocity + 0.5 * dtime + * dtime * m_acceleration; + m_velocity += dtime * m_acceleration; + } + + if (m_prop.automatic_face_movement_dir && + (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)) { + float target_yaw = atan2(m_velocity.Z, m_velocity.X) * 180 / M_PI + + m_prop.automatic_face_movement_dir_offset; + float max_rotation_per_sec = + m_prop.automatic_face_movement_max_rotation_per_sec; + + if (max_rotation_per_sec > 0) { + m_rotation.Y = wrapDegrees_0_360(m_rotation.Y); + wrappedApproachShortest(m_rotation.Y, target_yaw, + dtime * max_rotation_per_sec, 360.f); + } else { + // Negative values of max_rotation_per_sec mean disabled. + m_rotation.Y = target_yaw; + } + } + } + + if(m_registered) { + m_env->getScriptIface()->luaentity_Step(m_id, dtime, moveresult_p); + } + + if (!send_recommended) + return; + + if(!isAttached()) + { + // TODO: force send when acceleration changes enough? + float minchange = 0.2*BS; + if(m_last_sent_position_timer > 1.0){ + minchange = 0.01*BS; + } else if(m_last_sent_position_timer > 0.2){ + minchange = 0.05*BS; + } + float move_d = m_base_position.getDistanceFrom(m_last_sent_position); + move_d += m_last_sent_move_precision; + float vel_d = m_velocity.getDistanceFrom(m_last_sent_velocity); + if (move_d > minchange || vel_d > minchange || + std::fabs(m_rotation.X - m_last_sent_rotation.X) > 1.0f || + std::fabs(m_rotation.Y - m_last_sent_rotation.Y) > 1.0f || + std::fabs(m_rotation.Z - m_last_sent_rotation.Z) > 1.0f) { + + sendPosition(true, false); + } + } + + sendOutdatedData(); +} + +std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version) +{ + std::ostringstream os(std::ios::binary); + + // PROTOCOL_VERSION >= 37 + writeU8(os, 1); // version + os << serializeString(""); // name + writeU8(os, 0); // is_player + writeU16(os, getId()); //id + writeV3F32(os, m_base_position); + writeV3F32(os, m_rotation); + writeU16(os, m_hp); + + std::ostringstream msg_os(std::ios::binary); + msg_os << serializeLongString(getPropertyPacket()); // message 1 + msg_os << serializeLongString(generateUpdateArmorGroupsCommand()); // 2 + msg_os << serializeLongString(generateUpdateAnimationCommand()); // 3 + for (const auto &bone_pos : m_bone_position) { + msg_os << serializeLongString(generateUpdateBonePositionCommand( + bone_pos.first, bone_pos.second.X, bone_pos.second.Y)); // m_bone_position.size + } + msg_os << serializeLongString(generateUpdateAttachmentCommand()); // 4 + + int message_count = 4 + m_bone_position.size(); + + for (const auto &id : getAttachmentChildIds()) { + if (ServerActiveObject *obj = m_env->getActiveObject(id)) { + message_count++; + msg_os << serializeLongString(obj->generateUpdateInfantCommand( + id, protocol_version)); + } + } + + msg_os << serializeLongString(generateSetTextureModCommand()); + message_count++; + + writeU8(os, message_count); + std::string serialized = msg_os.str(); + os.write(serialized.c_str(), serialized.size()); + + // return result + return os.str(); +} + +void LuaEntitySAO::getStaticData(std::string *result) const +{ + verbosestream<getScriptIface()-> + luaentity_GetStaticdata(m_id); + os<= 37 + + writeF1000(os, m_rotation.X); + writeF1000(os, m_rotation.Z); + + // + + *result = os.str(); +} + +u16 LuaEntitySAO::punch(v3f dir, + const ToolCapabilities *toolcap, + ServerActiveObject *puncher, + float time_from_last_punch) +{ + if (!m_registered) { + // Delete unknown LuaEntities when punched + m_pending_removal = true; + return 0; + } + + FATAL_ERROR_IF(!puncher, "Punch action called without SAO"); + + s32 old_hp = getHP(); + ItemStack selected_item, hand_item; + ItemStack tool_item = puncher->getWieldedItem(&selected_item, &hand_item); + + PunchDamageResult result = getPunchDamage( + m_armor_groups, + toolcap, + &tool_item, + time_from_last_punch); + + bool damage_handled = m_env->getScriptIface()->luaentity_Punch(m_id, puncher, + time_from_last_punch, toolcap, dir, result.did_punch ? result.damage : 0); + + if (!damage_handled) { + if (result.did_punch) { + setHP((s32)getHP() - result.damage, + PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher)); + + // create message and add to list + sendPunchCommand(); + } + } + + if (getHP() == 0 && !isGone()) { + clearParentAttachment(); + clearChildAttachments(); + m_env->getScriptIface()->luaentity_on_death(m_id, puncher); + m_pending_removal = true; + } + + actionstream << puncher->getDescription() << " (id=" << puncher->getId() << + ", hp=" << puncher->getHP() << ") punched " << + getDescription() << " (id=" << m_id << ", hp=" << m_hp << + "), damage=" << (old_hp - (s32)getHP()) << + (damage_handled ? " (handled by Lua)" : "") << std::endl; + + // TODO: give Lua control over wear + return result.wear; +} + +void LuaEntitySAO::rightClick(ServerActiveObject *clicker) +{ + if (!m_registered) + return; + + m_env->getScriptIface()->luaentity_Rightclick(m_id, clicker); +} + +void LuaEntitySAO::setPos(const v3f &pos) +{ + if(isAttached()) + return; + m_base_position = pos; + sendPosition(false, true); +} + +void LuaEntitySAO::moveTo(v3f pos, bool continuous) +{ + if(isAttached()) + return; + m_base_position = pos; + if(!continuous) + sendPosition(true, true); +} + +float LuaEntitySAO::getMinimumSavedMovement() +{ + return 0.1 * BS; +} + +std::string LuaEntitySAO::getDescription() +{ + std::ostringstream oss; + oss << "LuaEntitySAO \"" << m_init_name << "\" "; + auto pos = floatToInt(m_base_position, BS); + oss << "at " << PP(pos); + return oss.str(); +} + +void LuaEntitySAO::setHP(s32 hp, const PlayerHPChangeReason &reason) +{ + m_hp = rangelim(hp, 0, U16_MAX); +} + +u16 LuaEntitySAO::getHP() const +{ + return m_hp; +} + +void LuaEntitySAO::setVelocity(v3f velocity) +{ + m_velocity = velocity; +} + +v3f LuaEntitySAO::getVelocity() +{ + return m_velocity; +} + +void LuaEntitySAO::setAcceleration(v3f acceleration) +{ + m_acceleration = acceleration; +} + +v3f LuaEntitySAO::getAcceleration() +{ + return m_acceleration; +} + +void LuaEntitySAO::setTextureMod(const std::string &mod) +{ + m_current_texture_modifier = mod; + // create message and add to list + m_messages_out.emplace(getId(), true, generateSetTextureModCommand()); +} + +std::string LuaEntitySAO::getTextureMod() const +{ + return m_current_texture_modifier; +} + + +std::string LuaEntitySAO::generateSetTextureModCommand() const +{ + std::ostringstream os(std::ios::binary); + // command + writeU8(os, AO_CMD_SET_TEXTURE_MOD); + // parameters + os << serializeString(m_current_texture_modifier); + return os.str(); +} + +std::string LuaEntitySAO::generateSetSpriteCommand(v2s16 p, u16 num_frames, + f32 framelength, bool select_horiz_by_yawpitch) +{ + std::ostringstream os(std::ios::binary); + // command + writeU8(os, AO_CMD_SET_SPRITE); + // parameters + writeV2S16(os, p); + writeU16(os, num_frames); + writeF32(os, framelength); + writeU8(os, select_horiz_by_yawpitch); + return os.str(); +} + +void LuaEntitySAO::setSprite(v2s16 p, int num_frames, float framelength, + bool select_horiz_by_yawpitch) +{ + std::string str = generateSetSpriteCommand( + p, + num_frames, + framelength, + select_horiz_by_yawpitch + ); + // create message and add to list + m_messages_out.emplace(getId(), true, str); +} + +std::string LuaEntitySAO::getName() +{ + return m_init_name; +} + +std::string LuaEntitySAO::getPropertyPacket() +{ + return generateSetPropertiesCommand(m_prop); +} + +void LuaEntitySAO::sendPosition(bool do_interpolate, bool is_movement_end) +{ + // If the object is attached client-side, don't waste bandwidth sending its position to clients + if(isAttached()) + return; + + m_last_sent_move_precision = m_base_position.getDistanceFrom( + m_last_sent_position); + m_last_sent_position_timer = 0; + m_last_sent_position = m_base_position; + m_last_sent_velocity = m_velocity; + //m_last_sent_acceleration = m_acceleration; + m_last_sent_rotation = m_rotation; + + float update_interval = m_env->getSendRecommendedInterval(); + + std::string str = generateUpdatePositionCommand( + m_base_position, + m_velocity, + m_acceleration, + m_rotation, + do_interpolate, + is_movement_end, + update_interval + ); + // create message and add to list + m_messages_out.emplace(getId(), false, str); +} + +bool LuaEntitySAO::getCollisionBox(aabb3f *toset) const +{ + if (m_prop.physical) + { + //update collision box + toset->MinEdge = m_prop.collisionbox.MinEdge * BS; + toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS; + + toset->MinEdge += m_base_position; + toset->MaxEdge += m_base_position; + + return true; + } + + return false; +} + +bool LuaEntitySAO::getSelectionBox(aabb3f *toset) const +{ + if (!m_prop.is_visible || !m_prop.pointable) { + return false; + } + + toset->MinEdge = m_prop.selectionbox.MinEdge * BS; + toset->MaxEdge = m_prop.selectionbox.MaxEdge * BS; + + return true; +} + +bool LuaEntitySAO::collideWithObjects() const +{ + return m_prop.collideWithObjects; +} diff -Nru minetest-5.2.0/src/server/luaentity_sao.h minetest-5.3.0/src/server/luaentity_sao.h --- minetest-5.2.0/src/server/luaentity_sao.h 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/server/luaentity_sao.h 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,93 @@ +/* +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2013-2020 Minetest core developers & community + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "unit_sao.h" + +class LuaEntitySAO : public UnitSAO +{ +public: + LuaEntitySAO() = delete; + // Used by the environment to load SAO + LuaEntitySAO(ServerEnvironment *env, v3f pos, const std::string &data); + // Used by the Lua API + LuaEntitySAO(ServerEnvironment *env, v3f pos, const std::string &name, + const std::string &state) : + UnitSAO(env, pos), + m_init_name(name), m_init_state(state) + { + } + ~LuaEntitySAO(); + ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_LUAENTITY; } + ActiveObjectType getSendType() const { return ACTIVEOBJECT_TYPE_GENERIC; } + virtual void addedToEnvironment(u32 dtime_s); + void step(float dtime, bool send_recommended); + std::string getClientInitializationData(u16 protocol_version); + bool isStaticAllowed() const { return m_prop.static_save; } + void getStaticData(std::string *result) const; + u16 punch(v3f dir, const ToolCapabilities *toolcap = nullptr, + ServerActiveObject *puncher = nullptr, + float time_from_last_punch = 1000000.0f); + void rightClick(ServerActiveObject *clicker); + void setPos(const v3f &pos); + void moveTo(v3f pos, bool continuous); + float getMinimumSavedMovement(); + std::string getDescription(); + void setHP(s32 hp, const PlayerHPChangeReason &reason); + u16 getHP() const; + + /* LuaEntitySAO-specific */ + void setVelocity(v3f velocity); + void addVelocity(v3f velocity) { m_velocity += velocity; } + v3f getVelocity(); + void setAcceleration(v3f acceleration); + v3f getAcceleration(); + + void setTextureMod(const std::string &mod); + std::string getTextureMod() const; + void setSprite(v2s16 p, int num_frames, float framelength, + bool select_horiz_by_yawpitch); + std::string getName(); + bool getCollisionBox(aabb3f *toset) const; + bool getSelectionBox(aabb3f *toset) const; + bool collideWithObjects() const; + +private: + std::string getPropertyPacket(); + void sendPosition(bool do_interpolate, bool is_movement_end); + std::string generateSetTextureModCommand() const; + static std::string generateSetSpriteCommand(v2s16 p, u16 num_frames, + f32 framelength, bool select_horiz_by_yawpitch); + + std::string m_init_name; + std::string m_init_state; + bool m_registered = false; + + v3f m_velocity; + v3f m_acceleration; + + v3f m_last_sent_position; + v3f m_last_sent_velocity; + v3f m_last_sent_rotation; + float m_last_sent_position_timer = 0.0f; + float m_last_sent_move_precision = 0.0f; + std::string m_current_texture_modifier = ""; +}; diff -Nru minetest-5.2.0/src/server/mods.cpp minetest-5.3.0/src/server/mods.cpp --- minetest-5.2.0/src/server/mods.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/server/mods.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -22,6 +22,8 @@ #include "log.h" #include "scripting_server.h" #include "content/subgames.h" +#include "porting.h" +#include "util/metricsbackend.h" /** * Manage server mods @@ -66,14 +68,10 @@ "Only characters [a-z0-9_] are allowed."); } std::string script_path = mod.path + DIR_DELIM + "init.lua"; - infostream << " [" << padStringRight(mod.name, 12) << "] [\"" - << script_path << "\"]" << std::endl; - auto t = std::chrono::steady_clock::now(); + auto t = porting::getTimeMs(); script->loadMod(script_path, mod.name); infostream << "Mod \"" << mod.name << "\" loaded after " - << std::chrono::duration_cast( - std::chrono::steady_clock::now() - t).count() * 0.001f - << " seconds" << std::endl; + << (porting::getTimeMs() - t) << " ms" << std::endl; } // Run a callback when mods are loaded diff -Nru minetest-5.2.0/src/server/mods.h minetest-5.3.0/src/server/mods.h --- minetest-5.2.0/src/server/mods.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/server/mods.h 2020-07-09 21:13:21.000000000 +0000 @@ -20,7 +20,10 @@ #pragma once #include "content/mods.h" +#include +class MetricsBackend; +class MetricCounter; class ServerScripting; /** diff -Nru minetest-5.2.0/src/server/player_sao.cpp minetest-5.3.0/src/server/player_sao.cpp --- minetest-5.2.0/src/server/player_sao.cpp 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/server/player_sao.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,665 @@ +/* +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2013-2020 Minetest core developers & community + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "player_sao.h" +#include "nodedef.h" +#include "remoteplayer.h" +#include "scripting_server.h" +#include "server.h" +#include "serverenvironment.h" + +PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t peer_id_, + bool is_singleplayer): + UnitSAO(env_, v3f(0,0,0)), + m_player(player_), + m_peer_id(peer_id_), + m_is_singleplayer(is_singleplayer) +{ + SANITY_CHECK(m_peer_id != PEER_ID_INEXISTENT); + + m_prop.hp_max = PLAYER_MAX_HP_DEFAULT; + m_prop.breath_max = PLAYER_MAX_BREATH_DEFAULT; + m_prop.physical = false; + m_prop.collisionbox = aabb3f(-0.3f, 0.0f, -0.3f, 0.3f, 1.77f, 0.3f); + m_prop.selectionbox = aabb3f(-0.3f, 0.0f, -0.3f, 0.3f, 1.77f, 0.3f); + m_prop.pointable = true; + // Start of default appearance, this should be overwritten by Lua + m_prop.visual = "upright_sprite"; + m_prop.visual_size = v3f(1, 2, 1); + m_prop.textures.clear(); + m_prop.textures.emplace_back("player.png"); + m_prop.textures.emplace_back("player_back.png"); + m_prop.colors.clear(); + m_prop.colors.emplace_back(255, 255, 255, 255); + m_prop.spritediv = v2s16(1,1); + m_prop.eye_height = 1.625f; + // End of default appearance + m_prop.is_visible = true; + m_prop.backface_culling = false; + m_prop.makes_footstep_sound = true; + m_prop.stepheight = PLAYER_DEFAULT_STEPHEIGHT * BS; + m_hp = m_prop.hp_max; + m_breath = m_prop.breath_max; + // Disable zoom in survival mode using a value of 0 + m_prop.zoom_fov = g_settings->getBool("creative_mode") ? 15.0f : 0.0f; + + if (!g_settings->getBool("enable_damage")) + m_armor_groups["immortal"] = 1; +} + +void PlayerSAO::finalize(RemotePlayer *player, const std::set &privs) +{ + assert(player); + m_player = player; + m_privs = privs; +} + +v3f PlayerSAO::getEyeOffset() const +{ + return v3f(0, BS * m_prop.eye_height, 0); +} + +std::string PlayerSAO::getDescription() +{ + return std::string("player ") + m_player->getName(); +} + +// Called after id has been set and has been inserted in environment +void PlayerSAO::addedToEnvironment(u32 dtime_s) +{ + ServerActiveObject::addedToEnvironment(dtime_s); + ServerActiveObject::setBasePosition(m_base_position); + m_player->setPlayerSAO(this); + m_player->setPeerId(m_peer_id); + m_last_good_position = m_base_position; +} + +// Called before removing from environment +void PlayerSAO::removingFromEnvironment() +{ + ServerActiveObject::removingFromEnvironment(); + if (m_player->getPlayerSAO() == this) { + unlinkPlayerSessionAndSave(); + for (u32 attached_particle_spawner : m_attached_particle_spawners) { + m_env->deleteParticleSpawner(attached_particle_spawner, false); + } + } +} + +std::string PlayerSAO::getClientInitializationData(u16 protocol_version) +{ + std::ostringstream os(std::ios::binary); + + // Protocol >= 15 + writeU8(os, 1); // version + os << serializeString(m_player->getName()); // name + writeU8(os, 1); // is_player + writeS16(os, getId()); // id + writeV3F32(os, m_base_position); + writeV3F32(os, m_rotation); + writeU16(os, getHP()); + + std::ostringstream msg_os(std::ios::binary); + msg_os << serializeLongString(getPropertyPacket()); // message 1 + msg_os << serializeLongString(generateUpdateArmorGroupsCommand()); // 2 + msg_os << serializeLongString(generateUpdateAnimationCommand()); // 3 + for (const auto &bone_pos : m_bone_position) { + msg_os << serializeLongString(generateUpdateBonePositionCommand( + bone_pos.first, bone_pos.second.X, bone_pos.second.Y)); // m_bone_position.size + } + msg_os << serializeLongString(generateUpdateAttachmentCommand()); // 4 + msg_os << serializeLongString(generateUpdatePhysicsOverrideCommand()); // 5 + + int message_count = 5 + m_bone_position.size(); + + for (const auto &id : getAttachmentChildIds()) { + if (ServerActiveObject *obj = m_env->getActiveObject(id)) { + message_count++; + msg_os << serializeLongString(obj->generateUpdateInfantCommand( + id, protocol_version)); + } + } + + writeU8(os, message_count); + std::string serialized = msg_os.str(); + os.write(serialized.c_str(), serialized.size()); + + // return result + return os.str(); +} + +void PlayerSAO::getStaticData(std::string * result) const +{ + FATAL_ERROR("Obsolete function"); +} + +void PlayerSAO::step(float dtime, bool send_recommended) +{ + if (!isImmortal() && 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); + const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n); + // If node generates drown + if (c.drowning > 0 && m_hp > 0) { + if (m_breath > 0) + setBreath(m_breath - 1); + + // No more breath, damage player + if (m_breath == 0) { + PlayerHPChangeReason reason(PlayerHPChangeReason::DROWNING); + setHP(m_hp - c.drowning, reason); + m_env->getGameDef()->SendPlayerHPOrDie(this, reason); + } + } + } + + if (m_breathing_interval.step(dtime, 0.5f) && !isImmortal()) { + // Get nose/mouth position, approximate with eye position + v3s16 p = floatToInt(getEyePosition(), BS); + MapNode n = m_env->getMap().getNode(p); + const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n); + // If player is alive & not drowning & not in ignore & not immortal, breathe + if (m_breath < m_prop.breath_max && c.drowning == 0 && + n.getContent() != CONTENT_IGNORE && m_hp > 0) + setBreath(m_breath + 1); + } + + if (!isImmortal() && m_node_hurt_interval.step(dtime, 1.0f)) { + u32 damage_per_second = 0; + std::string nodename; + // Lowest and highest damage points are 0.1 within collisionbox + float dam_top = m_prop.collisionbox.MaxEdge.Y - 0.1f; + + // Sequence of damage points, starting 0.1 above feet and progressing + // upwards in 1 node intervals, stopping below top damage point. + for (float dam_height = 0.1f; dam_height < dam_top; dam_height++) { + v3s16 p = floatToInt(m_base_position + + v3f(0.0f, dam_height * BS, 0.0f), BS); + MapNode n = m_env->getMap().getNode(p); + const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n); + if (c.damage_per_second > damage_per_second) { + damage_per_second = c.damage_per_second; + nodename = c.name; + } + } + + // Top damage point + v3s16 ptop = floatToInt(m_base_position + + v3f(0.0f, dam_top * BS, 0.0f), BS); + MapNode ntop = m_env->getMap().getNode(ptop); + const ContentFeatures &c = m_env->getGameDef()->ndef()->get(ntop); + if (c.damage_per_second > damage_per_second) { + damage_per_second = c.damage_per_second; + nodename = c.name; + } + + if (damage_per_second != 0 && m_hp > 0) { + s32 newhp = (s32)m_hp - (s32)damage_per_second; + PlayerHPChangeReason reason(PlayerHPChangeReason::NODE_DAMAGE, nodename); + setHP(newhp, reason); + m_env->getGameDef()->SendPlayerHPOrDie(this, reason); + } + } + + if (!m_properties_sent) { + m_properties_sent = true; + std::string str = getPropertyPacket(); + // create message and add to list + m_messages_out.emplace(getId(), true, str); + m_env->getScriptIface()->player_event(this, "properties_changed"); + } + + // If attached, check that our parent is still there. If it isn't, detach. + if (m_attachment_parent_id && !isAttached()) { + // 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(m_peer_id); + } + + //dstream<<"PlayerSAO::step: dtime: "<getMaxLagEstimate() * 2.0f; + if(lag_pool_max < LAG_POOL_MIN) + lag_pool_max = LAG_POOL_MIN; + m_dig_pool.setMax(lag_pool_max); + m_move_pool.setMax(lag_pool_max); + + // Increment cheat prevention timers + m_dig_pool.add(dtime); + m_move_pool.add(dtime); + m_time_from_last_teleport += dtime; + m_time_from_last_punch += dtime; + m_nocheat_dig_time += dtime; + m_max_speed_override_time = MYMAX(m_max_speed_override_time - dtime, 0.0f); + + // Each frame, parent position is copied if the object is attached, + // otherwise it's calculated normally. + // If the object gets detached this comes into effect automatically from + // the last known origin. + if (isAttached()) { + v3f pos = m_env->getActiveObject(m_attachment_parent_id)->getBasePosition(); + m_last_good_position = pos; + setBasePosition(pos); + } + + if (!send_recommended) + return; + + if (m_position_not_sent) { + m_position_not_sent = false; + float update_interval = m_env->getSendRecommendedInterval(); + v3f pos; + // When attached, the position is only sent to clients where the + // parent isn't known + if (isAttached()) + pos = m_last_good_position; + else + pos = m_base_position; + + std::string str = generateUpdatePositionCommand( + pos, + v3f(0.0f, 0.0f, 0.0f), + v3f(0.0f, 0.0f, 0.0f), + m_rotation, + true, + false, + update_interval + ); + // create message and add to list + m_messages_out.emplace(getId(), false, str); + } + + if (!m_physics_override_sent) { + m_physics_override_sent = true; + // create message and add to list + m_messages_out.emplace(getId(), true, generateUpdatePhysicsOverrideCommand()); + } + + sendOutdatedData(); +} + +std::string PlayerSAO::generateUpdatePhysicsOverrideCommand() const +{ + std::ostringstream os(std::ios::binary); + // command + writeU8(os, AO_CMD_SET_PHYSICS_OVERRIDE); + // parameters + writeF32(os, m_physics_override_speed); + writeF32(os, m_physics_override_jump); + writeF32(os, m_physics_override_gravity); + // these are sent inverted so we get true when the server sends nothing + writeU8(os, !m_physics_override_sneak); + writeU8(os, !m_physics_override_sneak_glitch); + writeU8(os, !m_physics_override_new_move); + return os.str(); +} + +void PlayerSAO::setBasePosition(const v3f &position) +{ + if (m_player && position != m_base_position) + m_player->setDirty(true); + + // This needs to be ran for attachments too + ServerActiveObject::setBasePosition(position); + + // Updating is not wanted/required for player migration + if (m_env) { + m_position_not_sent = true; + } +} + +void PlayerSAO::setPos(const v3f &pos) +{ + if(isAttached()) + return; + + // Send mapblock of target location + v3s16 blockpos = v3s16(pos.X / MAP_BLOCKSIZE, pos.Y / MAP_BLOCKSIZE, pos.Z / MAP_BLOCKSIZE); + m_env->getGameDef()->SendBlock(m_peer_id, blockpos); + + setBasePosition(pos); + // Movement caused by this command is always valid + m_last_good_position = pos; + m_move_pool.empty(); + m_time_from_last_teleport = 0.0; + m_env->getGameDef()->SendMovePlayer(m_peer_id); +} + +void PlayerSAO::moveTo(v3f pos, bool continuous) +{ + if(isAttached()) + return; + + setBasePosition(pos); + // Movement caused by this command is always valid + m_last_good_position = pos; + m_move_pool.empty(); + m_time_from_last_teleport = 0.0; + m_env->getGameDef()->SendMovePlayer(m_peer_id); +} + +void PlayerSAO::setPlayerYaw(const float yaw) +{ + v3f rotation(0, yaw, 0); + if (m_player && yaw != m_rotation.Y) + m_player->setDirty(true); + + // Set player model yaw, not look view + UnitSAO::setRotation(rotation); +} + +void PlayerSAO::setFov(const float fov) +{ + if (m_player && fov != m_fov) + m_player->setDirty(true); + + m_fov = fov; +} + +void PlayerSAO::setWantedRange(const s16 range) +{ + if (m_player && range != m_wanted_range) + m_player->setDirty(true); + + m_wanted_range = range; +} + +void PlayerSAO::setPlayerYawAndSend(const float yaw) +{ + setPlayerYaw(yaw); + m_env->getGameDef()->SendMovePlayer(m_peer_id); +} + +void PlayerSAO::setLookPitch(const float pitch) +{ + if (m_player && pitch != m_pitch) + m_player->setDirty(true); + + m_pitch = pitch; +} + +void PlayerSAO::setLookPitchAndSend(const float pitch) +{ + setLookPitch(pitch); + m_env->getGameDef()->SendMovePlayer(m_peer_id); +} + +u16 PlayerSAO::punch(v3f dir, + const ToolCapabilities *toolcap, + ServerActiveObject *puncher, + float time_from_last_punch) +{ + if (!toolcap) + return 0; + + FATAL_ERROR_IF(!puncher, "Punch action called without SAO"); + + // No effect if PvP disabled or if immortal + if (isImmortal() || !g_settings->getBool("enable_pvp")) { + if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { + // create message and add to list + sendPunchCommand(); + return 0; + } + } + + s32 old_hp = getHP(); + HitParams hitparams = getHitParams(m_armor_groups, toolcap, + time_from_last_punch); + + PlayerSAO *playersao = m_player->getPlayerSAO(); + + bool damage_handled = m_env->getScriptIface()->on_punchplayer(playersao, + puncher, time_from_last_punch, toolcap, dir, + hitparams.hp); + + if (!damage_handled) { + setHP((s32)getHP() - (s32)hitparams.hp, + PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher)); + } else { // override client prediction + if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { + // create message and add to list + sendPunchCommand(); + } + } + + actionstream << puncher->getDescription() << " (id=" << puncher->getId() << + ", hp=" << puncher->getHP() << ") punched " << + getDescription() << " (id=" << m_id << ", hp=" << m_hp << + "), damage=" << (old_hp - (s32)getHP()) << + (damage_handled ? " (handled by Lua)" : "") << std::endl; + + return hitparams.wear; +} + +void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason) +{ + s32 oldhp = m_hp; + + hp = rangelim(hp, 0, m_prop.hp_max); + + if (oldhp != hp) { + s32 hp_change = m_env->getScriptIface()->on_player_hpchange(this, hp - oldhp, reason); + if (hp_change == 0) + return; + + hp = rangelim(oldhp + hp_change, 0, m_prop.hp_max); + } + + if (hp < oldhp && isImmortal()) + return; + + m_hp = hp; + + // Update properties on death + if ((hp == 0) != (oldhp == 0)) + m_properties_sent = false; +} + +void PlayerSAO::setBreath(const u16 breath, bool send) +{ + if (m_player && breath != m_breath) + m_player->setDirty(true); + + m_breath = rangelim(breath, 0, m_prop.breath_max); + + if (send) + m_env->getGameDef()->SendPlayerBreath(this); +} + +Inventory *PlayerSAO::getInventory() const +{ + return m_player ? &m_player->inventory : nullptr; +} + +InventoryLocation PlayerSAO::getInventoryLocation() const +{ + InventoryLocation loc; + loc.setPlayer(m_player->getName()); + return loc; +} + +u16 PlayerSAO::getWieldIndex() const +{ + return m_player->getWieldIndex(); +} + +ItemStack PlayerSAO::getWieldedItem(ItemStack *selected, ItemStack *hand) const +{ + return m_player->getWieldedItem(selected, hand); +} + +bool PlayerSAO::setWieldedItem(const ItemStack &item) +{ + InventoryList *mlist = m_player->inventory.getList(getWieldList()); + if (mlist) { + mlist->changeItem(m_player->getWieldIndex(), item); + return true; + } + return false; +} + +void PlayerSAO::disconnected() +{ + m_peer_id = PEER_ID_INEXISTENT; + m_pending_removal = true; +} + +void PlayerSAO::unlinkPlayerSessionAndSave() +{ + assert(m_player->getPlayerSAO() == this); + m_player->setPeerId(PEER_ID_INEXISTENT); + m_env->savePlayer(m_player); + m_player->setPlayerSAO(NULL); + m_env->removePlayer(m_player); +} + +std::string PlayerSAO::getPropertyPacket() +{ + m_prop.is_visible = (true); + return generateSetPropertiesCommand(m_prop); +} + +void PlayerSAO::setMaxSpeedOverride(const v3f &vel) +{ + if (m_max_speed_override_time == 0.0f) + m_max_speed_override = vel; + else + m_max_speed_override += vel; + if (m_player) { + float accel = MYMIN(m_player->movement_acceleration_default, + m_player->movement_acceleration_air); + m_max_speed_override_time = m_max_speed_override.getLength() / accel / BS; + } +} + +bool PlayerSAO::checkMovementCheat() +{ + if (isAttached() || m_is_singleplayer || + g_settings->getBool("disable_anticheat")) { + m_last_good_position = m_base_position; + return false; + } + + bool cheated = false; + /* + Check player movements + + NOTE: Actually the server should handle player physics like the + client does and compare player's position to what is calculated + on our side. This is required when eg. players fly due to an + explosion. Altough a node-based alternative might be possible + too, and much more lightweight. + */ + + float override_max_H, override_max_V; + if (m_max_speed_override_time > 0.0f) { + override_max_H = MYMAX(fabs(m_max_speed_override.X), fabs(m_max_speed_override.Z)); + override_max_V = fabs(m_max_speed_override.Y); + } else { + override_max_H = override_max_V = 0.0f; + } + + float player_max_walk = 0; // horizontal movement + float player_max_jump = 0; // vertical upwards movement + + if (m_privs.count("fast") != 0) + player_max_walk = m_player->movement_speed_fast; // Fast speed + else + player_max_walk = m_player->movement_speed_walk; // Normal speed + player_max_walk *= m_physics_override_speed; + player_max_walk = MYMAX(player_max_walk, override_max_H); + + player_max_jump = m_player->movement_speed_jump * m_physics_override_jump; + // FIXME: Bouncy nodes cause practically unbound increase in Y speed, + // until this can be verified correctly, tolerate higher jumping speeds + player_max_jump *= 2.0; + player_max_jump = MYMAX(player_max_jump, override_max_V); + + // Don't divide by zero! + if (player_max_walk < 0.0001f) + player_max_walk = 0.0001f; + if (player_max_jump < 0.0001f) + player_max_jump = 0.0001f; + + v3f diff = (m_base_position - m_last_good_position); + float d_vert = diff.Y; + diff.Y = 0; + float d_horiz = diff.getLength(); + float required_time = d_horiz / player_max_walk; + + // FIXME: Checking downwards movement is not easily possible currently, + // the server could calculate speed differences to examine the gravity + if (d_vert > 0) { + // In certain cases (water, ladders) walking speed is applied vertically + float s = MYMAX(player_max_jump, player_max_walk); + required_time = MYMAX(required_time, d_vert / s); + } + + if (m_move_pool.grab(required_time)) { + m_last_good_position = m_base_position; + } else { + const float LAG_POOL_MIN = 5.0; + float lag_pool_max = m_env->getMaxLagEstimate() * 2.0; + lag_pool_max = MYMAX(lag_pool_max, LAG_POOL_MIN); + if (m_time_from_last_teleport > lag_pool_max) { + actionstream << "Server: " << m_player->getName() + << " moved too fast: V=" << d_vert << ", H=" << d_horiz + << "; resetting position." << std::endl; + cheated = true; + } + setBasePosition(m_last_good_position); + } + return cheated; +} + +bool PlayerSAO::getCollisionBox(aabb3f *toset) const +{ + //update collision box + toset->MinEdge = m_prop.collisionbox.MinEdge * BS; + toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS; + + toset->MinEdge += m_base_position; + toset->MaxEdge += m_base_position; + return true; +} + +bool PlayerSAO::getSelectionBox(aabb3f *toset) const +{ + if (!m_prop.is_visible || !m_prop.pointable) { + return false; + } + + toset->MinEdge = m_prop.selectionbox.MinEdge * BS; + toset->MaxEdge = m_prop.selectionbox.MaxEdge * BS; + + return true; +} + +float PlayerSAO::getZoomFOV() const +{ + return m_prop.zoom_fov; +} diff -Nru minetest-5.2.0/src/server/player_sao.h minetest-5.3.0/src/server/player_sao.h --- minetest-5.2.0/src/server/player_sao.h 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/server/player_sao.h 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,300 @@ +/* +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2013-2020 Minetest core developers & community + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "constants.h" +#include "network/networkprotocol.h" +#include "unit_sao.h" +#include "util/numeric.h" + +/* + PlayerSAO needs some internals exposed. +*/ + +class LagPool +{ + float m_pool = 15.0f; + float m_max = 15.0f; + +public: + LagPool() = default; + + void setMax(float new_max) + { + m_max = new_max; + if (m_pool > new_max) + m_pool = new_max; + } + + void add(float dtime) + { + m_pool -= dtime; + if (m_pool < 0) + m_pool = 0; + } + + void empty() { m_pool = m_max; } + + bool grab(float dtime) + { + if (dtime <= 0) + return true; + if (m_pool + dtime > m_max) + return false; + m_pool += dtime; + return true; + } +}; + +class RemotePlayer; + +class PlayerSAO : public UnitSAO +{ +public: + PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t peer_id_, + bool is_singleplayer); + + ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_PLAYER; } + ActiveObjectType getSendType() const { return ACTIVEOBJECT_TYPE_GENERIC; } + std::string getDescription(); + + /* + Active object <-> environment interface + */ + + void addedToEnvironment(u32 dtime_s); + void removingFromEnvironment(); + bool isStaticAllowed() const { return false; } + std::string getClientInitializationData(u16 protocol_version); + void getStaticData(std::string *result) const; + void step(float dtime, bool send_recommended); + void setBasePosition(const v3f &position); + void setPos(const v3f &pos); + void moveTo(v3f pos, bool continuous); + void setPlayerYaw(const float yaw); + // Data should not be sent at player initialization + void setPlayerYawAndSend(const float yaw); + void setLookPitch(const float pitch); + // Data should not be sent at player initialization + void setLookPitchAndSend(const float pitch); + f32 getLookPitch() const { return m_pitch; } + f32 getRadLookPitch() const { return m_pitch * core::DEGTORAD; } + // Deprecated + f32 getRadLookPitchDep() const { return -1.0 * m_pitch * core::DEGTORAD; } + void setFov(const float pitch); + f32 getFov() const { return m_fov; } + void setWantedRange(const s16 range); + s16 getWantedRange() const { return m_wanted_range; } + + /* + Interaction interface + */ + + u16 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher, + float time_from_last_punch); + void rightClick(ServerActiveObject *clicker) {} + void setHP(s32 hp, const PlayerHPChangeReason &reason); + void setHPRaw(u16 hp) { m_hp = hp; } + s16 readDamage(); + u16 getBreath() const { return m_breath; } + void setBreath(const u16 breath, bool send = true); + + /* + Inventory interface + */ + Inventory *getInventory() const; + InventoryLocation getInventoryLocation() const; + void setInventoryModified() {} + std::string getWieldList() const { return "main"; } + u16 getWieldIndex() const; + ItemStack getWieldedItem(ItemStack *selected, ItemStack *hand = nullptr) const; + bool setWieldedItem(const ItemStack &item); + + /* + PlayerSAO-specific + */ + + void disconnected(); + + RemotePlayer *getPlayer() { return m_player; } + session_t getPeerID() const { return m_peer_id; } + + // Cheat prevention + + v3f getLastGoodPosition() const { return m_last_good_position; } + float resetTimeFromLastPunch() + { + float r = m_time_from_last_punch; + m_time_from_last_punch = 0.0; + return r; + } + void noCheatDigStart(const v3s16 &p) + { + m_nocheat_dig_pos = p; + m_nocheat_dig_time = 0; + } + v3s16 getNoCheatDigPos() { return m_nocheat_dig_pos; } + float getNoCheatDigTime() { return m_nocheat_dig_time; } + void noCheatDigEnd() { m_nocheat_dig_pos = v3s16(32767, 32767, 32767); } + LagPool &getDigPool() { return m_dig_pool; } + void setMaxSpeedOverride(const v3f &vel); + // Returns true if cheated + bool checkMovementCheat(); + + // Other + + void updatePrivileges(const std::set &privs, bool is_singleplayer) + { + m_privs = privs; + m_is_singleplayer = is_singleplayer; + } + + bool getCollisionBox(aabb3f *toset) const; + bool getSelectionBox(aabb3f *toset) const; + bool collideWithObjects() const { return true; } + + void finalize(RemotePlayer *player, const std::set &privs); + + v3f getEyePosition() const { return m_base_position + getEyeOffset(); } + v3f getEyeOffset() const; + float getZoomFOV() const; + + inline Metadata &getMeta() { return m_meta; } + +private: + std::string getPropertyPacket(); + void unlinkPlayerSessionAndSave(); + std::string generateUpdatePhysicsOverrideCommand() const; + + RemotePlayer *m_player = nullptr; + session_t m_peer_id = 0; + + // Cheat prevention + LagPool m_dig_pool; + LagPool m_move_pool; + v3f m_last_good_position; + float m_time_from_last_teleport = 0.0f; + float m_time_from_last_punch = 0.0f; + v3s16 m_nocheat_dig_pos = v3s16(32767, 32767, 32767); + float m_nocheat_dig_time = 0.0f; + float m_max_speed_override_time = 0.0f; + v3f m_max_speed_override = v3f(0.0f, 0.0f, 0.0f); + + // Timers + IntervalLimiter m_breathing_interval; + IntervalLimiter m_drowning_interval; + IntervalLimiter m_node_hurt_interval; + + bool m_position_not_sent = false; + + // Cached privileges for enforcement + std::set m_privs; + bool m_is_singleplayer; + + u16 m_breath = PLAYER_MAX_BREATH_DEFAULT; + f32 m_pitch = 0.0f; + f32 m_fov = 0.0f; + s16 m_wanted_range = 0.0f; + + Metadata m_meta; + +public: + float m_physics_override_speed = 1.0f; + float m_physics_override_jump = 1.0f; + float m_physics_override_gravity = 1.0f; + bool m_physics_override_sneak = true; + bool m_physics_override_sneak_glitch = false; + bool m_physics_override_new_move = true; + bool m_physics_override_sent = false; +}; + +struct PlayerHPChangeReason +{ + enum Type : u8 + { + SET_HP, + PLAYER_PUNCH, + FALL, + NODE_DAMAGE, + DROWNING, + RESPAWN + }; + + Type type = SET_HP; + bool from_mod = false; + int lua_reference = -1; + + // For PLAYER_PUNCH + ServerActiveObject *object = nullptr; + // For NODE_DAMAGE + std::string node; + + inline bool hasLuaReference() const { return lua_reference >= 0; } + + bool setTypeFromString(const std::string &typestr) + { + if (typestr == "set_hp") + type = SET_HP; + else if (typestr == "punch") + type = PLAYER_PUNCH; + else if (typestr == "fall") + type = FALL; + else if (typestr == "node_damage") + type = NODE_DAMAGE; + else if (typestr == "drown") + type = DROWNING; + else if (typestr == "respawn") + type = RESPAWN; + else + return false; + + return true; + } + + std::string getTypeAsString() const + { + switch (type) { + case PlayerHPChangeReason::SET_HP: + return "set_hp"; + case PlayerHPChangeReason::PLAYER_PUNCH: + return "punch"; + case PlayerHPChangeReason::FALL: + return "fall"; + case PlayerHPChangeReason::NODE_DAMAGE: + return "node_damage"; + case PlayerHPChangeReason::DROWNING: + return "drown"; + case PlayerHPChangeReason::RESPAWN: + return "respawn"; + default: + return "?"; + } + } + + PlayerHPChangeReason(Type type) : type(type) {} + + PlayerHPChangeReason(Type type, ServerActiveObject *object) : + type(type), object(object) + { + } + + PlayerHPChangeReason(Type type, std::string node) : type(type), node(node) {} +}; diff -Nru minetest-5.2.0/src/server/serveractiveobject.cpp minetest-5.3.0/src/server/serveractiveobject.cpp --- minetest-5.2.0/src/server/serveractiveobject.cpp 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/server/serveractiveobject.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,75 @@ +/* +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "serveractiveobject.h" +#include +#include "inventory.h" +#include "constants.h" // BS +#include "log.h" + +ServerActiveObject::ServerActiveObject(ServerEnvironment *env, v3f pos): + ActiveObject(0), + m_env(env), + m_base_position(pos) +{ +} + +float ServerActiveObject::getMinimumSavedMovement() +{ + return 2.0*BS; +} + +ItemStack ServerActiveObject::getWieldedItem(ItemStack *selected, ItemStack *hand) const +{ + *selected = ItemStack(); + if (hand) + *hand = ItemStack(); + + return ItemStack(); +} + +bool ServerActiveObject::setWieldedItem(const ItemStack &item) +{ + return false; +} + +std::string ServerActiveObject::generateUpdateInfantCommand(u16 infant_id, u16 protocol_version) +{ + std::ostringstream os(std::ios::binary); + // command + writeU8(os, AO_CMD_SPAWN_INFANT); + // parameters + writeU16(os, infant_id); + writeU8(os, getSendType()); + if (protocol_version < 38) { + // Clients since 4aa9a66 so no longer need this data + // Version 38 is the first bump after that commit. + // See also: ClientEnvironment::addActiveObject + os << serializeLongString(getClientInitializationData(protocol_version)); + } + return os.str(); +} + +void ServerActiveObject::dumpAOMessagesToQueue(std::queue &queue) +{ + while (!m_messages_out.empty()) { + queue.push(std::move(m_messages_out.front())); + m_messages_out.pop(); + } +} diff -Nru minetest-5.2.0/src/server/serveractiveobject.h minetest-5.3.0/src/server/serveractiveobject.h --- minetest-5.2.0/src/server/serveractiveobject.h 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/server/serveractiveobject.h 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,255 @@ +/* +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include +#include "irrlichttypes_bloated.h" +#include "activeobject.h" +#include "inventorymanager.h" +#include "itemgroup.h" +#include "util/container.h" + +/* + +Some planning +------------- + +* Server environment adds an active object, which gets the id 1 +* The active object list is scanned for each client once in a while, + and it finds out what objects have been added that are not known + by the client yet. This scan is initiated by the Server class and + the result ends up directly to the server. +* A network packet is created with the info and sent to the client. +* Environment converts objects to static data and static data to + objects, based on how close players are to them. + +*/ + +class ServerEnvironment; +struct ItemStack; +struct ToolCapabilities; +struct ObjectProperties; +struct PlayerHPChangeReason; + +class ServerActiveObject : public ActiveObject +{ +public: + /* + NOTE: m_env can be NULL, but step() isn't called if it is. + Prototypes are used that way. + */ + ServerActiveObject(ServerEnvironment *env, v3f pos); + virtual ~ServerActiveObject() = default; + + virtual ActiveObjectType getSendType() const + { return getType(); } + + // Called after id has been set and has been inserted in environment + virtual void addedToEnvironment(u32 dtime_s){}; + // Called before removing from environment + virtual void removingFromEnvironment(){}; + // Returns true if object's deletion is the job of the + // environment + virtual bool environmentDeletes() const + { return true; } + + // Create a certain type of ServerActiveObject + static ServerActiveObject* create(ActiveObjectType type, + ServerEnvironment *env, u16 id, v3f pos, + const std::string &data); + + /* + Some simple getters/setters + */ + v3f getBasePosition() const { return m_base_position; } + void setBasePosition(v3f pos){ m_base_position = pos; } + ServerEnvironment* getEnv(){ return m_env; } + + /* + Some more dynamic interface + */ + + virtual void setPos(const v3f &pos) + { setBasePosition(pos); } + // continuous: if true, object does not stop immediately at pos + virtual void moveTo(v3f pos, bool continuous) + { setBasePosition(pos); } + // If object has moved less than this and data has not changed, + // saving to disk may be omitted + virtual float getMinimumSavedMovement(); + + virtual std::string getDescription(){return "SAO";} + + /* + Step object in time. + Messages added to messages are sent to client over network. + + send_recommended: + True at around 5-10 times a second, same for all objects. + This is used to let objects send most of the data at the + same time so that the data can be combined in a single + packet. + */ + virtual void step(float dtime, bool send_recommended){} + + /* + The return value of this is passed to the client-side object + when it is created + */ + virtual std::string getClientInitializationData(u16 protocol_version) {return "";} + + /* + The return value of this is passed to the server-side object + when it is created (converted from static to active - actually + the data is the static form) + */ + virtual void getStaticData(std::string *result) const + { + assert(isStaticAllowed()); + *result = ""; + } + /* + Return false in here to never save and instead remove object + on unload. getStaticData() will not be called in that case. + */ + virtual bool isStaticAllowed() const + {return true;} + + // Returns tool wear + virtual u16 punch(v3f dir, + const ToolCapabilities *toolcap = nullptr, + ServerActiveObject *puncher = nullptr, + float time_from_last_punch = 1000000.0f) + { return 0; } + virtual void rightClick(ServerActiveObject *clicker) + {} + virtual void setHP(s32 hp, const PlayerHPChangeReason &reason) + {} + virtual u16 getHP() const + { return 0; } + + virtual void setArmorGroups(const ItemGroupList &armor_groups) + {} + virtual const ItemGroupList &getArmorGroups() const + { static ItemGroupList rv; return rv; } + virtual void setPhysicsOverride(float physics_override_speed, float physics_override_jump, float physics_override_gravity) + {} + virtual void setAnimation(v2f frames, float frame_speed, float frame_blend, bool frame_loop) + {} + virtual void getAnimation(v2f *frames, float *frame_speed, float *frame_blend, bool *frame_loop) + {} + virtual void setAnimationSpeed(float frame_speed) + {} + virtual void setBonePosition(const std::string &bone, v3f position, v3f rotation) + {} + virtual void getBonePosition(const std::string &bone, v3f *position, v3f *lotation) + {} + 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; } + virtual void notifyObjectPropertiesModified() + {} + + // Inventory and wielded item + virtual Inventory *getInventory() const + { return NULL; } + virtual InventoryLocation getInventoryLocation() const + { return InventoryLocation(); } + virtual void setInventoryModified() + {} + virtual std::string getWieldList() const + { return ""; } + virtual u16 getWieldIndex() const + { return 0; } + virtual ItemStack getWieldedItem(ItemStack *selected, + ItemStack *hand = nullptr) const; + virtual bool setWieldedItem(const ItemStack &item); + inline void attachParticleSpawner(u32 id) + { + m_attached_particle_spawners.insert(id); + } + inline void detachParticleSpawner(u32 id) + { + m_attached_particle_spawners.erase(id); + } + + std::string generateUpdateInfantCommand(u16 infant_id, u16 protocol_version); + std::string generateUpdateNametagAttributesCommand(const video::SColor &color) const; + + void dumpAOMessagesToQueue(std::queue &queue); + + /* + Number of players which know about this object. Object won't be + deleted until this is 0 to keep the id preserved for the right + object. + */ + u16 m_known_by_count = 0; + + /* + - Whether this object is to be removed when nobody knows about + it anymore. + - Removal is delayed to preserve the id for the time during which + it could be confused to some other object by some client. + - This is usually set to true by the step() method when the object wants + to be deleted but can be set by anything else too. + */ + bool m_pending_removal = false; + + /* + Same purpose as m_pending_removal but for deactivation. + deactvation = save static data in block, remove active object + + If this is set alongside with m_pending_removal, removal takes + priority. + */ + bool m_pending_deactivation = false; + + /* + A getter that unifies the above to answer the question: + "Can the environment still interact with this object?" + */ + inline bool isGone() const + { return m_pending_removal || m_pending_deactivation; } + + /* + Whether the object's static data has been stored to a block + */ + bool m_static_exists = false; + /* + The block from which the object was loaded from, and in which + a copy of the static data resides. + */ + v3s16 m_static_block = v3s16(1337,1337,1337); + +protected: + 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; + + /* + Queue of messages to be sent to the client + */ + std::queue m_messages_out; +}; diff -Nru minetest-5.2.0/src/server/serverinventorymgr.cpp minetest-5.3.0/src/server/serverinventorymgr.cpp --- minetest-5.2.0/src/server/serverinventorymgr.cpp 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/server/serverinventorymgr.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,192 @@ +/* +Minetest +Copyright (C) 2010-2020 Minetest core development team + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "serverinventorymgr.h" +#include "map.h" +#include "nodemetadata.h" +#include "player_sao.h" +#include "remoteplayer.h" +#include "server.h" +#include "serverenvironment.h" + +ServerInventoryManager::ServerInventoryManager() : InventoryManager() +{ +} + +ServerInventoryManager::~ServerInventoryManager() +{ + // Delete detached inventories + for (auto &detached_inventory : m_detached_inventories) { + delete detached_inventory.second.inventory; + } +} + +Inventory *ServerInventoryManager::getInventory(const InventoryLocation &loc) +{ + switch (loc.type) { + case InventoryLocation::UNDEFINED: + case InventoryLocation::CURRENT_PLAYER: + break; + case InventoryLocation::PLAYER: { + RemotePlayer *player = m_env->getPlayer(loc.name.c_str()); + if (!player) + return NULL; + PlayerSAO *playersao = player->getPlayerSAO(); + if (!playersao) + return NULL; + return playersao->getInventory(); + } break; + case InventoryLocation::NODEMETA: { + NodeMetadata *meta = m_env->getMap().getNodeMetadata(loc.p); + if (!meta) + return NULL; + return meta->getInventory(); + } break; + case InventoryLocation::DETACHED: { + auto it = m_detached_inventories.find(loc.name); + if (it == m_detached_inventories.end()) + return nullptr; + return it->second.inventory; + } break; + default: + sanity_check(false); // abort + break; + } + return NULL; +} + +void ServerInventoryManager::setInventoryModified(const InventoryLocation &loc) +{ + switch (loc.type) { + case InventoryLocation::UNDEFINED: + break; + case InventoryLocation::PLAYER: { + + RemotePlayer *player = m_env->getPlayer(loc.name.c_str()); + + if (!player) + return; + + player->setModified(true); + player->inventory.setModified(true); + // Updates are sent in ServerEnvironment::step() + } break; + case InventoryLocation::NODEMETA: { + MapEditEvent event; + event.type = MEET_BLOCK_NODE_METADATA_CHANGED; + event.p = loc.p; + m_env->getMap().dispatchEvent(event); + } break; + case InventoryLocation::DETACHED: { + // Updates are sent in ServerEnvironment::step() + } break; + default: + sanity_check(false); // abort + break; + } +} + +Inventory *ServerInventoryManager::createDetachedInventory( + const std::string &name, IItemDefManager *idef, const std::string &player) +{ + if (m_detached_inventories.count(name) > 0) { + infostream << "Server clearing detached inventory \"" << name << "\"" + << std::endl; + delete m_detached_inventories[name].inventory; + } else { + infostream << "Server creating detached inventory \"" << name << "\"" + << std::endl; + } + + Inventory *inv = new Inventory(idef); + sanity_check(inv); + m_detached_inventories[name].inventory = inv; + if (!player.empty()) { + m_detached_inventories[name].owner = player; + + if (!m_env) + return inv; // Mods are not loaded yet, ignore + + RemotePlayer *p = m_env->getPlayer(name.c_str()); + + // if player is connected, send him the inventory + if (p && p->getPeerId() != PEER_ID_INEXISTENT) { + m_env->getGameDef()->sendDetachedInventory( + inv, name, p->getPeerId()); + } + } else { + if (!m_env) + return inv; // Mods are not loaded yet, don't send + + // Inventory is for everybody, broadcast + m_env->getGameDef()->sendDetachedInventory(inv, name, PEER_ID_INEXISTENT); + } + + return inv; +} + +bool ServerInventoryManager::removeDetachedInventory(const std::string &name) +{ + const auto &inv_it = m_detached_inventories.find(name); + if (inv_it == m_detached_inventories.end()) + return false; + + delete inv_it->second.inventory; + const std::string &owner = inv_it->second.owner; + + if (!owner.empty()) { + RemotePlayer *player = m_env->getPlayer(owner.c_str()); + + if (player && player->getPeerId() != PEER_ID_INEXISTENT) + m_env->getGameDef()->sendDetachedInventory( + nullptr, name, player->getPeerId()); + + } else { + // Notify all players about the change + m_env->getGameDef()->sendDetachedInventory( + nullptr, name, PEER_ID_INEXISTENT); + } + + m_detached_inventories.erase(inv_it); + + return true; +} + +void ServerInventoryManager::sendDetachedInventories(const std::string &peer_name, + bool incremental, + std::function apply_cb) +{ + for (const auto &detached_inventory : m_detached_inventories) { + const DetachedInventory &dinv = detached_inventory.second; + if (incremental) { + if (!dinv.inventory || !dinv.inventory->checkModified()) + continue; + } + + // if we are pushing inventories to a specific player + // we should filter to send only the right inventories + if (!peer_name.empty()) { + const std::string &attached_player = dinv.owner; + if (!attached_player.empty() && peer_name != attached_player) + continue; + } + + apply_cb(detached_inventory.first, detached_inventory.second.inventory); + } +} diff -Nru minetest-5.2.0/src/server/serverinventorymgr.h minetest-5.3.0/src/server/serverinventorymgr.h --- minetest-5.2.0/src/server/serverinventorymgr.h 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/server/serverinventorymgr.h 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,60 @@ +/* +Minetest +Copyright (C) 2010-2020 Minetest core development team + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "inventorymanager.h" +#include + +class ServerEnvironment; + +class ServerInventoryManager : public InventoryManager +{ +public: + ServerInventoryManager(); + virtual ~ServerInventoryManager(); + + void setEnv(ServerEnvironment *env) + { + assert(!m_env); + m_env = env; + } + + Inventory *getInventory(const InventoryLocation &loc); + void setInventoryModified(const InventoryLocation &loc); + + // Creates or resets inventory + Inventory *createDetachedInventory(const std::string &name, IItemDefManager *idef, + const std::string &player = ""); + bool removeDetachedInventory(const std::string &name); + + void sendDetachedInventories(const std::string &peer_name, bool incremental, + std::function apply_cb); + +private: + struct DetachedInventory + { + Inventory *inventory; + std::string owner; + }; + + ServerEnvironment *m_env = nullptr; + + std::unordered_map m_detached_inventories; +}; diff -Nru minetest-5.2.0/src/server/unit_sao.cpp minetest-5.3.0/src/server/unit_sao.cpp --- minetest-5.2.0/src/server/unit_sao.cpp 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/server/unit_sao.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,345 @@ +/* +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2013-2020 Minetest core developers & community + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "unit_sao.h" +#include "scripting_server.h" +#include "serverenvironment.h" + +UnitSAO::UnitSAO(ServerEnvironment *env, v3f pos) : ServerActiveObject(env, pos) +{ + // Initialize something to armor groups + m_armor_groups["fleshy"] = 100; +} + +ServerActiveObject *UnitSAO::getParent() const +{ + if (!m_attachment_parent_id) + return nullptr; + // Check if the parent still exists + ServerActiveObject *obj = m_env->getActiveObject(m_attachment_parent_id); + + return obj; +} + +void UnitSAO::setArmorGroups(const ItemGroupList &armor_groups) +{ + m_armor_groups = armor_groups; + m_armor_groups_sent = false; +} + +const ItemGroupList &UnitSAO::getArmorGroups() const +{ + return m_armor_groups; +} + +void UnitSAO::setAnimation( + v2f frame_range, float frame_speed, float frame_blend, bool frame_loop) +{ + // store these so they can be updated to clients + m_animation_range = frame_range; + m_animation_speed = frame_speed; + m_animation_blend = frame_blend; + m_animation_loop = frame_loop; + m_animation_sent = false; +} + +void UnitSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, + bool *frame_loop) +{ + *frame_range = m_animation_range; + *frame_speed = m_animation_speed; + *frame_blend = m_animation_blend; + *frame_loop = m_animation_loop; +} + +void UnitSAO::setAnimationSpeed(float frame_speed) +{ + m_animation_speed = frame_speed; + m_animation_speed_sent = false; +} + +void UnitSAO::setBonePosition(const std::string &bone, v3f position, v3f rotation) +{ + // store these so they can be updated to clients + m_bone_position[bone] = core::vector2d(position, rotation); + m_bone_position_sent = false; +} + +void UnitSAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation) +{ + *position = m_bone_position[bone].X; + *rotation = m_bone_position[bone].Y; +} + +// clang-format off +void UnitSAO::sendOutdatedData() +{ + if (!m_armor_groups_sent) { + m_armor_groups_sent = true; + m_messages_out.emplace(getId(), true, generateUpdateArmorGroupsCommand()); + } + + if (!m_animation_sent) { + m_animation_sent = true; + m_animation_speed_sent = true; + m_messages_out.emplace(getId(), true, generateUpdateAnimationCommand()); + } else if (!m_animation_speed_sent) { + // Animation speed is also sent when 'm_animation_sent == false' + m_animation_speed_sent = true; + m_messages_out.emplace(getId(), true, generateUpdateAnimationSpeedCommand()); + } + + if (!m_bone_position_sent) { + m_bone_position_sent = true; + for (const auto &bone_pos : m_bone_position) { + m_messages_out.emplace(getId(), true, generateUpdateBonePositionCommand( + bone_pos.first, bone_pos.second.X, bone_pos.second.Y)); + } + } + + if (!m_attachment_sent) { + m_attachment_sent = true; + m_messages_out.emplace(getId(), true, generateUpdateAttachmentCommand()); + } +} +// clang-format on + +void UnitSAO::setAttachment( + int parent_id, const std::string &bone, v3f position, v3f rotation) +{ + // 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. + + int old_parent = m_attachment_parent_id; + m_attachment_parent_id = parent_id; + m_attachment_bone = bone; + m_attachment_position = position; + m_attachment_rotation = rotation; + m_attachment_sent = false; + + if (parent_id != old_parent) { + onDetach(old_parent); + onAttach(parent_id); + } +} + +void UnitSAO::getAttachment( + int *parent_id, std::string *bone, v3f *position, v3f *rotation) const +{ + *parent_id = m_attachment_parent_id; + *bone = m_attachment_bone; + *position = m_attachment_position; + *rotation = m_attachment_rotation; +} + +void UnitSAO::clearChildAttachments() +{ + for (int child_id : m_attachment_child_ids) { + // 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)); + } + m_attachment_child_ids.clear(); +} + +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); + } else { + setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0)); + } + // Do it + if (parent) + parent->removeAttachmentChild(m_id); +} + +void UnitSAO::addAttachmentChild(int child_id) +{ + m_attachment_child_ids.insert(child_id); +} + +void UnitSAO::removeAttachmentChild(int child_id) +{ + m_attachment_child_ids.erase(child_id); +} + +const std::unordered_set &UnitSAO::getAttachmentChildIds() const +{ + return m_attachment_child_ids; +} + +void UnitSAO::onAttach(int parent_id) +{ + if (!parent_id) + return; + + 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); + } +} + +void UnitSAO::onDetach(int parent_id) +{ + if (!parent_id) + return; + + 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 + + if (parent->getType() == ACTIVEOBJECT_TYPE_LUAENTITY) + m_env->getScriptIface()->luaentity_on_detach_child(parent_id, this); +} + +ObjectProperties *UnitSAO::accessObjectProperties() +{ + return &m_prop; +} + +void UnitSAO::notifyObjectPropertiesModified() +{ + m_properties_sent = false; +} + +std::string UnitSAO::generateUpdateAttachmentCommand() const +{ + std::ostringstream os(std::ios::binary); + // command + writeU8(os, AO_CMD_ATTACH_TO); + // parameters + writeS16(os, m_attachment_parent_id); + os << serializeString(m_attachment_bone); + writeV3F32(os, m_attachment_position); + writeV3F32(os, m_attachment_rotation); + return os.str(); +} + +std::string UnitSAO::generateUpdateBonePositionCommand( + const std::string &bone, const v3f &position, const v3f &rotation) +{ + std::ostringstream os(std::ios::binary); + // command + writeU8(os, AO_CMD_SET_BONE_POSITION); + // parameters + os << serializeString(bone); + writeV3F32(os, position); + writeV3F32(os, rotation); + return os.str(); +} + +std::string UnitSAO::generateUpdateAnimationSpeedCommand() const +{ + std::ostringstream os(std::ios::binary); + // command + writeU8(os, AO_CMD_SET_ANIMATION_SPEED); + // parameters + writeF32(os, m_animation_speed); + return os.str(); +} + +std::string UnitSAO::generateUpdateAnimationCommand() const +{ + std::ostringstream os(std::ios::binary); + // command + writeU8(os, AO_CMD_SET_ANIMATION); + // parameters + writeV2F32(os, m_animation_range); + writeF32(os, m_animation_speed); + writeF32(os, m_animation_blend); + // these are sent inverted so we get true when the server sends nothing + writeU8(os, !m_animation_loop); + return os.str(); +} + +std::string UnitSAO::generateUpdateArmorGroupsCommand() const +{ + std::ostringstream os(std::ios::binary); + writeU8(os, AO_CMD_UPDATE_ARMOR_GROUPS); + writeU16(os, m_armor_groups.size()); + for (const auto &armor_group : m_armor_groups) { + os << serializeString(armor_group.first); + writeS16(os, armor_group.second); + } + return os.str(); +} + +std::string UnitSAO::generateUpdatePositionCommand(const v3f &position, + const v3f &velocity, const v3f &acceleration, const v3f &rotation, + bool do_interpolate, bool is_movement_end, f32 update_interval) +{ + std::ostringstream os(std::ios::binary); + // command + writeU8(os, AO_CMD_UPDATE_POSITION); + // pos + writeV3F32(os, position); + // velocity + writeV3F32(os, velocity); + // acceleration + writeV3F32(os, acceleration); + // rotation + writeV3F32(os, rotation); + // do_interpolate + writeU8(os, do_interpolate); + // is_end_position (for interpolation) + writeU8(os, is_movement_end); + // update_interval (for interpolation) + writeF32(os, update_interval); + return os.str(); +} + +std::string UnitSAO::generateSetPropertiesCommand(const ObjectProperties &prop) const +{ + std::ostringstream os(std::ios::binary); + writeU8(os, AO_CMD_SET_PROPERTIES); + prop.serialize(os); + return os.str(); +} + +std::string UnitSAO::generatePunchCommand(u16 result_hp) const +{ + std::ostringstream os(std::ios::binary); + // command + writeU8(os, AO_CMD_PUNCHED); + // result_hp + writeU16(os, result_hp); + return os.str(); +} + +void UnitSAO::sendPunchCommand() +{ + m_messages_out.emplace(getId(), true, generatePunchCommand(getHP())); +} diff -Nru minetest-5.2.0/src/server/unit_sao.h minetest-5.3.0/src/server/unit_sao.h --- minetest-5.2.0/src/server/unit_sao.h 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/server/unit_sao.h 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,136 @@ +/* +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2013-2020 Minetest core developers & community + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "object_properties.h" +#include "serveractiveobject.h" + +class UnitSAO : public ServerActiveObject +{ +public: + UnitSAO(ServerEnvironment *env, v3f pos); + virtual ~UnitSAO() = default; + + u16 getHP() const { return m_hp; } + // Use a function, if isDead can be defined by other conditions + bool isDead() const { return m_hp == 0; } + + // Rotation + void setRotation(v3f rotation) { m_rotation = rotation; } + const v3f &getRotation() const { return m_rotation; } + v3f getRadRotation() { return m_rotation * core::DEGTORAD; } + + // Deprecated + f32 getRadYawDep() const { return (m_rotation.Y + 90.) * core::DEGTORAD; } + + // Armor groups + inline bool isImmortal() const + { + return itemgroup_get(getArmorGroups(), "immortal"); + } + void setArmorGroups(const ItemGroupList &armor_groups); + const ItemGroupList &getArmorGroups() const; + + // Animation + void setAnimation(v2f frame_range, float frame_speed, float frame_blend, + bool frame_loop); + void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, + bool *frame_loop); + void setAnimationSpeed(float frame_speed); + + // Bone position + void setBonePosition(const std::string &bone, v3f position, v3f rotation); + void getBonePosition(const std::string &bone, v3f *position, v3f *rotation); + + // Attachments + ServerActiveObject *getParent() const; + inline bool isAttached() const { return getParent(); } + void setAttachment(int parent_id, const std::string &bone, v3f position, + v3f rotation); + void getAttachment(int *parent_id, std::string *bone, v3f *position, + v3f *rotation) const; + void clearChildAttachments(); + void clearParentAttachment(); + void addAttachmentChild(int child_id); + void removeAttachmentChild(int child_id); + const std::unordered_set &getAttachmentChildIds() const; + + // Object properties + ObjectProperties *accessObjectProperties(); + void notifyObjectPropertiesModified(); + void sendOutdatedData(); + + // Update packets + std::string generateUpdateAttachmentCommand() const; + std::string generateUpdateAnimationSpeedCommand() const; + std::string generateUpdateAnimationCommand() const; + std::string generateUpdateArmorGroupsCommand() const; + static std::string generateUpdatePositionCommand(const v3f &position, + const v3f &velocity, const v3f &acceleration, const v3f &rotation, + bool do_interpolate, bool is_movement_end, f32 update_interval); + std::string generateSetPropertiesCommand(const ObjectProperties &prop) const; + static std::string generateUpdateBonePositionCommand(const std::string &bone, + const v3f &position, const v3f &rotation); + void sendPunchCommand(); + +protected: + u16 m_hp = 1; + + v3f m_rotation; + + ItemGroupList m_armor_groups; + + // Object properties + bool m_properties_sent = true; + ObjectProperties m_prop; + + // Stores position and rotation for each bone name + std::unordered_map> m_bone_position; + + int m_attachment_parent_id = 0; + +private: + void onAttach(int parent_id); + void onDetach(int parent_id); + + std::string generatePunchCommand(u16 result_hp) const; + + // Armor groups + bool m_armor_groups_sent = false; + + // Animation + v2f m_animation_range; + float m_animation_speed = 0.0f; + float m_animation_blend = 0.0f; + bool m_animation_loop = true; + bool m_animation_sent = false; + bool m_animation_speed_sent = false; + + // Bone positions + bool m_bone_position_sent = false; + + // Attachments + std::unordered_set m_attachment_child_ids; + std::string m_attachment_bone = ""; + v3f m_attachment_position; + v3f m_attachment_rotation; + bool m_attachment_sent = false; +}; diff -Nru minetest-5.2.0/src/server.cpp minetest-5.3.0/src/server.cpp --- minetest-5.2.0/src/server.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/server.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -34,8 +34,7 @@ #include "version.h" #include "filesys.h" #include "mapblock.h" -#include "serverobject.h" -#include "genericobject.h" +#include "server/serveractiveobject.h" #include "settings.h" #include "profiler.h" #include "log.h" @@ -48,7 +47,6 @@ #include "mapgen/mg_biome.h" #include "content_mapnode.h" #include "content_nodemeta.h" -#include "content_sao.h" #include "content/mods.h" #include "modchannels.h" #include "serverlist.h" @@ -65,6 +63,9 @@ #include "chatmessage.h" #include "chat_interface.h" #include "remoteplayer.h" +#include "server/player_sao.h" +#include "server/serverinventorymgr.h" +#include "translation.h" class ClientNotFoundException : public BaseException { @@ -229,18 +230,46 @@ m_nodedef(createNodeDefManager()), m_craftdef(createCraftDefManager()), m_thread(new ServerThread(this)), - m_uptime(0), m_clients(m_con), m_admin_chat(iface), m_modchannel_mgr(new ModChannelMgr()) { - m_lag = g_settings->getFloat("dedicated_server_step"); - if (m_path_world.empty()) throw ServerError("Supplied empty world path"); if (!gamespec.isValid()) throw ServerError("Supplied invalid gamespec"); + +#if USE_PROMETHEUS + m_metrics_backend = std::unique_ptr(createPrometheusMetricsBackend()); +#else + m_metrics_backend = std::unique_ptr(new MetricsBackend()); +#endif + + m_uptime_counter = m_metrics_backend->addCounter("minetest_core_server_uptime", "Server uptime (in seconds)"); + m_player_gauge = m_metrics_backend->addGauge("minetest_core_player_number", "Number of connected players"); + + m_timeofday_gauge = m_metrics_backend->addGauge( + "minetest_core_timeofday", + "Time of day value"); + + m_lag_gauge = m_metrics_backend->addGauge( + "minetest_core_latency", + "Latency value (in seconds)"); + + m_aom_buffer_counter = m_metrics_backend->addCounter( + "minetest_core_aom_generated_count", + "Number of active object messages generated"); + + m_packet_recv_counter = m_metrics_backend->addCounter( + "minetest_core_server_packet_recv", + "Processable packets received"); + + m_packet_recv_processed_counter = m_metrics_backend->addCounter( + "minetest_core_server_packet_recv_processed", + "Valid received packets processed"); + + m_lag_gauge->set(g_settings->getFloat("dedicated_server_step")); } Server::~Server() @@ -310,11 +339,6 @@ infostream << "Server: Deinitializing scripting" << std::endl; delete m_script; - // Delete detached inventories - for (auto &detached_inventory : m_detached_inventories) { - delete detached_inventory.second; - } - while (!m_unsent_map_edit_queue.empty()) { delete m_unsent_map_edit_queue.front(); m_unsent_map_edit_queue.pop(); @@ -353,13 +377,16 @@ MutexAutoLock envlock(m_env_mutex); // Create the Map (loads map_meta.txt, overriding configured mapgen params) - ServerMap *servermap = new ServerMap(m_path_world, this, m_emerge); + ServerMap *servermap = new ServerMap(m_path_world, this, m_emerge, m_metrics_backend.get()); // Initialize scripting infostream << "Server: Initializing Lua" << std::endl; m_script = new ServerScripting(this); + // Must be created before mod loading because we have some inventory creation + m_inventory_mgr = std::unique_ptr(new ServerInventoryManager()); + m_script->loadMod(getBuiltinLuaPath() + DIR_DELIM "init.lua", BUILTIN_MOD_NAME); m_modmgr->loadMods(m_script); @@ -374,16 +401,19 @@ std::vector paths; fs::GetRecursiveDirs(paths, g_settings->get("texture_path")); fs::GetRecursiveDirs(paths, m_gamespec.path + DIR_DELIM + "textures"); - for (const std::string &path : paths) - m_nodedef->applyTextureOverrides(path + DIR_DELIM + "override.txt"); + for (const std::string &path : paths) { + TextureOverrideSource override_source(path + DIR_DELIM + "override.txt"); + m_nodedef->applyTextureOverrides(override_source.getNodeTileOverrides()); + m_itemdef->applyTextureOverrides(override_source.getItemTextureOverrides()); + } m_nodedef->setNodeRegistrationStatus(true); // Perform pending node name resolutions m_nodedef->runNodeResolveCallbacks(); - // unmap node names for connected nodeboxes - m_nodedef->mapNodeboxConnections(); + // unmap node names in cross-references + m_nodedef->resolveCrossrefs(); // init the recipe hashes to speed up crafting m_craftdef->initHashes(this); @@ -391,6 +421,7 @@ // Initialize Environment m_env = new ServerEnvironment(servermap, m_script, this, m_path_world); + m_inventory_mgr->setEnv(m_env); m_clients.setEnv(m_env); if (!servermap->settings_mgr.makeMapgenParams()) @@ -412,6 +443,8 @@ m_env->loadMeta(); + // Those settings can be overwritten in world.mt, they are + // intended to be cached after environment loading. m_liquid_transform_every = g_settings->getFloat("liquid_update"); m_max_chatmessage_length = g_settings->getU16("chat_message_max_size"); m_csm_restriction_flags = g_settings->getU64("csm_restriction_flags"); @@ -420,6 +453,8 @@ void Server::start() { + init(); + infostream << "Starting server on " << m_bind_addr.serializeString() << "..." << std::endl; @@ -508,9 +543,7 @@ /* Update uptime */ - { - m_uptime.set(m_uptime.get() + dtime); - } + m_uptime_counter->increment(dtime); handlePeerChanges(); @@ -524,11 +557,13 @@ */ m_time_of_day_send_timer -= dtime; - if(m_time_of_day_send_timer < 0.0) { + if (m_time_of_day_send_timer < 0.0) { m_time_of_day_send_timer = g_settings->getFloat("time_send_interval"); u16 time = m_env->getTimeOfDay(); float time_speed = g_settings->getFloat("time_speed"); SendTimeOfDay(PEER_ID_INEXISTENT, time, time_speed); + + m_timeofday_gauge->set(time); } { @@ -600,7 +635,7 @@ } m_clients.step(dtime); - m_lag += (m_lag > dtime ? -1 : 1) * dtime/100; + m_lag_gauge->increment((m_lag_gauge->get() > dtime ? -1 : 1) * dtime/100); #if USE_CURL // send masterserver announce { @@ -611,9 +646,9 @@ ServerList::AA_START, m_bind_addr.getPort(), m_clients.getPlayerNames(), - m_uptime.get(), + m_uptime_counter->get(), m_env->getGameTime(), - m_lag, + m_lag_gauge->get(), m_gamespec.id, Mapgen::getMapgenName(m_emerge->mgparams->mgtype), m_modmgr->getMods(), @@ -635,6 +670,7 @@ const RemoteClientMap &clients = m_clients.getClientList(); ScopeProfiler sp(g_profiler, "Server: update objects within range"); + m_player_gauge->set(clients.size()); for (const auto &client_it : clients) { RemoteClient *client = client_it.second; @@ -656,14 +692,17 @@ // Save mod storages if modified m_mod_storage_save_timer -= dtime; if (m_mod_storage_save_timer <= 0.0f) { - infostream << "Saving registered mod storages." << std::endl; m_mod_storage_save_timer = g_settings->getFloat("server_map_save_interval"); + int n = 0; for (std::unordered_map::const_iterator it = m_mod_storages.begin(); it != m_mod_storages.end(); ++it) { if (it->second->isModified()) { it->second->save(getModStoragePath()); + n++; } } + if (n > 0) + infostream << "Saved " << n << " modified mod storages." << std::endl; } } @@ -679,32 +718,35 @@ std::unordered_map*> buffered_messages; // Get active object messages from environment + ActiveObjectMessage aom(0); + u32 aom_count = 0; for(;;) { - ActiveObjectMessage aom = m_env->getActiveObjectMessage(); - if (aom.id == 0) + if (!m_env->getActiveObjectMessage(&aom)) break; std::vector* message_list = nullptr; - std::unordered_map* >::iterator n; - n = buffered_messages.find(aom.id); + auto n = buffered_messages.find(aom.id); if (n == buffered_messages.end()) { message_list = new std::vector; buffered_messages[aom.id] = message_list; - } - else { + } else { message_list = n->second; } - message_list->push_back(aom); + message_list->push_back(std::move(aom)); + aom_count++; } + m_aom_buffer_counter->increment(aom_count); + m_clients.lock(); const RemoteClientMap &clients = m_clients.getClientList(); // Route data to every client + std::string reliable_data, unreliable_data; for (const auto &client_it : clients) { + reliable_data.clear(); + unreliable_data.clear(); RemoteClient *client = client_it.second; PlayerSAO *player = getPlayerSAO(client->peer_id); - std::string reliable_data; - std::string unreliable_data; // Go through all objects in message buffer for (const auto &buffered_message : buffered_messages) { // If object does not exist or is not known by client, skip it @@ -718,7 +760,7 @@ // Go through every message for (const ActiveObjectMessage &aom : *list) { // Send position updates to players who do not see the attachment - if (aom.datastring[0] == GENERIC_CMD_UPDATE_POSITION) { + if (aom.datastring[0] == AO_CMD_UPDATE_POSITION) { if (sao->getId() == player->getId()) continue; @@ -729,19 +771,15 @@ client->m_known_objects.end()) continue; } - // Compose the full new data with header - std::string new_data; - // Add object id - char buf[2]; - writeU16((u8*)&buf[0], aom.id); - new_data.append(buf, 2); - // Add data - new_data += serializeString(aom.datastring); - // Add data to buffer - if (aom.reliable) - reliable_data += new_data; - else - unreliable_data += new_data; + + // Add full new data to appropriate buffer + std::string &buffer = aom.reliable ? reliable_data : unreliable_data; + char idbuf[2]; + writeU16((u8*) idbuf, aom.id); + // u16 id + // std::string data + buffer.append(idbuf, sizeof(idbuf)); + buffer.append(serializeString(aom.datastring)); } } /* @@ -809,7 +847,6 @@ disable_single_change_sending ? 5 : 30); break; case MEET_BLOCK_NODE_METADATA_CHANGED: { - verbosestream << "Server: MEET_BLOCK_NODE_METADATA_CHANGED" << std::endl; prof.add("MEET_BLOCK_NODE_METADATA_CHANGED", 1); if (!event->is_private_change) { // Don't send the change yet. Collect them to eliminate dupes. @@ -825,7 +862,6 @@ break; } case MEET_OTHER: - infostream << "Server: MEET_OTHER" << std::endl; prof.add("MEET_OTHER", 1); for (const v3s16 &modified_block : event->modified_blocks) { m_clients.markBlockposAsNotSent(modified_block); @@ -939,7 +975,9 @@ } peer_id = pkt.getPeerId(); + m_packet_recv_counter->increment(); ProcessData(&pkt); + m_packet_recv_processed_counter->increment(); } catch (const con::InvalidIncomingDataException &e) { infostream << "Server::Receive(): InvalidIncomingDataException: what()=" << e.what() << std::endl; @@ -1143,82 +1181,6 @@ m_unsent_map_edit_queue.push(new MapEditEvent(event)); } -Inventory* Server::getInventory(const InventoryLocation &loc) -{ - switch (loc.type) { - case InventoryLocation::UNDEFINED: - case InventoryLocation::CURRENT_PLAYER: - break; - case InventoryLocation::PLAYER: - { - RemotePlayer *player = m_env->getPlayer(loc.name.c_str()); - if(!player) - return NULL; - PlayerSAO *playersao = player->getPlayerSAO(); - if(!playersao) - return NULL; - return playersao->getInventory(); - } - break; - case InventoryLocation::NODEMETA: - { - NodeMetadata *meta = m_env->getMap().getNodeMetadata(loc.p); - if(!meta) - return NULL; - return meta->getInventory(); - } - break; - case InventoryLocation::DETACHED: - { - if(m_detached_inventories.count(loc.name) == 0) - return NULL; - return m_detached_inventories[loc.name]; - } - break; - default: - sanity_check(false); // abort - break; - } - return NULL; -} - -void Server::setInventoryModified(const InventoryLocation &loc) -{ - switch(loc.type){ - case InventoryLocation::UNDEFINED: - break; - case InventoryLocation::PLAYER: - { - - RemotePlayer *player = m_env->getPlayer(loc.name.c_str()); - - if (!player) - return; - - player->setModified(true); - player->inventory.setModified(true); - // Updates are sent in ServerEnvironment::step() - } - break; - case InventoryLocation::NODEMETA: - { - MapEditEvent event; - event.type = MEET_BLOCK_NODE_METADATA_CHANGED; - event.p = loc.p; - m_env->getMap().dispatchEvent(event); - } - break; - case InventoryLocation::DETACHED: - { - // Updates are sent in ServerEnvironment::step() - } - break; - default: - sanity_check(false); // abort - break; - } -} - void Server::SetBlocksNotSent(std::map& block) { std::vector clients = m_clients.getClientIDs(); @@ -1263,7 +1225,8 @@ u8* major, u8* minor, u8* patch, - std::string* vers_string + std::string* vers_string, + std::string* lang_code ) { *state = m_clients.getClientState(peer_id); @@ -1283,6 +1246,7 @@ *minor = client->getMinor(); *patch = client->getPatch(); *vers_string = client->getFull(); + *lang_code = client->getLangCode(); m_clients.unlock(); @@ -1537,17 +1501,15 @@ // Spawns a particle on peer with peer_id void Server::SendSpawnParticle(session_t peer_id, u16 protocol_version, - v3f pos, v3f velocity, v3f acceleration, - float expirationtime, float size, bool collisiondetection, - bool collision_removal, bool object_collision, - bool vertical, const std::string &texture, - const struct TileAnimationParams &animation, u8 glow) + const ParticleParameters &p) { static thread_local const float radius = g_settings->getS16("max_block_send_distance") * MAP_BLOCKSIZE * BS; if (peer_id == PEER_ID_INEXISTENT) { std::vector clients = m_clients.getClientIDs(); + const v3f pos = p.pos * BS; + const float radius_sq = radius * radius; for (const session_t client_id : clients) { RemotePlayer *player = m_env->getPlayer(client_id); @@ -1559,76 +1521,78 @@ continue; // Do not send to distant clients - if (sao->getBasePosition().getDistanceFrom(pos * BS) > radius) + if (sao->getBasePosition().getDistanceFromSQ(pos) > radius_sq) continue; - SendSpawnParticle(client_id, player->protocol_version, - pos, velocity, acceleration, - expirationtime, size, collisiondetection, collision_removal, - object_collision, vertical, texture, animation, glow); + SendSpawnParticle(client_id, player->protocol_version, p); } return; } + assert(protocol_version != 0); NetworkPacket pkt(TOCLIENT_SPAWN_PARTICLE, 0, peer_id); - pkt << pos << velocity << acceleration << expirationtime - << size << collisiondetection; - pkt.putLongString(texture); - pkt << vertical; - pkt << collision_removal; - // This is horrible but required (why are there two ways to serialize pkts?) - std::ostringstream os(std::ios_base::binary); - animation.serialize(os, protocol_version); - pkt.putRawString(os.str()); - pkt << glow; - pkt << object_collision; + { + // NetworkPacket and iostreams are incompatible... + std::ostringstream oss(std::ios_base::binary); + p.serialize(oss, protocol_version); + pkt.putRawString(oss.str()); + } Send(&pkt); } // Adds a ParticleSpawner on peer with peer_id void Server::SendAddParticleSpawner(session_t peer_id, u16 protocol_version, - u16 amount, float spawntime, v3f minpos, v3f maxpos, - v3f minvel, v3f maxvel, v3f minacc, v3f maxacc, float minexptime, float maxexptime, - float minsize, float maxsize, bool collisiondetection, bool collision_removal, - bool object_collision, u16 attached_id, bool vertical, const std::string &texture, u32 id, - const struct TileAnimationParams &animation, u8 glow) + const ParticleSpawnerParameters &p, u16 attached_id, u32 id) { + static thread_local const float radius = + g_settings->getS16("max_block_send_distance") * MAP_BLOCKSIZE * BS; + if (peer_id == PEER_ID_INEXISTENT) { - // This sucks and should be replaced: std::vector clients = m_clients.getClientIDs(); + const v3f pos = (p.minpos + p.maxpos) / 2.0f * BS; + const float radius_sq = radius * radius; + /* Don't send short-lived spawners to distant players. + * This could be replaced with proper tracking at some point. */ + const bool distance_check = !attached_id && p.time <= 1.0f; + for (const session_t client_id : clients) { RemotePlayer *player = m_env->getPlayer(client_id); if (!player) continue; + + if (distance_check) { + PlayerSAO *sao = player->getPlayerSAO(); + if (!sao) + continue; + if (sao->getBasePosition().getDistanceFromSQ(pos) > radius_sq) + continue; + } + SendAddParticleSpawner(client_id, player->protocol_version, - amount, spawntime, minpos, maxpos, - minvel, maxvel, minacc, maxacc, minexptime, maxexptime, - minsize, maxsize, collisiondetection, collision_removal, - object_collision, attached_id, vertical, texture, id, - animation, glow); + p, attached_id, id); } return; } + assert(protocol_version != 0); - NetworkPacket pkt(TOCLIENT_ADD_PARTICLESPAWNER, 0, peer_id); + NetworkPacket pkt(TOCLIENT_ADD_PARTICLESPAWNER, 100, peer_id); - pkt << amount << spawntime << minpos << maxpos << minvel << maxvel - << minacc << maxacc << minexptime << maxexptime << minsize - << maxsize << collisiondetection; + pkt << p.amount << p.time << p.minpos << p.maxpos << p.minvel + << p.maxvel << p.minacc << p.maxacc << p.minexptime << p.maxexptime + << p.minsize << p.maxsize << p.collisiondetection; - pkt.putLongString(texture); + pkt.putLongString(p.texture); - pkt << id << vertical; - pkt << collision_removal; - pkt << attached_id; - // This is horrible but required - std::ostringstream os(std::ios_base::binary); - animation.serialize(os, protocol_version); - pkt.putRawString(os.str()); - pkt << glow; - pkt << object_collision; + pkt << id << p.vertical << p.collision_removal << attached_id; + { + std::ostringstream os(std::ios_base::binary); + p.animation.serialize(os, protocol_version); + pkt.putRawString(os.str()); + } + pkt << p.glow << p.object_collision; + pkt << p.node.param0 << p.node.param2 << p.node_tile; Send(&pkt); } @@ -1637,7 +1601,6 @@ { NetworkPacket pkt(TOCLIENT_DELETE_PARTICLESPAWNER, 4, peer_id); - // Ugly error in this packet pkt << id; if (peer_id != PEER_ID_INEXISTENT) @@ -1654,7 +1617,7 @@ pkt << id << (u8) form->type << form->pos << form->name << form->scale << form->text << form->number << form->item << form->dir << form->align << form->offset << form->world_pos << form->size - << form->z_index; + << form->z_index << form->text2; Send(&pkt); } @@ -1680,6 +1643,7 @@ break; case HUD_STAT_NAME: case HUD_STAT_TEXT: + case HUD_STAT_TEXT2: pkt << *(std::string *) value; break; case HUD_STAT_WORLD_POS: @@ -1731,8 +1695,8 @@ pkt << params.clouds; } else { // Handle current clients and future clients pkt << params.bgcolor << params.type - << params.clouds << params.sun_tint - << params.moon_tint << params.tint_type; + << params.clouds << params.fog_sun_tint + << params.fog_moon_tint << params.fog_tint_type; if (params.type == "skybox") { pkt << (u16) params.textures.size(); @@ -1818,9 +1782,7 @@ m_script->player_event(playersao,"health_changed"); // Send to other clients - std::string str = gob_cmd_punched(playersao->getHP()); - ActiveObjectMessage aom(playersao->getId(), true, str); - playersao->m_messages_out.push(aom); + playersao->sendPunchCommand(); } void Server::SendPlayerBreath(PlayerSAO *sao) @@ -1855,10 +1817,10 @@ void Server::SendPlayerFov(session_t peer_id) { - NetworkPacket pkt(TOCLIENT_FOV, 4 + 1, peer_id); + NetworkPacket pkt(TOCLIENT_FOV, 4 + 1 + 4, peer_id); PlayerFovSpec fov_spec = m_env->getPlayer(peer_id)->getFov(); - pkt << fov_spec.fov << fov_spec.is_multiplier; + pkt << fov_spec.fov << fov_spec.is_multiplier << fov_spec.transition_time; Send(&pkt); } @@ -2443,9 +2405,87 @@ return true; } +bool Server::addMediaFile(const std::string &filename, + const std::string &filepath, std::string *filedata_to, + std::string *digest_to) +{ + // If name contains illegal characters, ignore the file + if (!string_allowed(filename, TEXTURENAME_ALLOWED_CHARS)) { + infostream << "Server: ignoring illegal file name: \"" + << filename << "\"" << std::endl; + return false; + } + // If name is not in a supported format, ignore it + const char *supported_ext[] = { + ".png", ".jpg", ".bmp", ".tga", + ".pcx", ".ppm", ".psd", ".wal", ".rgb", + ".ogg", + ".x", ".b3d", ".md2", ".obj", + // Custom translation file format + ".tr", + NULL + }; + if (removeStringEnd(filename, supported_ext).empty()) { + infostream << "Server: ignoring unsupported file extension: \"" + << filename << "\"" << std::endl; + return false; + } + // Ok, attempt to load the file and add to cache + + // Read data + std::ifstream fis(filepath.c_str(), std::ios_base::binary); + if (!fis.good()) { + errorstream << "Server::addMediaFile(): Could not open \"" + << filename << "\" for reading" << std::endl; + return false; + } + std::string filedata; + bool bad = false; + for (;;) { + char buf[1024]; + fis.read(buf, sizeof(buf)); + std::streamsize len = fis.gcount(); + filedata.append(buf, len); + if (fis.eof()) + break; + if (!fis.good()) { + bad = true; + break; + } + } + if (bad) { + errorstream << "Server::addMediaFile(): Failed to read \"" + << filename << "\"" << std::endl; + return false; + } else if (filedata.empty()) { + errorstream << "Server::addMediaFile(): Empty file \"" + << filepath << "\"" << std::endl; + return false; + } + + SHA1 sha1; + sha1.addBytes(filedata.c_str(), filedata.length()); + + unsigned char *digest = sha1.getDigest(); + std::string sha1_base64 = base64_encode(digest, 20); + std::string sha1_hex = hex_encode((char*) digest, 20); + if (digest_to) + *digest_to = std::string((char*) digest, 20); + free(digest); + + // Put in list + m_media[filename] = MediaInfo(filepath, sha1_base64); + verbosestream << "Server: " << sha1_hex << " is " << filename + << std::endl; + + if (filedata_to) + *filedata_to = std::move(filedata); + return true; +} + void Server::fillMediaCache() { - infostream<<"Server: Calculating media file checksums"< paths; @@ -2457,87 +2497,19 @@ for (const std::string &mediapath : paths) { std::vector dirlist = fs::GetDirListing(mediapath); for (const fs::DirListNode &dln : dirlist) { - if (dln.dir) // Ignode dirs - continue; - std::string filename = dln.name; - // If name contains illegal characters, ignore the file - if (!string_allowed(filename, TEXTURENAME_ALLOWED_CHARS)) { - infostream<<"Server: ignoring illegal file name: \"" - << filename << "\"" << std::endl; - continue; - } - // If name is not in a supported format, ignore it - const char *supported_ext[] = { - ".png", ".jpg", ".bmp", ".tga", - ".pcx", ".ppm", ".psd", ".wal", ".rgb", - ".ogg", - ".x", ".b3d", ".md2", ".obj", - // Custom translation file format - ".tr", - NULL - }; - if (removeStringEnd(filename, supported_ext).empty()){ - infostream << "Server: ignoring unsupported file extension: \"" - << filename << "\"" << std::endl; - continue; - } - // Ok, attempt to load the file and add to cache - std::string filepath; - filepath.append(mediapath).append(DIR_DELIM).append(filename); - - // Read data - std::ifstream fis(filepath.c_str(), std::ios_base::binary); - if (!fis.good()) { - errorstream << "Server::fillMediaCache(): Could not open \"" - << filename << "\" for reading" << std::endl; - continue; - } - std::ostringstream tmp_os(std::ios_base::binary); - bool bad = false; - for(;;) { - char buf[1024]; - fis.read(buf, 1024); - std::streamsize len = fis.gcount(); - tmp_os.write(buf, len); - if (fis.eof()) - break; - if (!fis.good()) { - bad = true; - break; - } - } - if(bad) { - errorstream<<"Server::fillMediaCache(): Failed to read \"" - << filename << "\"" << std::endl; - continue; - } - if(tmp_os.str().length() == 0) { - errorstream << "Server::fillMediaCache(): Empty file \"" - << filepath << "\"" << std::endl; + if (dln.dir) // Ignore dirs continue; - } - - SHA1 sha1; - sha1.addBytes(tmp_os.str().c_str(), tmp_os.str().length()); - - unsigned char *digest = sha1.getDigest(); - std::string sha1_base64 = base64_encode(digest, 20); - std::string sha1_hex = hex_encode((char*)digest, 20); - free(digest); - - // Put in list - m_media[filename] = MediaInfo(filepath, sha1_base64); - verbosestream << "Server: " << sha1_hex << " is " << filename - << std::endl; + std::string filepath = mediapath; + filepath.append(DIR_DELIM).append(dln.name); + addMediaFile(dln.name, filepath); } } + + infostream << "Server: " << m_media.size() << " media files collected" << std::endl; } void Server::sendMediaAnnouncement(session_t peer_id, const std::string &lang_code) { - verbosestream << "Server: Announcing files to id(" << peer_id << ")" - << std::endl; - // Make packet NetworkPacket pkt(TOCLIENT_ANNOUNCE_MEDIA, 0, peer_id); @@ -2560,6 +2532,9 @@ pkt << g_settings->get("remote_media"); Send(&pkt); + + verbosestream << "Server: Announcing files to id(" << peer_id + << "): count=" << media_sent << " size=" << pkt.getSize() << std::endl; } struct SendableMedia @@ -2675,40 +2650,20 @@ } } -void Server::sendDetachedInventory(const std::string &name, session_t peer_id) +void Server::sendDetachedInventory(Inventory *inventory, const std::string &name, session_t peer_id) { - const auto &inv_it = m_detached_inventories.find(name); - const auto &player_it = m_detached_inventories_player.find(name); - - if (player_it == m_detached_inventories_player.end() || - player_it->second.empty()) { - // OK. Send to everyone - } else { - if (!m_env) - return; // Mods are not done loading - - RemotePlayer *p = m_env->getPlayer(player_it->second.c_str()); - if (!p) - return; // Player is offline - - if (peer_id != PEER_ID_INEXISTENT && peer_id != p->getPeerId()) - return; // Caller requested send to a different player, so don't send. - - peer_id = p->getPeerId(); - } - NetworkPacket pkt(TOCLIENT_DETACHED_INVENTORY, 0, peer_id); pkt << name; - if (inv_it == m_detached_inventories.end()) { + if (!inventory) { pkt << false; // Remove inventory } else { pkt << true; // Update inventory // Serialization & NetworkPacket isn't a love story std::ostringstream os(std::ios_base::binary); - inv_it->second->serialize(os); - inv_it->second->setModified(false); + inventory->serialize(os); + inventory->setModified(false); const std::string &os_str = os.str(); pkt << static_cast(os_str.size()); // HACK: to keep compatibility with 5.0.0 clients @@ -2723,16 +2678,17 @@ void Server::sendDetachedInventories(session_t peer_id, bool incremental) { - for (const auto &detached_inventory : m_detached_inventories) { - const std::string &name = detached_inventory.first; - if (incremental) { - Inventory *inv = detached_inventory.second; - if (!inv || !inv->checkModified()) - continue; - } - - sendDetachedInventory(name, peer_id); + // Lookup player name, to filter detached inventories just after + std::string peer_name; + if (peer_id != PEER_ID_INEXISTENT) { + peer_name = getClient(peer_id, CS_Created)->getName(); } + + auto send_cb = [this, peer_id](const std::string &name, Inventory *inv) { + sendDetachedInventory(inv, name, peer_id); + }; + + m_inventory_mgr->sendDetachedInventories(peer_name, incremental, send_cb); } /* @@ -2938,10 +2894,8 @@ if (!clist || clist->getSize() == 0) return; - if (!clist->checkModified()) { - verbosestream << "Skip Server::UpdateCrafting(): list unmodified" << std::endl; + if (!clist->checkModified()) return; - } // Get a preview for crafting ItemStack preview; @@ -3032,8 +2986,16 @@ line += L"-!- You don't have permission to shout."; broadcast_line = false; } else { + /* + Workaround for fixing chat on Android. Lua doesn't handle + the Cyrillic alphabet and some characters on older Android devices + */ +#ifdef __ANDROID__ + line += L"<" + wname + L"> " + wmessage; +#else line += narrow_to_wide(m_script->formatChatMessage(name, wide_to_narrow(wmessage))); +#endif } /* @@ -3117,7 +3079,7 @@ // Version os << L"version=" << narrow_to_wide(g_version_string); // Uptime - os << L", uptime=" << m_uptime.get(); + os << L", uptime=" << m_uptime_counter->get(); // Max lag estimate os << L", max_lag=" << (m_env ? m_env->getMaxLagEstimate() : 0); @@ -3399,15 +3361,12 @@ SendCloudParams(player->getPeerId(), params); } -bool Server::overrideDayNightRatio(RemotePlayer *player, bool do_override, +void Server::overrideDayNightRatio(RemotePlayer *player, bool do_override, float ratio) { - if (!player) - return false; - + sanity_check(player); player->overrideDayNightRatio(do_override, ratio); SendOverrideDayNightRatio(player->getPeerId(), do_override, ratio); - return true; } void Server::notifyPlayers(const std::wstring &msg) @@ -3415,12 +3374,8 @@ SendChatMessage(PEER_ID_INEXISTENT, ChatMessage(msg)); } -void Server::spawnParticle(const std::string &playername, v3f pos, - v3f velocity, v3f acceleration, - float expirationtime, float size, bool - collisiondetection, bool collision_removal, bool object_collision, - bool vertical, const std::string &texture, - const struct TileAnimationParams &animation, u8 glow) +void Server::spawnParticle(const std::string &playername, + const ParticleParameters &p) { // m_env will be NULL if the server is initializing if (!m_env) @@ -3436,18 +3391,11 @@ proto_ver = player->protocol_version; } - SendSpawnParticle(peer_id, proto_ver, pos, velocity, acceleration, - expirationtime, size, collisiondetection, collision_removal, - object_collision, vertical, texture, animation, glow); + SendSpawnParticle(peer_id, proto_ver, p); } -u32 Server::addParticleSpawner(u16 amount, float spawntime, - v3f minpos, v3f maxpos, v3f minvel, v3f maxvel, v3f minacc, v3f maxacc, - float minexptime, float maxexptime, float minsize, float maxsize, - bool collisiondetection, bool collision_removal, bool object_collision, - ServerActiveObject *attached, bool vertical, const std::string &texture, - const std::string &playername, const struct TileAnimationParams &animation, - u8 glow) +u32 Server::addParticleSpawner(const ParticleSpawnerParameters &p, + ServerActiveObject *attached, const std::string &playername) { // m_env will be NULL if the server is initializing if (!m_env) @@ -3467,16 +3415,11 @@ u32 id; if (attached_id == 0) - id = m_env->addParticleSpawner(spawntime); + id = m_env->addParticleSpawner(p.time); else - id = m_env->addParticleSpawner(spawntime, attached_id); - - SendAddParticleSpawner(peer_id, proto_ver, amount, spawntime, - minpos, maxpos, minvel, maxvel, minacc, maxacc, - minexptime, maxexptime, minsize, maxsize, collisiondetection, - collision_removal, object_collision, attached_id, vertical, - texture, id, animation, glow); + id = m_env->addParticleSpawner(p.time, attached_id); + SendAddParticleSpawner(peer_id, proto_ver, p, attached_id, id); return id; } @@ -3498,49 +3441,41 @@ SendDeleteParticleSpawner(peer_id, id); } -Inventory* Server::createDetachedInventory(const std::string &name, const std::string &player) +bool Server::dynamicAddMedia(const std::string &filepath) { - if(m_detached_inventories.count(name) > 0){ - infostream<<"Server clearing detached inventory \""<second; - m_detached_inventories.erase(inv_it); - - if (!m_env) // Mods are not done loading - return true; - - const auto &player_it = m_detached_inventories_player.find(name); - if (player_it != m_detached_inventories_player.end()) { - RemotePlayer *player = m_env->getPlayer(player_it->second.c_str()); + // Push file to existing clients + NetworkPacket pkt(TOCLIENT_MEDIA_PUSH, 0); + pkt << raw_hash << filename << (bool) true; + pkt.putLongString(filedata); - if (player && player->getPeerId() != PEER_ID_INEXISTENT) - sendDetachedInventory(name, player->getPeerId()); - - m_detached_inventories_player.erase(player_it); - } else { - // Notify all players about the change - sendDetachedInventory(name, PEER_ID_INEXISTENT); + auto client_ids = m_clients.getClientIDs(CS_DefinitionsSent); + for (session_t client_id : client_ids) { + /* + The network layer only guarantees ordered delivery inside a channel. + Since the very next packet could be one that uses the media, we have + to push the media over ALL channels to ensure it is processed before + it is used. + In practice this means we have to send it twice: + - channel 1 (HUD) + - channel 0 (everything else: e.g. play_sound, object messages) + */ + m_clients.send(client_id, 1, &pkt, true); + m_clients.send(client_id, 0, &pkt, true); } + return true; } @@ -3564,7 +3499,7 @@ for (const RollbackAction &action : actions) { num_tried++; - bool success = action.applyRevert(map, this, this); + bool success = action.applyRevert(map, m_inventory_mgr.get(), this); if(!success){ num_failed++; std::ostringstream os; @@ -3930,3 +3865,20 @@ m_script->on_modchannel_message(channel, sender, message); } } + +void Server::loadTranslationLanguage(const std::string &lang_code) +{ + if (g_server_translations->count(lang_code)) + return; // Already loaded + + std::string suffix = "." + lang_code + ".tr"; + for (const auto &i : m_media) { + if (str_ends_with(i.first, suffix)) { + std::ifstream t(i.second.path); + std::string data((std::istreambuf_iterator(t)), + std::istreambuf_iterator()); + + (*g_server_translations)[lang_code].loadTranslation(data); + } + } +} diff -Nru minetest-5.2.0/src/serverenvironment.cpp minetest-5.3.0/src/serverenvironment.cpp --- minetest-5.2.0/src/serverenvironment.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/serverenvironment.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -17,8 +17,8 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include #include "serverenvironment.h" -#include "content_sao.h" #include "settings.h" #include "log.h" #include "mapblock.h" @@ -44,7 +44,11 @@ #if USE_POSTGRESQL #include "database/database-postgresql.h" #endif -#include +#if USE_LEVELDB +#include "database/database-leveldb.h" +#endif +#include "server/luaentity_sao.h" +#include "server/player_sao.h" #define LBM_NAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_:" @@ -545,24 +549,6 @@ return m_player_database->removePlayer(name); } -bool ServerEnvironment::line_of_sight(v3f pos1, v3f pos2, v3s16 *p) -{ - // Iterate trough nodes on the line - voxalgo::VoxelLineIterator iterator(pos1 / BS, (pos2 - pos1) / BS); - do { - MapNode n = getMap().getNode(iterator.m_current_node_pos); - - // Return non-air - if (n.param0 != CONTENT_AIR) { - if (p) - *p = iterator.m_current_node_pos; - return false; - } - iterator.next(); - } while (iterator.m_current_index <= iterator.m_last_index); - return true; -} - void ServerEnvironment::kickAllPlayers(AccessDeniedCode reason, const std::string &str_reason, bool reconnect) { @@ -638,6 +624,9 @@ void ServerEnvironment::saveMeta() { + if (!m_meta_loaded) + return; + std::string path = m_path_world + DIR_DELIM "env_meta.txt"; // Open file and serialize @@ -664,6 +653,9 @@ void ServerEnvironment::loadMeta() { + SANITY_CHECK(!m_meta_loaded); + m_meta_loaded = true; + // If file doesn't exist, load default environment metadata if (!fs::PathExists(m_path_world + DIR_DELIM "env_meta.txt")) { infostream << "ServerEnvironment: Loading default environment metadata" @@ -1420,10 +1412,7 @@ // Step object obj->step(dtime, send_recommended); // Read messages from object - while (!obj->m_messages_out.empty()) { - this->m_active_object_messages.push(obj->m_messages_out.front()); - obj->m_messages_out.pop(); - } + obj->dumpAOMessagesToQueue(m_active_object_messages); }; m_ao_manager.step(dtime, cb_state); } @@ -1609,28 +1598,28 @@ } } -ActiveObjectMessage ServerEnvironment::getActiveObjectMessage() +bool ServerEnvironment::getActiveObjectMessage(ActiveObjectMessage *dest) { if(m_active_object_messages.empty()) - return ActiveObjectMessage(0); + return false; - ActiveObjectMessage message = m_active_object_messages.front(); + *dest = std::move(m_active_object_messages.front()); m_active_object_messages.pop(); - return message; + return true; } void ServerEnvironment::getSelectedActiveObjects( const core::line3d &shootline_on_map, std::vector &objects) { - std::vector objectIds; - getObjectsInsideRadius(objectIds, shootline_on_map.start, - shootline_on_map.getLength() + 10.0f); + std::vector objs; + getObjectsInsideRadius(objs, shootline_on_map.start, + shootline_on_map.getLength() + 10.0f, nullptr); const v3f line_vector = shootline_on_map.getVector(); - for (u16 objectId : objectIds) { - ServerActiveObject* obj = getActiveObject(objectId); - + for (auto obj : objs) { + if (obj->isGone()) + continue; aabb3f selection_box; if (!obj->getSelectionBox(&selection_box)) continue; @@ -1645,7 +1634,7 @@ if (boxLineCollision(offsetted_box, shootline_on_map.start, line_vector, ¤t_intersection, ¤t_normal)) { objects.emplace_back( - (s16) objectId, current_intersection, current_normal, + (s16) obj->getId(), current_intersection, current_normal, (current_intersection - shootline_on_map.start).getLengthSQ()); } } @@ -1799,6 +1788,18 @@ } } +ServerActiveObject* ServerEnvironment::createSAO(ActiveObjectType type, v3f pos, + const std::string &data) +{ + switch (type) { + case ACTIVEOBJECT_TYPE_LUAENTITY: + return new LuaEntitySAO(this, pos, data); + default: + warningstream << "ServerActiveObject: No factory for type=" << type << std::endl; + } + return nullptr; +} + /* Convert stored objects from blocks near the players to active. */ @@ -1832,10 +1833,10 @@ std::vector new_stored; for (const StaticObject &s_obj : block->m_static_objects.m_stored) { // Create an active object from the data - ServerActiveObject *obj = ServerActiveObject::create - ((ActiveObjectType) s_obj.type, this, 0, s_obj.pos, s_obj.data); + ServerActiveObject *obj = createSAO((ActiveObjectType) s_obj.type, s_obj.pos, + s_obj.data); // If couldn't create object, store static data back. - if(obj == NULL) { + if (!obj) { errorstream<<"ServerEnvironment::activateObjects(): " <<"failed to create active object from static object " <<"in block "< &shootline_on_map, @@ -323,9 +323,10 @@ bool swapNode(v3s16 p, const MapNode &n); // Find all active objects inside a radius around a point - void getObjectsInsideRadius(std::vector &objects, const v3f &pos, float radius) + void getObjectsInsideRadius(std::vector &objects, const v3f &pos, float radius, + std::function include_obj_cb) { - return m_ao_manager.getObjectsInsideRadius(pos, radius, objects); + return m_ao_manager.getObjectsInsideRadius(pos, radius, objects, include_obj_cb); } // Clear objects, loading and going through every MapBlock @@ -334,16 +335,6 @@ // This makes stuff happen void step(f32 dtime); - /*! - * Returns false if the given line intersects with a - * non-air node, true otherwise. - * \param pos1 start of the line - * \param pos2 end of the line - * \param p output, position of the first non-air node - * the line intersects - */ - bool line_of_sight(v3f pos1, v3f pos2, v3s16 *p = NULL); - u32 getGameTime() const { return m_game_time; } void reportMaxLagEstimate(float f) { m_max_lag_estimate = f; } @@ -448,6 +439,8 @@ IntervalLimiter m_active_blocks_management_interval; IntervalLimiter m_active_block_modifier_interval; IntervalLimiter m_active_blocks_nodemetadata_interval; + // Whether the variables below have been read from file yet + bool m_meta_loaded = false; // Time from the beginning of the game in seconds. // Incremented in step(). u32 m_game_time = 0; @@ -478,4 +471,6 @@ IntervalLimiter m_particle_management_interval; std::unordered_map m_particle_spawners; std::unordered_map m_particle_spawner_attachments; + + ServerActiveObject* createSAO(ActiveObjectType type, v3f pos, const std::string &data); }; diff -Nru minetest-5.2.0/src/server.h minetest-5.3.0/src/server.h --- minetest-5.2.0/src/server.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/server.h 2020-07-09 21:13:21.000000000 +0000 @@ -27,12 +27,14 @@ #include "content/mods.h" #include "inventorymanager.h" #include "content/subgames.h" -#include "tileanimation.h" // struct TileAnimationParams +#include "tileanimation.h" // TileAnimationParams +#include "particles.h" // ParticleParams #include "network/peerhandler.h" #include "network/address.h" #include "util/numeric.h" #include "util/thread.h" #include "util/basic_macros.h" +#include "util/metricsbackend.h" #include "serverenvironment.h" #include "clientiface.h" #include "chatmessage.h" @@ -67,6 +69,7 @@ struct StarParams; class ServerThread; class ServerModManager; +class ServerInventoryManager; enum ClientDeletionReason { CDR_LEAVE, @@ -115,7 +118,7 @@ }; class Server : public con::PeerHandler, public MapEventReceiver, - public InventoryManager, public IGameDef + public IGameDef { public: /* @@ -133,7 +136,6 @@ ~Server(); DISABLE_CLASS_COPY(Server); - void init(); void start(); void stop(); // This is mainly a way to pass the time to the server. @@ -165,7 +167,6 @@ void handleCommand_InventoryAction(NetworkPacket* pkt); void handleCommand_ChatMessage(NetworkPacket* pkt); void handleCommand_Damage(NetworkPacket* pkt); - void handleCommand_Password(NetworkPacket* pkt); void handleCommand_PlayerItem(NetworkPacket* pkt); void handleCommand_Respawn(NetworkPacket* pkt); void handleCommand_Interact(NetworkPacket* pkt); @@ -196,15 +197,9 @@ */ void onMapEditEvent(const MapEditEvent &event); - /* - Shall be called with the environment and the connection locked. - */ - Inventory* getInventory(const InventoryLocation &loc); - void setInventoryModified(const InventoryLocation &loc); - // Connection must be locked when called std::wstring getStatusString(); - inline double getUptime() const { return m_uptime.m_value; } + inline double getUptime() const { return m_uptime_counter->get(); } // read shutdown state inline bool isShutdownRequested() const { return m_shutdown_state.is_requested; } @@ -232,31 +227,19 @@ void notifyPlayer(const char *name, const std::wstring &msg); void notifyPlayers(const std::wstring &msg); + void spawnParticle(const std::string &playername, - v3f pos, v3f velocity, v3f acceleration, - float expirationtime, float size, - bool collisiondetection, bool collision_removal, bool object_collision, - bool vertical, const std::string &texture, - const struct TileAnimationParams &animation, u8 glow); - - u32 addParticleSpawner(u16 amount, float spawntime, - v3f minpos, v3f maxpos, - v3f minvel, v3f maxvel, - v3f minacc, v3f maxacc, - float minexptime, float maxexptime, - float minsize, float maxsize, - bool collisiondetection, bool collision_removal, bool object_collision, - ServerActiveObject *attached, - bool vertical, const std::string &texture, - const std::string &playername, const struct TileAnimationParams &animation, - u8 glow); + const ParticleParameters &p); + + u32 addParticleSpawner(const ParticleSpawnerParameters &p, + ServerActiveObject *attached, const std::string &playername); void deleteParticleSpawner(const std::string &playername, u32 id); - // Creates or resets inventory - Inventory *createDetachedInventory(const std::string &name, - const std::string &player = ""); - bool removeDetachedInventory(const std::string &name); + bool dynamicAddMedia(const std::string &filepath); + + ServerInventoryManager *getInventoryMgr() const { return m_inventory_mgr.get(); } + void sendDetachedInventory(Inventory *inventory, const std::string &name, session_t peer_id); // Envlock and conlock should be locked when using scriptapi ServerScripting *getScriptIface(){ return m_script; } @@ -318,7 +301,7 @@ void setClouds(RemotePlayer *player, const CloudParams ¶ms); - bool overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness); + void overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness); /* con::PeerHandler implementation. */ void peerAdded(con::Peer *peer); @@ -335,7 +318,7 @@ bool getClientConInfo(session_t peer_id, con::rtt_stat_type type, float *retval); bool getClientInfo(session_t peer_id, ClientState *state, u32 *uptime, u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch, - std::string* vers_string); + std::string* vers_string, std::string* lang_code); void printToConsoleOnly(const std::string &text); @@ -359,6 +342,9 @@ // Send block to specific player only bool SendBlock(session_t peer_id, const v3s16 &blockpos); + // Load translations for a language + void loadTranslationLanguage(const std::string &lang_code); + // Bind address Address m_bind_addr; @@ -386,6 +372,8 @@ float m_timer = 0.0f; }; + void init(); + void SendMovement(session_t peer_id); void SendHP(session_t peer_id, u16 hp); void SendBreath(session_t peer_id, u16 breath); @@ -449,35 +437,22 @@ // Sends blocks to clients (locks env and con on its own) void SendBlocks(float dtime); + bool addMediaFile(const std::string &filename, const std::string &filepath, + std::string *filedata = nullptr, std::string *digest = nullptr); void fillMediaCache(); void sendMediaAnnouncement(session_t peer_id, const std::string &lang_code); void sendRequestedMedia(session_t peer_id, const std::vector &tosend); - void sendDetachedInventory(const std::string &name, session_t peer_id); - // Adds a ParticleSpawner on peer with peer_id (PEER_ID_INEXISTENT == all) void SendAddParticleSpawner(session_t peer_id, u16 protocol_version, - u16 amount, float spawntime, - v3f minpos, v3f maxpos, - v3f minvel, v3f maxvel, - v3f minacc, v3f maxacc, - float minexptime, float maxexptime, - float minsize, float maxsize, - bool collisiondetection, bool collision_removal, bool object_collision, - u16 attached_id, - bool vertical, const std::string &texture, u32 id, - const struct TileAnimationParams &animation, u8 glow); + const ParticleSpawnerParameters &p, u16 attached_id, u32 id); void SendDeleteParticleSpawner(session_t peer_id, u32 id); // Spawns particle on peer with peer_id (PEER_ID_INEXISTENT == all) void SendSpawnParticle(session_t peer_id, u16 protocol_version, - v3f pos, v3f velocity, v3f acceleration, - float expirationtime, float size, - bool collisiondetection, bool collision_removal, bool object_collision, - bool vertical, const std::string &texture, - const struct TileAnimationParams &animation, u8 glow); + const ParticleParameters &p); void SendActiveObjectRemoveAdd(RemoteClient *client, PlayerSAO *playersao); void SendActiveObjectMessages(session_t peer_id, const std::string &datas, @@ -589,9 +564,6 @@ float m_step_dtime = 0.0f; std::mutex m_step_dtime_mutex; - // current server step lag counter - float m_lag; - // The server mainly operates in this thread ServerThread *m_thread = nullptr; @@ -600,8 +572,6 @@ */ // Timer for sending time of day over network float m_time_of_day_send_timer = 0.0f; - // Uptime of server in seconds - MutexedVariable m_uptime; /* Client interface @@ -658,14 +628,6 @@ s32 m_next_sound_id = 0; // positive values only s32 nextSoundId(); - /* - Detached inventories (behind m_env_mutex) - */ - // key = name - std::map m_detached_inventories; - // value = "" (visible to all players) or player name - std::map m_detached_inventories_player; - std::unordered_map m_mod_storages; float m_mod_storage_save_timer = 10.0f; @@ -675,6 +637,22 @@ // ModChannel manager std::unique_ptr m_modchannel_mgr; + + // Inventory manager + std::unique_ptr m_inventory_mgr; + + // Global server metrics backend + std::unique_ptr m_metrics_backend; + + // Server metrics + MetricCounterPtr m_uptime_counter; + MetricGaugePtr m_player_gauge; + MetricGaugePtr m_timeofday_gauge; + // current server step lag + MetricGaugePtr m_lag_gauge; + MetricCounterPtr m_aom_buffer_counter; + MetricCounterPtr m_packet_recv_counter; + MetricCounterPtr m_packet_recv_processed_counter; }; /* diff -Nru minetest-5.2.0/src/serverobject.cpp minetest-5.3.0/src/serverobject.cpp --- minetest-5.2.0/src/serverobject.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/serverobject.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include "serverobject.h" -#include -#include "inventory.h" -#include "constants.h" // BS -#include "log.h" - -ServerActiveObject::ServerActiveObject(ServerEnvironment *env, v3f pos): - ActiveObject(0), - m_env(env), - m_base_position(pos) -{ -} - -ServerActiveObject* ServerActiveObject::create(ActiveObjectType type, - ServerEnvironment *env, u16 id, v3f pos, - const std::string &data) -{ - // Find factory function - std::map::iterator n; - n = m_types.find(type); - if(n == m_types.end()) { - // These are 0.3 entity types, return without error. - if (ACTIVEOBJECT_TYPE_ITEM <= type && type <= ACTIVEOBJECT_TYPE_MOBV2) { - return NULL; - } - - // If factory is not found, just return. - warningstream<<"ServerActiveObject: No factory for type=" - <second; - ServerActiveObject *object = (*f)(env, pos, data); - return object; -} - -void ServerActiveObject::registerType(u16 type, Factory f) -{ - std::map::iterator n; - n = m_types.find(type); - if(n != m_types.end()) - return; - m_types[type] = f; -} - -float ServerActiveObject::getMinimumSavedMovement() -{ - return 2.0*BS; -} - -ItemStack ServerActiveObject::getWieldedItem(ItemStack *selected, ItemStack *hand) const -{ - *selected = ItemStack(); - if (hand) - *hand = ItemStack(); - - return ItemStack(); -} - -bool ServerActiveObject::setWieldedItem(const ItemStack &item) -{ - return false; -} diff -Nru minetest-5.2.0/src/serverobject.h minetest-5.3.0/src/serverobject.h --- minetest-5.2.0/src/serverobject.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/serverobject.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,261 +0,0 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#pragma once - -#include -#include "irrlichttypes_bloated.h" -#include "activeobject.h" -#include "inventorymanager.h" -#include "itemgroup.h" -#include "util/container.h" - -/* - -Some planning -------------- - -* Server environment adds an active object, which gets the id 1 -* The active object list is scanned for each client once in a while, - and it finds out what objects have been added that are not known - by the client yet. This scan is initiated by the Server class and - the result ends up directly to the server. -* A network packet is created with the info and sent to the client. -* Environment converts objects to static data and static data to - objects, based on how close players are to them. - -*/ - -class ServerEnvironment; -struct ItemStack; -struct ToolCapabilities; -struct ObjectProperties; -struct PlayerHPChangeReason; - -class ServerActiveObject : public ActiveObject -{ -public: - /* - NOTE: m_env can be NULL, but step() isn't called if it is. - Prototypes are used that way. - */ - ServerActiveObject(ServerEnvironment *env, v3f pos); - virtual ~ServerActiveObject() = default; - - virtual ActiveObjectType getSendType() const - { return getType(); } - - // Called after id has been set and has been inserted in environment - virtual void addedToEnvironment(u32 dtime_s){}; - // Called before removing from environment - virtual void removingFromEnvironment(){}; - // Returns true if object's deletion is the job of the - // environment - virtual bool environmentDeletes() const - { return true; } - - // Create a certain type of ServerActiveObject - static ServerActiveObject* create(ActiveObjectType type, - ServerEnvironment *env, u16 id, v3f pos, - const std::string &data); - - /* - Some simple getters/setters - */ - v3f getBasePosition() const { return m_base_position; } - void setBasePosition(v3f pos){ m_base_position = pos; } - ServerEnvironment* getEnv(){ return m_env; } - - /* - Some more dynamic interface - */ - - virtual void setPos(const v3f &pos) - { setBasePosition(pos); } - // continuous: if true, object does not stop immediately at pos - virtual void moveTo(v3f pos, bool continuous) - { setBasePosition(pos); } - // If object has moved less than this and data has not changed, - // saving to disk may be omitted - virtual float getMinimumSavedMovement(); - - virtual std::string getDescription(){return "SAO";} - - /* - Step object in time. - Messages added to messages are sent to client over network. - - send_recommended: - True at around 5-10 times a second, same for all objects. - This is used to let objects send most of the data at the - same time so that the data can be combined in a single - packet. - */ - virtual void step(float dtime, bool send_recommended){} - - /* - The return value of this is passed to the client-side object - when it is created - */ - virtual std::string getClientInitializationData(u16 protocol_version){return "";} - - /* - The return value of this is passed to the server-side object - when it is created (converted from static to active - actually - the data is the static form) - */ - virtual void getStaticData(std::string *result) const - { - assert(isStaticAllowed()); - *result = ""; - } - /* - Return false in here to never save and instead remove object - on unload. getStaticData() will not be called in that case. - */ - virtual bool isStaticAllowed() const - {return true;} - - // Returns tool wear - virtual u16 punch(v3f dir, - const ToolCapabilities *toolcap = nullptr, - ServerActiveObject *puncher = nullptr, - float time_from_last_punch = 1000000.0f) - { return 0; } - virtual void rightClick(ServerActiveObject *clicker) - {} - virtual void setHP(s32 hp, const PlayerHPChangeReason &reason) - {} - virtual u16 getHP() const - { return 0; } - - virtual void setArmorGroups(const ItemGroupList &armor_groups) - {} - virtual const ItemGroupList &getArmorGroups() const - { static ItemGroupList rv; return rv; } - virtual void setPhysicsOverride(float physics_override_speed, float physics_override_jump, float physics_override_gravity) - {} - virtual void setAnimation(v2f frames, float frame_speed, float frame_blend, bool frame_loop) - {} - virtual void getAnimation(v2f *frames, float *frame_speed, float *frame_blend, bool *frame_loop) - {} - virtual void setAnimationSpeed(float frame_speed) - {} - virtual void setBonePosition(const std::string &bone, v3f position, v3f rotation) - {} - virtual void getBonePosition(const std::string &bone, v3f *position, v3f *lotation) - {} - 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; } - virtual void notifyObjectPropertiesModified() - {} - - // Inventory and wielded item - virtual Inventory *getInventory() const - { return NULL; } - virtual InventoryLocation getInventoryLocation() const - { return InventoryLocation(); } - virtual void setInventoryModified() - {} - virtual std::string getWieldList() const - { return ""; } - virtual u16 getWieldIndex() const - { return 0; } - virtual ItemStack getWieldedItem(ItemStack *selected, - ItemStack *hand = nullptr) const; - virtual bool setWieldedItem(const ItemStack &item); - inline void attachParticleSpawner(u32 id) - { - m_attached_particle_spawners.insert(id); - } - inline void detachParticleSpawner(u32 id) - { - m_attached_particle_spawners.erase(id); - } - - - /* - Number of players which know about this object. Object won't be - deleted until this is 0 to keep the id preserved for the right - object. - */ - u16 m_known_by_count = 0; - - /* - - Whether this object is to be removed when nobody knows about - it anymore. - - Removal is delayed to preserve the id for the time during which - it could be confused to some other object by some client. - - This is usually set to true by the step() method when the object wants - to be deleted but can be set by anything else too. - */ - bool m_pending_removal = false; - - /* - Same purpose as m_pending_removal but for deactivation. - deactvation = save static data in block, remove active object - - If this is set alongside with m_pending_removal, removal takes - priority. - */ - bool m_pending_deactivation = false; - - /* - A getter that unifies the above to answer the question: - "Can the environment still interact with this object?" - */ - inline bool isGone() const - { return m_pending_removal || m_pending_deactivation; } - - /* - Whether the object's static data has been stored to a block - */ - bool m_static_exists = false; - /* - The block from which the object was loaded from, and in which - a copy of the static data resides. - */ - v3s16 m_static_block = v3s16(1337,1337,1337); - - /* - Queue of messages to be sent to the client - */ - std::queue m_messages_out; - -protected: - virtual void onAttach(int parent_id) {} - virtual void onDetach(int parent_id) {} - - // Used for creating objects based on type - typedef ServerActiveObject* (*Factory) - (ServerEnvironment *env, v3f pos, - const std::string &data); - static void registerType(u16 type, Factory f); - - ServerEnvironment *m_env; - v3f m_base_position; - std::unordered_set m_attached_particle_spawners; - -private: - // Used for creating objects based on type - static std::map m_types; -}; diff -Nru minetest-5.2.0/src/settings_translation_file.cpp minetest-5.3.0/src/settings_translation_file.cpp --- minetest-5.2.0/src/settings_translation_file.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/settings_translation_file.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -254,8 +254,6 @@ gettext("Enables parallax occlusion mapping.\nRequires shaders to be enabled."); gettext("Parallax occlusion mode"); gettext("0 = parallax occlusion with slope information (faster).\n1 = relief mapping (slower, more accurate)."); - gettext("Parallax occlusion strength"); - gettext("Strength of parallax."); gettext("Parallax occlusion iterations"); gettext("Number of parallax occlusion iterations."); gettext("Parallax occlusion scale"); @@ -326,6 +324,8 @@ gettext("Multiplier for fall bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."); gettext("3D mode"); gettext("3D support.\nCurrently supported:\n- none: no 3d output.\n- anaglyph: cyan/magenta color 3d.\n- interlaced: odd/even line based polarisation screen support.\n- topbottom: split screen top/bottom.\n- sidebyside: split screen side by side.\n- crossview: Cross-eyed 3d\n- pageflip: quadbuffer based 3d.\nNote that the interlaced mode requires shaders to be enabled."); + gettext("3D mode parallax strength"); + gettext("Strength of 3D mode parallax."); gettext("Console height"); gettext("In-game chat console height, between 0.1 (10%) and 1.0 (100%)."); gettext("Console color"); @@ -427,8 +427,10 @@ gettext("Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."); gettext("Fallback font path"); gettext("Path of the fallback font.\nIf “freetype” setting is enabled: Must be a TrueType font.\nIf “freetype” setting is disabled: Must be a bitmap or XML vectors font.\nThis font will be used for certain languages or if the default font is unavailable."); + gettext("Chat font size"); + gettext("Font size of the recent chat text and chat prompt in point (pt).\nValue 0 will use the default font size."); gettext("Screenshot folder"); - gettext("Path to save screenshots at."); + gettext("Path to save screenshots at. Can be an absolute or relative path.\nThe folder will be created if it doesn't already exist."); gettext("Screenshot format"); gettext("Format of screenshots."); gettext("Screenshot quality"); @@ -451,6 +453,8 @@ gettext("Address to connect to.\nLeave this blank to start a local server.\nNote that the address field in the main menu overrides this setting."); gettext("Remote port"); gettext("Port to connect to (UDP).\nNote that the port field in the main menu overrides this setting."); + gettext("Prometheus listener address"); + gettext("Prometheus listener address.\nIf minetest is compiled with ENABLE_PROMETHEUS option enabled,\nenable metrics listener for Prometheus on that address.\nMetrics can be fetch on http://127.0.0.1:30000/metrics"); gettext("Saving map received from server"); gettext("Save the map received by the client on disk."); gettext("Connect to external media server"); @@ -516,6 +520,8 @@ gettext("World directory (everything in the world is stored here).\nNot needed if starting from the main menu."); gettext("Item entity TTL"); gettext("Time in seconds for item entity (dropped items) to live.\nSetting it to -1 disables the feature."); + gettext("Default stack size"); + gettext("Specifies the default stack size of nodes, items and tools.\nNote that mods or games may explicitly set a stack for certain (or all) items."); gettext("Damage"); gettext("Enable players getting damage and dying."); gettext("Creative"); @@ -555,7 +561,7 @@ gettext("Active object send range"); gettext("From how far clients know about objects, stated in mapblocks (16 nodes).\n\nSetting this larger than active_block_range will also cause the server\nto maintain active objects up to this distance in the direction the\nplayer is looking. (This can avoid mobs suddenly disappearing from view)"); gettext("Active block range"); - gettext("The radius of the volume of blocks around every player that is subject to the\nactive block stuff, stated in mapblocks (16 nodes).\nIn active blocks objects are loaded and ABMs run.\nThis is also the minimum range in which active objects (mobs) are maintained.\nThis should be configured together with active_object_range."); + gettext("The radius of the volume of blocks around every player that is subject to the\nactive block stuff, stated in mapblocks (16 nodes).\nIn active blocks objects are loaded and ABMs run.\nThis is also the minimum range in which active objects (mobs) are maintained.\nThis should be configured together with active_object_send_range_blocks."); gettext("Max block send distance"); gettext("From how far blocks are sent to clients, stated in mapblocks (16 nodes)."); gettext("Maximum forceloaded blocks"); @@ -674,6 +680,8 @@ gettext("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"); gettext("Debug log file size threshold"); gettext("If the file size of debug.txt exceeds the number of megabytes specified in\nthis setting when it is opened, the file is moved to debug.txt.1,\ndeleting an older debug.txt.1 if it exists.\ndebug.txt is only moved if this setting is positive."); + gettext("Chat log level"); + gettext("Minimal level of logging to be written to chat."); gettext("IPv6"); gettext("Enable IPv6 support (for both client and server).\nRequired for IPv6 connections to work at all."); gettext("Advanced"); @@ -791,9 +799,21 @@ gettext("Defines areas where trees have apples."); gettext("Mapgen V7"); gettext("Mapgen V7 specific flags"); - gettext("Map generation attributes specific to Mapgen v7.\n'ridges' enables the rivers."); + gettext("Map generation attributes specific to Mapgen v7.\n'ridges': Rivers.\n'floatlands': Floating land masses in the atmosphere.\n'caverns': Giant caves deep underground."); gettext("Mountain zero level"); gettext("Y of mountain density gradient zero level. Used to shift mountains vertically."); + gettext("Floatland minimum Y"); + gettext("Lower Y limit of floatlands."); + gettext("Floatland maximum Y"); + gettext("Upper Y limit of floatlands."); + gettext("Floatland tapering distance"); + gettext("Y-distance over which floatlands taper from full density to nothing.\nTapering starts at this distance from the Y limit.\nFor a solid floatland layer, this controls the height of hills/mountains.\nMust be less than or equal to half the distance between the Y limits."); + gettext("Floatland taper exponent"); + gettext("Exponent of the floatland tapering. Alters the tapering behaviour.\nValue = 1.0 creates a uniform, linear tapering.\nValues > 1.0 create a smooth tapering suitable for the default separated\nfloatlands.\nValues < 1.0 (for example 0.25) create a more defined surface level with\nflatter lowlands, suitable for a solid floatland layer."); + gettext("Floatland density"); + gettext("Adjusts the density of the floatland layer.\nIncrease value to increase density. Can be positive or negative.\nValue = 0.0: 50% of volume is floatland.\nValue = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\nto be sure) creates a solid floatland layer."); + gettext("Floatland water level"); + gettext("Surface level of optional water placed on a solid floatland layer.\nWater is disabled by default and will only be placed if this value is set\nto above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\nupper tapering).\n***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\nWhen enabling water placement the floatlands must be configured and tested\nto be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\nrequired value depending on 'mgv7_np_floatland'), to avoid\nserver-intensive extreme water flow and to avoid vast flooding of the\nworld surface below."); gettext("Cave width"); gettext("Controls width of tunnels, a smaller value creates wider tunnels.\nValue >= 10.0 completely disables generation of tunnels and avoids the\nintensive noise calculations."); gettext("Large cave depth"); @@ -837,6 +857,8 @@ gettext("3D noise defining mountain structure and height.\nAlso defines structure of floatland mountain terrain."); gettext("Ridge noise"); gettext("3D noise defining structure of river canyon walls."); + gettext("Floatland noise"); + gettext("3D noise defining structure of floatlands.\nIf altered from the default, the noise 'scale' (0.7 by default) may need\nto be adjusted, as floatland tapering functions best when this noise has\na value range of approximately -2.0 to 2.0."); gettext("Cavern noise"); gettext("3D noise defining giant caverns."); gettext("Cave1 noise"); @@ -1068,14 +1090,14 @@ 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."); gettext("Mapgen debug"); gettext("Dump the mapgen debug information."); - gettext("Absolute limit of emerge queues"); + gettext("Absolute limit of queued blocks to emerge"); gettext("Maximum number of blocks that can be queued for loading."); - gettext("Limit of emerge queues on disk"); - gettext("Maximum number of blocks to be queued that are to be loaded from file.\nSet to blank for an appropriate amount to be chosen automatically."); - gettext("Limit of emerge queues to generate"); - gettext("Maximum number of blocks to be queued that are to be generated.\nSet to blank for an appropriate amount to be chosen automatically."); + gettext("Per-player limit of queued blocks load from disk"); + gettext("Maximum number of blocks to be queued that are to be loaded from file.\nThis limit is enforced per player."); + gettext("Per-player limit of queued blocks to generate"); + gettext("Maximum number of blocks to be queued that are to be generated.\nThis limit is enforced per player."); gettext("Number of emerge threads"); - gettext("Number of emerge threads to use.\nWARNING: Currently there are multiple bugs that may cause crashes when\n'num_emerge_threads' is larger than 1. Until this warning is removed it is\nstrongly recommended this value is set to the default '1'.\nValue 0:\n- Automatic selection. The number of emerge threads will be\n- 'number of processors - 2', with a lower limit of 1.\nAny other value:\n- Specifies the number of emerge threads, with a lower limit of 1.\nWARNING: Increasing the number of emerge threads increases engine mapgen\nspeed, but this may harm game performance by interfering with other\nprocesses, especially in singleplayer and/or when running Lua code in\n'on_generated'. For many users the optimum setting may be '1'."); + gettext("Number of emerge threads to use.\nValue 0:\n- Automatic selection. The number of emerge threads will be\n- 'number of processors - 2', with a lower limit of 1.\nAny other value:\n- Specifies the number of emerge threads, with a lower limit of 1.\nWARNING: Increasing the number of emerge threads increases engine mapgen\nspeed, but this may harm game performance by interfering with other\nprocesses, especially in singleplayer and/or when running Lua code in\n'on_generated'. For many users the optimum setting may be '1'."); gettext("Online Content Repository"); gettext("ContentDB URL"); gettext("The URL for the content repository"); diff -Nru minetest-5.2.0/src/skyparams.h minetest-5.3.0/src/skyparams.h --- minetest-5.2.0/src/skyparams.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/skyparams.h 2020-07-09 21:13:21.000000000 +0000 @@ -37,9 +37,9 @@ std::vector textures; bool clouds; SkyColor sky_color; - video::SColor sun_tint; - video::SColor moon_tint; - std::string tint_type; + video::SColor fog_sun_tint; + video::SColor fog_moon_tint; + std::string fog_tint_type; }; struct SunParams @@ -76,12 +76,12 @@ { SkyColor sky; // Horizon colors - sky.day_horizon = video::SColor(255, 155, 193, 240); + sky.day_horizon = video::SColor(255, 144, 211, 246); sky.indoors = video::SColor(255, 100, 100, 100); sky.dawn_horizon = video::SColor(255, 186, 193, 240); sky.night_horizon = video::SColor(255, 64, 144, 255); // Sky colors - sky.day_sky = video::SColor(255, 140, 186, 250); + sky.day_sky = video::SColor(255, 97, 181, 245); sky.dawn_sky = video::SColor(255, 180, 186, 250); sky.night_sky = video::SColor(255, 0, 107, 255); return sky; diff -Nru minetest-5.2.0/src/staticobject.cpp minetest-5.3.0/src/staticobject.cpp --- minetest-5.2.0/src/staticobject.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/staticobject.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -19,7 +19,7 @@ #include "staticobject.h" #include "util/serialize.h" -#include "content_sao.h" +#include "server/serveractiveobject.h" StaticObject::StaticObject(const ServerActiveObject *s_obj, const v3f &pos_): type(s_obj->getType()), diff -Nru minetest-5.2.0/src/texture_override.cpp minetest-5.3.0/src/texture_override.cpp --- minetest-5.2.0/src/texture_override.cpp 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/texture_override.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,120 @@ +/* +Minetest +Copyright (C) 2020 Hugues Ross + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "texture_override.h" + +#include "log.h" +#include "util/string.h" +#include +#include + +TextureOverrideSource::TextureOverrideSource(std::string filepath) +{ + std::ifstream infile(filepath.c_str()); + std::string line; + int line_index = 0; + while (std::getline(infile, line)) { + line_index++; + + // Also trim '\r' on DOS-style files + line = trim(line); + + // Ignore empty lines and comments + if (line.empty() || line[0] == '#') + continue; + + std::vector splitted = str_split(line, ' '); + if (splitted.size() != 3) { + warningstream << filepath << ":" << line_index + << " Syntax error in texture override \"" << line + << "\": Expected 3 arguments, got " << splitted.size() + << std::endl; + continue; + } + + TextureOverride texture_override = {}; + texture_override.id = splitted[0]; + texture_override.texture = splitted[2]; + + // Parse the target mask + std::vector targets = str_split(splitted[1], ','); + for (const std::string &target : targets) { + if (target == "top") + texture_override.target |= static_cast(OverrideTarget::TOP); + else if (target == "bottom") + texture_override.target |= static_cast(OverrideTarget::BOTTOM); + else if (target == "left") + texture_override.target |= static_cast(OverrideTarget::LEFT); + else if (target == "right") + texture_override.target |= static_cast(OverrideTarget::RIGHT); + else if (target == "front") + texture_override.target |= static_cast(OverrideTarget::FRONT); + else if (target == "back") + texture_override.target |= static_cast(OverrideTarget::BACK); + else if (target == "inventory") + texture_override.target |= static_cast(OverrideTarget::INVENTORY); + else if (target == "wield") + texture_override.target |= static_cast(OverrideTarget::WIELD); + else if (target == "sides") + texture_override.target |= static_cast(OverrideTarget::SIDES); + else if (target == "all" || target == "*") + texture_override.target |= static_cast(OverrideTarget::ALL_FACES); + else { + // Report invalid target + warningstream << filepath << ":" << line_index + << " Syntax error in texture override \"" << line + << "\": Unknown target \"" << target << "\"" + << std::endl; + } + } + + // If there are no valid targets, skip adding this override + if (texture_override.target == static_cast(OverrideTarget::INVALID)) { + continue; + } + + m_overrides.push_back(texture_override); + } +} + +//! Get all overrides that apply to item definitions +std::vector TextureOverrideSource::getItemTextureOverrides() +{ + std::vector found_overrides; + + for (const TextureOverride &texture_override : m_overrides) { + if (texture_override.hasTarget(OverrideTarget::ITEM_TARGETS)) + found_overrides.push_back(texture_override); + } + + return found_overrides; +} + +//! Get all overrides that apply to node definitions +std::vector TextureOverrideSource::getNodeTileOverrides() +{ + std::vector found_overrides; + + for (const TextureOverride &texture_override : m_overrides) { + if (texture_override.hasTarget(OverrideTarget::ALL_FACES)) + found_overrides.push_back(texture_override); + } + + return found_overrides; +} diff -Nru minetest-5.2.0/src/texture_override.h minetest-5.3.0/src/texture_override.h --- minetest-5.2.0/src/texture_override.h 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/texture_override.h 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,72 @@ +/* +Minetest +Copyright (C) 2020 Hugues Ross + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "irrlichttypes.h" +#include +#include + +//! Bitmask enum specifying what a texture override should apply to +enum class OverrideTarget : u8 +{ + INVALID = 0, + TOP = 1 << 0, + BOTTOM = 1 << 1, + LEFT = 1 << 2, + RIGHT = 1 << 3, + FRONT = 1 << 4, + BACK = 1 << 5, + INVENTORY = 1 << 6, + WIELD = 1 << 7, + + SIDES = LEFT | RIGHT | FRONT | BACK, + ALL_FACES = TOP | BOTTOM | SIDES, + ITEM_TARGETS = INVENTORY | WIELD, +}; + +struct TextureOverride +{ + std::string id; + std::string texture; + u8 target; + + // Helper function for checking if an OverrideTarget is found in + // a TextureOverride without casting + inline bool hasTarget(OverrideTarget overrideTarget) const + { + return (target & static_cast(overrideTarget)) != 0; + } +}; + +//! Class that provides texture override information from a texture pack +class TextureOverrideSource +{ +public: + TextureOverrideSource(std::string filepath); + + //! Get all overrides that apply to item definitions + std::vector getItemTextureOverrides(); + + //! Get all overrides that apply to node definitions + std::vector getNodeTileOverrides(); + +private: + std::vector m_overrides; +}; diff -Nru minetest-5.2.0/src/tool.cpp minetest-5.3.0/src/tool.cpp --- minetest-5.2.0/src/tool.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/tool.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -130,7 +130,7 @@ root["punch_attack_uses"] = punch_attack_uses; Json::Value groupcaps_object; - for (auto groupcap : groupcaps) { + for (const auto &groupcap : groupcaps) { groupcap.second.toJson(groupcaps_object[groupcap.first]); } root["groupcaps"] = groupcaps_object; diff -Nru minetest-5.2.0/src/translation.cpp minetest-5.3.0/src/translation.cpp --- minetest-5.2.0/src/translation.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/translation.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -20,9 +20,18 @@ #include "translation.h" #include "log.h" #include "util/string.h" +#include -static Translations main_translations; -Translations *g_translations = &main_translations; + +#ifndef SERVER +// Client translations +Translations client_translations; +Translations *g_client_translations = &client_translations; +#endif + +// Per language server translations +std::unordered_map server_translations; +std::unordered_map *g_server_translations = &server_translations; Translations::~Translations() { diff -Nru minetest-5.2.0/src/translation.h minetest-5.3.0/src/translation.h --- minetest-5.2.0/src/translation.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/translation.h 2020-07-09 21:13:21.000000000 +0000 @@ -23,7 +23,10 @@ #include class Translations; -extern Translations *g_translations; +extern std::unordered_map *g_server_translations; +#ifndef SERVER +extern Translations *g_client_translations; +#endif class Translations { diff -Nru minetest-5.2.0/src/unittest/CMakeLists.txt minetest-5.3.0/src/unittest/CMakeLists.txt --- minetest-5.2.0/src/unittest/CMakeLists.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/unittest/CMakeLists.txt 2020-07-09 21:13:21.000000000 +0000 @@ -43,7 +43,7 @@ PARENT_SCOPE) set (TEST_WORLDDIR ${CMAKE_CURRENT_SOURCE_DIR}/test_world) -set (TEST_SUBGAME_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../games/minimal) +set (TEST_SUBGAME_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../games/devtest) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/test_config.h.in" diff -Nru minetest-5.2.0/src/unittest/test_ban.cpp minetest-5.3.0/src/unittest/test_ban.cpp --- minetest-5.2.0/src/unittest/test_ban.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/unittest/test_ban.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -61,6 +61,9 @@ reinitTestEnv(); TEST(testGetBanDescription); + + // Delete leftover files + reinitTestEnv(); } // This module is stateful due to disk writes, add helper to remove files diff -Nru minetest-5.2.0/src/unittest/test_collision.cpp minetest-5.3.0/src/unittest/test_collision.cpp --- minetest-5.2.0/src/unittest/test_collision.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/unittest/test_collision.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -50,38 +50,38 @@ aabb3f s(bx, by, bz, bx+1, by+1, bz+1); aabb3f m(bx-2, by, bz, bx-1, by+1, bz+1); v3f v(1, 0, 0); - f32 dtime = 0; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0); + f32 dtime = 1.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0); UASSERT(fabs(dtime - 1.000) < 0.001); } { aabb3f s(bx, by, bz, bx+1, by+1, bz+1); aabb3f m(bx-2, by, bz, bx-1, by+1, bz+1); v3f v(-1, 0, 0); - f32 dtime = 0; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == -1); + f32 dtime = 1.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == -1); } { aabb3f s(bx, by, bz, bx+1, by+1, bz+1); aabb3f m(bx-2, by+1.5, bz, bx-1, by+2.5, bz-1); v3f v(1, 0, 0); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == -1); + f32 dtime = 1.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == -1); } { aabb3f s(bx, by, bz, bx+1, by+1, bz+1); aabb3f m(bx-2, by-1.5, bz, bx-1.5, by+0.5, bz+1); v3f v(0.5, 0.1, 0); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0); + f32 dtime = 3.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0); UASSERT(fabs(dtime - 3.000) < 0.001); } { aabb3f s(bx, by, bz, bx+1, by+1, bz+1); aabb3f m(bx-2, by-1.5, bz, bx-1.5, by+0.5, bz+1); v3f v(0.5, 0.1, 0); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0); + f32 dtime = 3.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0); UASSERT(fabs(dtime - 3.000) < 0.001); } @@ -90,38 +90,38 @@ aabb3f s(bx, by, bz, bx+1, by+1, bz+1); aabb3f m(bx+2, by, bz, bx+3, by+1, bz+1); v3f v(-1, 0, 0); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0); + f32 dtime = 1.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0); UASSERT(fabs(dtime - 1.000) < 0.001); } { aabb3f s(bx, by, bz, bx+1, by+1, bz+1); aabb3f m(bx+2, by, bz, bx+3, by+1, bz+1); v3f v(1, 0, 0); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == -1); + f32 dtime = 1.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == -1); } { aabb3f s(bx, by, bz, bx+1, by+1, bz+1); aabb3f m(bx+2, by, bz+1.5, bx+3, by+1, bz+3.5); v3f v(-1, 0, 0); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == -1); + f32 dtime = 1.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == -1); } { aabb3f s(bx, by, bz, bx+1, by+1, bz+1); aabb3f m(bx+2, by-1.5, bz, bx+2.5, by-0.5, bz+1); v3f v(-0.5, 0.2, 0); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 1); // Y, not X! + f32 dtime = 2.5f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 1); // Y, not X! UASSERT(fabs(dtime - 2.500) < 0.001); } { aabb3f s(bx, by, bz, bx+1, by+1, bz+1); aabb3f m(bx+2, by-1.5, bz, bx+2.5, by-0.5, bz+1); v3f v(-0.5, 0.3, 0); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0); + f32 dtime = 2.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0); UASSERT(fabs(dtime - 2.000) < 0.001); } @@ -132,48 +132,48 @@ aabb3f s(bx, by, bz, bx+2, by+2, bz+2); aabb3f m(bx+2.3, by+2.29, bz+2.29, bx+4.2, by+4.2, bz+4.2); v3f v(-1./3, -1./3, -1./3); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0); + f32 dtime = 1.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0); UASSERT(fabs(dtime - 0.9) < 0.001); } { aabb3f s(bx, by, bz, bx+2, by+2, bz+2); aabb3f m(bx+2.29, by+2.3, bz+2.29, bx+4.2, by+4.2, bz+4.2); v3f v(-1./3, -1./3, -1./3); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 1); + f32 dtime = 1.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 1); UASSERT(fabs(dtime - 0.9) < 0.001); } { aabb3f s(bx, by, bz, bx+2, by+2, bz+2); aabb3f m(bx+2.29, by+2.29, bz+2.3, bx+4.2, by+4.2, bz+4.2); v3f v(-1./3, -1./3, -1./3); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 2); + f32 dtime = 1.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 2); UASSERT(fabs(dtime - 0.9) < 0.001); } { aabb3f s(bx, by, bz, bx+2, by+2, bz+2); aabb3f m(bx-4.2, by-4.2, bz-4.2, bx-2.3, by-2.29, bz-2.29); v3f v(1./7, 1./7, 1./7); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0); + f32 dtime = 17.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0); UASSERT(fabs(dtime - 16.1) < 0.001); } { aabb3f s(bx, by, bz, bx+2, by+2, bz+2); aabb3f m(bx-4.2, by-4.2, bz-4.2, bx-2.29, by-2.3, bz-2.29); v3f v(1./7, 1./7, 1./7); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 1); + f32 dtime = 17.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 1); UASSERT(fabs(dtime - 16.1) < 0.001); } { aabb3f s(bx, by, bz, bx+2, by+2, bz+2); aabb3f m(bx-4.2, by-4.2, bz-4.2, bx-2.29, by-2.29, bz-2.3); v3f v(1./7, 1./7, 1./7); - f32 dtime; - UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 2); + f32 dtime = 17.0f; + UASSERT(axisAlignedCollision(s, m, v, &dtime) == 2); UASSERT(fabs(dtime - 16.1) < 0.001); } } diff -Nru minetest-5.2.0/src/unittest/test_objdef.cpp minetest-5.3.0/src/unittest/test_objdef.cpp --- minetest-5.2.0/src/unittest/test_objdef.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/unittest/test_objdef.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -32,6 +32,7 @@ void testHandles(); void testAddGetSetClear(); + void testClone(); }; static TestObjDef g_test_instance; @@ -40,10 +41,42 @@ { TEST(testHandles); TEST(testAddGetSetClear); + TEST(testClone); } //////////////////////////////////////////////////////////////////////////////// +/* Minimal implementation of ObjDef and ObjDefManager subclass */ + +class MyObjDef : public ObjDef +{ +public: + ObjDef *clone() const + { + auto def = new MyObjDef(); + ObjDef::cloneTo(def); + def->testvalue = testvalue; + return def; + }; + + u32 testvalue; +}; + +class MyObjDefManager : public ObjDefManager +{ +public: + MyObjDefManager(ObjDefType type) : ObjDefManager(NULL, type){}; + MyObjDefManager *clone() const + { + auto mgr = new MyObjDefManager(); + ObjDefManager::cloneTo(mgr); + return mgr; + }; + +protected: + MyObjDefManager(){}; +}; + void TestObjDef::testHandles() { u32 uid = 0; @@ -69,25 +102,25 @@ UASSERTEQ(ObjDefType, testmgr.getType(), OBJDEF_GENERIC); - obj0 = new ObjDef; + obj0 = new MyObjDef; obj0->name = "foobar"; hObj0 = testmgr.add(obj0); UASSERT(hObj0 != OBJDEF_INVALID_HANDLE); UASSERTEQ(u32, obj0->index, 0); - obj1 = new ObjDef; + obj1 = new MyObjDef; obj1->name = "FooBaz"; hObj1 = testmgr.add(obj1); UASSERT(hObj1 != OBJDEF_INVALID_HANDLE); UASSERTEQ(u32, obj1->index, 1); - obj2 = new ObjDef; + obj2 = new MyObjDef; obj2->name = "asdf"; hObj2 = testmgr.add(obj2); UASSERT(hObj2 != OBJDEF_INVALID_HANDLE); UASSERTEQ(u32, obj2->index, 2); - obj3 = new ObjDef; + obj3 = new MyObjDef; obj3->name = "foobaz"; hObj3 = testmgr.add(obj3); UASSERT(hObj3 == OBJDEF_INVALID_HANDLE); @@ -104,3 +137,38 @@ testmgr.clear(); UASSERTEQ(size_t, testmgr.getNumObjects(), 0); } + +void TestObjDef::testClone() +{ + MyObjDefManager testmgr(OBJDEF_GENERIC); + ObjDefManager *mgrcopy; + MyObjDef *obj, *temp2; + ObjDef *temp1; + ObjDefHandle hObj; + + obj = new MyObjDef; + obj->testvalue = 0xee00ff11; + hObj = testmgr.add(obj); + UASSERT(hObj != OBJDEF_INVALID_HANDLE); + + mgrcopy = testmgr.clone(); + UASSERT(mgrcopy); + UASSERTEQ(ObjDefType, mgrcopy->getType(), testmgr.getType()); + UASSERTEQ(size_t, mgrcopy->getNumObjects(), testmgr.getNumObjects()); + + // 1) check that the same handle is still valid on the copy + temp1 = mgrcopy->get(hObj); + UASSERT(temp1); + UASSERT(temp1 == mgrcopy->getRaw(0)); + // 2) check that the copy has the correct C++ class + temp2 = dynamic_cast(temp1); + UASSERT(temp2); + // 3) check that it was correctly copied + UASSERTEQ(u32, obj->testvalue, temp2->testvalue); + // 4) check that it was copied AT ALL (not the same) + UASSERT(obj != temp2); + + testmgr.clear(); + mgrcopy->clear(); + delete mgrcopy; +} diff -Nru minetest-5.2.0/src/unittest/test_player.cpp minetest-5.3.0/src/unittest/test_player.cpp --- minetest-5.2.0/src/unittest/test_player.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/unittest/test_player.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -21,7 +21,6 @@ #include "exceptions.h" #include "remoteplayer.h" -#include "content_sao.h" #include "server.h" class TestPlayer : public TestBase diff -Nru minetest-5.2.0/src/unittest/test_serveractiveobjectmgr.cpp minetest-5.3.0/src/unittest/test_serveractiveobjectmgr.cpp --- minetest-5.2.0/src/unittest/test_serveractiveobjectmgr.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/unittest/test_serveractiveobjectmgr.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -148,14 +148,26 @@ saomgr.registerObject(new TestServerActiveObject(p)); } - std::vector result; - saomgr.getObjectsInsideRadius(v3f(), 50, result); + std::vector result; + saomgr.getObjectsInsideRadius(v3f(), 50, result, nullptr); UASSERTCMP(int, ==, result.size(), 1); result.clear(); - saomgr.getObjectsInsideRadius(v3f(), 750, result); + saomgr.getObjectsInsideRadius(v3f(), 750, result, nullptr); UASSERTCMP(int, ==, result.size(), 2); + result.clear(); + saomgr.getObjectsInsideRadius(v3f(), 750000, result, nullptr); + UASSERTCMP(int, ==, result.size(), 5); + + result.clear(); + auto include_obj_cb = [](ServerActiveObject *obj) { + return (obj->getBasePosition().X != 10); + }; + + saomgr.getObjectsInsideRadius(v3f(), 750000, result, include_obj_cb); + UASSERTCMP(int, ==, result.size(), 4); + clearSAOMgr(&saomgr); } diff -Nru minetest-5.2.0/src/unittest/test_servermodmanager.cpp minetest-5.3.0/src/unittest/test_servermodmanager.cpp --- minetest-5.2.0/src/unittest/test_servermodmanager.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/unittest/test_servermodmanager.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -88,7 +88,7 @@ { std::string path = std::string(TEST_WORLDDIR) + DIR_DELIM + "world.mt"; Settings world_config; - world_config.set("gameid", "minimal"); + world_config.set("gameid", "devtest"); UASSERTEQ(bool, world_config.updateConfigFile(path.c_str()), true); ServerModManager sm(TEST_WORLDDIR); } @@ -118,10 +118,10 @@ const auto &mods = sm.getMods(); UASSERTEQ(bool, mods.empty(), false); - // Ensure we found default mod inside the test folder + // Ensure we found basenodes mod (part of devtest) bool default_found = false; for (const auto &m : mods) { - if (m.name == "default") + if (m.name == "basenodes") default_found = true; // Verify if paths are not empty @@ -135,7 +135,7 @@ { ServerModManager sm(std::string(TEST_WORLDDIR)); UASSERTEQ(const ModSpec *, sm.getModSpec("wrongmod"), NULL); - UASSERT(sm.getModSpec("default") != NULL); + UASSERT(sm.getModSpec("basenodes") != NULL); } void TestServerModManager::testGetModNamesWrongDir() @@ -152,7 +152,7 @@ std::vector result; sm.getModNames(result); UASSERTEQ(bool, result.empty(), false); - UASSERT(std::find(result.begin(), result.end(), "default") != result.end()); + UASSERT(std::find(result.begin(), result.end(), "basenodes") != result.end()); } void TestServerModManager::testGetModMediaPathsWrongDir() diff -Nru minetest-5.2.0/src/util/CMakeLists.txt minetest-5.3.0/src/util/CMakeLists.txt --- minetest-5.2.0/src/util/CMakeLists.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/util/CMakeLists.txt 2020-07-09 21:13:21.000000000 +0000 @@ -5,6 +5,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/directiontables.cpp ${CMAKE_CURRENT_SOURCE_DIR}/enriched_string.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ieee_float.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/metricsbackend.cpp ${CMAKE_CURRENT_SOURCE_DIR}/numeric.cpp ${CMAKE_CURRENT_SOURCE_DIR}/pointedthing.cpp ${CMAKE_CURRENT_SOURCE_DIR}/quicktune.cpp diff -Nru minetest-5.2.0/src/util/md32_common.h minetest-5.3.0/src/util/md32_common.h --- minetest-5.2.0/src/util/md32_common.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/util/md32_common.h 2020-07-09 21:13:21.000000000 +0000 @@ -109,6 +109,8 @@ * */ +#pragma once + #if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) # error "DATA_ORDER must be defined!" #endif diff -Nru minetest-5.2.0/src/util/metricsbackend.cpp minetest-5.3.0/src/util/metricsbackend.cpp --- minetest-5.2.0/src/util/metricsbackend.cpp 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/util/metricsbackend.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,140 @@ +/* +Minetest +Copyright (C) 2013-2020 Minetest core developers team + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "metricsbackend.h" +#if USE_PROMETHEUS +#include +#include +#include +#include +#include "log.h" +#include "settings.h" +#endif + +MetricCounterPtr MetricsBackend::addCounter( + const std::string &name, const std::string &help_str) +{ + return std::make_shared(name, help_str); +} + +MetricGaugePtr MetricsBackend::addGauge( + const std::string &name, const std::string &help_str) +{ + return std::make_shared(name, help_str); +} + +#if USE_PROMETHEUS + +class PrometheusMetricCounter : public MetricCounter +{ +public: + PrometheusMetricCounter() = delete; + + PrometheusMetricCounter(const std::string &name, const std::string &help_str, + std::shared_ptr registry) : + MetricCounter(), + m_family(prometheus::BuildCounter() + .Name(name) + .Help(help_str) + .Register(*registry)), + m_counter(m_family.Add({})) + { + } + + virtual ~PrometheusMetricCounter() {} + + virtual void increment(double number) { m_counter.Increment(number); } + virtual double get() const { return m_counter.Value(); } + +private: + prometheus::Family &m_family; + prometheus::Counter &m_counter; +}; + +class PrometheusMetricGauge : public MetricGauge +{ +public: + PrometheusMetricGauge() = delete; + + PrometheusMetricGauge(const std::string &name, const std::string &help_str, + std::shared_ptr registry) : + MetricGauge(), + m_family(prometheus::BuildGauge() + .Name(name) + .Help(help_str) + .Register(*registry)), + m_gauge(m_family.Add({})) + { + } + + virtual ~PrometheusMetricGauge() {} + + virtual void increment(double number) { m_gauge.Increment(number); } + virtual void decrement(double number) { m_gauge.Decrement(number); } + virtual void set(double number) { m_gauge.Set(number); } + virtual double get() const { return m_gauge.Value(); } + +private: + prometheus::Family &m_family; + prometheus::Gauge &m_gauge; +}; + +class PrometheusMetricsBackend : public MetricsBackend +{ +public: + PrometheusMetricsBackend(const std::string &addr) : + MetricsBackend(), m_exposer(std::unique_ptr( + new prometheus::Exposer(addr))), + m_registry(std::make_shared()) + { + m_exposer->RegisterCollectable(m_registry); + } + + virtual ~PrometheusMetricsBackend() {} + + virtual MetricCounterPtr addCounter( + const std::string &name, const std::string &help_str); + virtual MetricGaugePtr addGauge( + const std::string &name, const std::string &help_str); + +private: + std::unique_ptr m_exposer; + std::shared_ptr m_registry; +}; + +MetricCounterPtr PrometheusMetricsBackend::addCounter( + const std::string &name, const std::string &help_str) +{ + return std::make_shared(name, help_str, m_registry); +} + +MetricGaugePtr PrometheusMetricsBackend::addGauge( + const std::string &name, const std::string &help_str) +{ + return std::make_shared(name, help_str, m_registry); +} + +MetricsBackend *createPrometheusMetricsBackend() +{ + std::string addr; + g_settings->getNoEx("prometheus_listener_address", addr); + return new PrometheusMetricsBackend(addr); +} + +#endif diff -Nru minetest-5.2.0/src/util/metricsbackend.h minetest-5.3.0/src/util/metricsbackend.h --- minetest-5.2.0/src/util/metricsbackend.h 1970-01-01 00:00:00.000000000 +0000 +++ minetest-5.3.0/src/util/metricsbackend.h 2020-07-09 21:13:21.000000000 +0000 @@ -0,0 +1,140 @@ +/* +Minetest +Copyright (C) 2013-2020 Minetest core developers team + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once +#include +#include "config.h" +#include "util/thread.h" + +class MetricCounter +{ +public: + MetricCounter() = default; + + virtual ~MetricCounter() {} + + virtual void increment(double number = 1.0) = 0; + virtual double get() const = 0; +}; + +typedef std::shared_ptr MetricCounterPtr; + +class SimpleMetricCounter : public MetricCounter +{ +public: + SimpleMetricCounter() = delete; + + virtual ~SimpleMetricCounter() {} + + SimpleMetricCounter(const std::string &name, const std::string &help_str) : + MetricCounter(), m_name(name), m_help_str(help_str), + m_counter(0.0) + { + } + + virtual void increment(double number) + { + MutexAutoLock lock(m_mutex); + m_counter += number; + } + virtual double get() const + { + MutexAutoLock lock(m_mutex); + return m_counter; + } + +private: + std::string m_name; + std::string m_help_str; + + mutable std::mutex m_mutex; + double m_counter; +}; + +class MetricGauge +{ +public: + MetricGauge() = default; + virtual ~MetricGauge() {} + + virtual void increment(double number = 1.0) = 0; + virtual void decrement(double number = 1.0) = 0; + virtual void set(double number) = 0; + virtual double get() const = 0; +}; + +typedef std::shared_ptr MetricGaugePtr; + +class SimpleMetricGauge : public MetricGauge +{ +public: + SimpleMetricGauge() = delete; + + SimpleMetricGauge(const std::string &name, const std::string &help_str) : + MetricGauge(), m_name(name), m_help_str(help_str), m_gauge(0.0) + { + } + + virtual ~SimpleMetricGauge() {} + + virtual void increment(double number) + { + MutexAutoLock lock(m_mutex); + m_gauge += number; + } + virtual void decrement(double number) + { + MutexAutoLock lock(m_mutex); + m_gauge -= number; + } + virtual void set(double number) + { + MutexAutoLock lock(m_mutex); + m_gauge = number; + } + virtual double get() const + { + MutexAutoLock lock(m_mutex); + return m_gauge; + } + +private: + std::string m_name; + std::string m_help_str; + + mutable std::mutex m_mutex; + double m_gauge; +}; + +class MetricsBackend +{ +public: + MetricsBackend() = default; + + virtual ~MetricsBackend() {} + + virtual MetricCounterPtr addCounter( + const std::string &name, const std::string &help_str); + virtual MetricGaugePtr addGauge( + const std::string &name, const std::string &help_str); +}; + +#if USE_PROMETHEUS +MetricsBackend *createPrometheusMetricsBackend(); +#endif diff -Nru minetest-5.2.0/src/util/numeric.h minetest-5.3.0/src/util/numeric.h --- minetest-5.2.0/src/util/numeric.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/util/numeric.h 2020-07-09 21:13:21.000000000 +0000 @@ -24,6 +24,7 @@ #include "irr_v2d.h" #include "irr_v3d.h" #include "irr_aabb3d.h" +#include "SColor.h" #include #define rangelim(d, min, max) ((d) < (min) ? (min) : ((d) > (max) ? (max) : (d))) @@ -432,3 +433,12 @@ { return getPitchYawRollRad(m) * core::RADTODEG64; } + +// Muliply the RGB value of a color linearly, and clamp to black/white +inline irr::video::SColor multiplyColorValue(const irr::video::SColor &color, float mod) +{ + return irr::video::SColor(color.getAlpha(), + core::clamp(color.getRed() * mod, 0, 255), + core::clamp(color.getGreen() * mod, 0, 255), + core::clamp(color.getBlue() * mod, 0, 255)); +} diff -Nru minetest-5.2.0/src/util/serialize.cpp minetest-5.3.0/src/util/serialize.cpp --- minetest-5.2.0/src/util/serialize.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/util/serialize.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -110,6 +110,7 @@ if (plain.size() > STRING_MAX_LEN) throw SerializationError("String too long for serializeString"); + s.reserve(2 + plain.size()); writeU16((u8 *)&buf[0], plain.size()); s.append(buf, 2); @@ -131,13 +132,11 @@ if (s_size == 0) return s; - Buffer buf2(s_size); - is.read(&buf2[0], s_size); + s.resize(s_size); + is.read(&s[0], s_size); if (is.gcount() != s_size) throw SerializationError("deSerializeString: couldn't read all chars"); - s.reserve(s_size); - s.append(&buf2[0], s_size); return s; } @@ -152,6 +151,7 @@ if (plain.size() > WIDE_STRING_MAX_LEN) throw SerializationError("String too long for serializeWideString"); + s.reserve(2 + 2 * plain.size()); writeU16((u8 *)buf, plain.size()); s.append(buf, 2); @@ -196,13 +196,14 @@ std::string serializeLongString(const std::string &plain) { + std::string s; char buf[4]; if (plain.size() > LONG_STRING_MAX_LEN) throw SerializationError("String too long for serializeLongString"); + s.reserve(4 + plain.size()); writeU32((u8*)&buf[0], plain.size()); - std::string s; s.append(buf, 4); s.append(plain); return s; @@ -227,13 +228,11 @@ "string too long: " + itos(s_size) + " bytes"); } - Buffer buf2(s_size); - is.read(&buf2[0], s_size); + s.resize(s_size); + is.read(&s[0], s_size); if ((u32)is.gcount() != s_size) throw SerializationError("deSerializeLongString: couldn't read all chars"); - s.reserve(s_size); - s.append(&buf2[0], s_size); return s; } diff -Nru minetest-5.2.0/src/util/serialize.h minetest-5.3.0/src/util/serialize.h --- minetest-5.2.0/src/util/serialize.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/util/serialize.h 2020-07-09 21:13:21.000000000 +0000 @@ -52,8 +52,8 @@ // not represent the full range, but rather the largest safe range, of values on // all supported architectures. Note: This definition makes assumptions on // platform float-to-int conversion behavior. -#define F1000_MIN ((float)(s32)((-0x7FFFFFFF - 1) / FIXEDPOINT_FACTOR)) -#define F1000_MAX ((float)(s32)((0x7FFFFFFF) / FIXEDPOINT_FACTOR)) +#define F1000_MIN ((float)(s32)((float)(-0x7FFFFFFF - 1) / FIXEDPOINT_FACTOR)) +#define F1000_MAX ((float)(s32)((float)(0x7FFFFFFF) / FIXEDPOINT_FACTOR)) #define STRING_MAX_LEN 0xFFFF #define WIDE_STRING_MAX_LEN 0xFFFF diff -Nru minetest-5.2.0/src/util/string.cpp minetest-5.3.0/src/util/string.cpp --- minetest-5.2.0/src/util/string.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/util/string.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -209,6 +209,9 @@ } std::wstring narrow_to_wide(const std::string &mbs) { +#ifdef __ANDROID__ + return utf8_to_wide(mbs); +#else size_t wcl = mbs.size(); Buffer wcs(wcl + 1); size_t len = mbstowcs(*wcs, mbs.c_str(), wcl); @@ -216,11 +219,15 @@ return L""; wcs[len] = 0; return *wcs; +#endif } std::string wide_to_narrow(const std::wstring &wcs) { +#ifdef __ANDROID__ + return wide_to_utf8(wcs); +#else size_t mbl = wcs.size() * 4; SharedBuffer mbs(mbl+1); size_t len = wcstombs(*mbs, wcs.c_str(), mbl); @@ -229,6 +236,7 @@ mbs[len] = 0; return *mbs; +#endif } @@ -685,10 +693,12 @@ * before filling it again. */ -void translate_all(const std::wstring &s, size_t &i, std::wstring &res); +void translate_all(const std::wstring &s, size_t &i, + Translations *translations, std::wstring &res); -void translate_string(const std::wstring &s, const std::wstring &textdomain, - size_t &i, std::wstring &res) { +void translate_string(const std::wstring &s, Translations *translations, + const std::wstring &textdomain, size_t &i, std::wstring &res) +{ std::wostringstream output; std::vector args; int arg_number = 1; @@ -742,7 +752,7 @@ if (arg_number >= 10) { errorstream << "Ignoring too many arguments to translation" << std::endl; std::wstring arg; - translate_all(s, i, arg); + translate_all(s, i, translations, arg); args.push_back(arg); continue; } @@ -750,7 +760,7 @@ output << arg_number; ++arg_number; std::wstring arg; - translate_all(s, i, arg); + translate_all(s, i, translations, arg); args.push_back(arg); } else { // This is an escape sequence *inside* the template string to translate itself. @@ -759,8 +769,13 @@ } } + std::wstring toutput; // Translate the template. - std::wstring toutput = g_translations->getTranslation(textdomain, output.str()); + if (translations != nullptr) + toutput = translations->getTranslation( + textdomain, output.str()); + else + toutput = output.str(); // Put back the arguments in the translated template. std::wostringstream result; @@ -794,7 +809,9 @@ res = result.str(); } -void translate_all(const std::wstring &s, size_t &i, std::wstring &res) { +void translate_all(const std::wstring &s, size_t &i, + Translations *translations, std::wstring &res) +{ std::wostringstream output; while (i < s.length()) { // Not an escape sequence: just add the character. @@ -843,7 +860,7 @@ if (parts.size() > 1) textdomain = parts[1]; std::wstring translated; - translate_string(s, textdomain, i, translated); + translate_string(s, translations, textdomain, i, translated); output << translated; } else { // Another escape sequence, such as colors. Preserve it. @@ -854,9 +871,21 @@ res = output.str(); } -std::wstring translate_string(const std::wstring &s) { +// Translate string server side +std::wstring translate_string(const std::wstring &s, Translations *translations) +{ size_t i = 0; std::wstring res; - translate_all(s, i, res); + translate_all(s, i, translations, res); return res; } + +// Translate string client side +std::wstring translate_string(const std::wstring &s) +{ +#ifdef SERVER + return translate_string(s, nullptr); +#else + return translate_string(s, g_client_translations); +#endif +} diff -Nru minetest-5.2.0/src/util/string.h minetest-5.3.0/src/util/string.h --- minetest-5.2.0/src/util/string.h 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/util/string.h 2020-07-09 21:13:21.000000000 +0000 @@ -31,6 +31,8 @@ #include #include +class Translations; + #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) @@ -650,6 +652,8 @@ return tokens; } +std::wstring translate_string(const std::wstring &s, Translations *translations); + std::wstring translate_string(const std::wstring &s); inline std::wstring unescape_translate(const std::wstring &s) { diff -Nru minetest-5.2.0/src/version.cpp minetest-5.3.0/src/version.cpp --- minetest-5.2.0/src/version.cpp 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/src/version.cpp 2020-07-09 21:13:21.000000000 +0000 @@ -20,10 +20,7 @@ #include "version.h" #include "config.h" -#if defined(__ANDROID__) - #include "android_version.h" - #include "android_version_githash.h" -#elif defined(USE_CMAKE_CONFIG_H) +#if USE_CMAKE_CONFIG_H #include "cmake_config_githash.h" #endif @@ -33,4 +30,16 @@ const char *g_version_string = VERSION_STRING; const char *g_version_hash = VERSION_GITHASH; -const char *g_build_info = BUILD_INFO; +const char *g_build_info = + "BUILD_TYPE=" BUILD_TYPE "\n" + "RUN_IN_PLACE=" STR(RUN_IN_PLACE) "\n" + "USE_GETTEXT=" STR(USE_GETTEXT) "\n" + "USE_SOUND=" STR(USE_SOUND) "\n" + "USE_CURL=" STR(USE_CURL) "\n" + "USE_FREETYPE=" STR(USE_FREETYPE) "\n" + "USE_LUAJIT=" STR(USE_LUAJIT) "\n" + "STATIC_SHAREDIR=" STR(STATIC_SHAREDIR) +#if USE_GETTEXT && defined(STATIC_LOCALEDIR) + "\n" "STATIC_LOCALEDIR=" STR(STATIC_LOCALEDIR) +#endif +; Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/textures/base/pack/bubble_gone.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/textures/base/pack/bubble_gone.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/textures/base/pack/end_icon.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/textures/base/pack/end_icon.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/textures/base/pack/heart_gone.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/textures/base/pack/heart_gone.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/textures/base/pack/next_icon.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/textures/base/pack/next_icon.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/textures/base/pack/plus.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/textures/base/pack/plus.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/textures/base/pack/prev_icon.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/textures/base/pack/prev_icon.png differ Binary files /tmp/tmpfN7tCC/heaZZjpnBb/minetest-5.2.0/textures/base/pack/start_icon.png and /tmp/tmpfN7tCC/DlwpBMAfAe/minetest-5.3.0/textures/base/pack/start_icon.png differ diff -Nru minetest-5.2.0/.travis.yml minetest-5.3.0/.travis.yml --- minetest-5.2.0/.travis.yml 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/.travis.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -language: cpp -before_install: ./util/travis/before_install.sh -script: ./util/travis/script.sh -os: linux -dist: bionic -group: edge -notifications: - email: false -matrix: - fast_finish: true - include: - - - env: CLANG_FORMAT=clang-format-8 - compiler: clang - os: linux - addons: - apt: - packages: ['clang-format-8'] - - - name: "Builtin Luacheck and Unit Tests" - language: generic - compiler: null - os: linux - addons: - apt: - packages: - - luarocks - before_install: - - luarocks install --local luacheck - - luarocks install --local busted - script: - - $HOME/.luarocks/bin/luacheck builtin - - $HOME/.luarocks/bin/busted builtin - - - env: CLANG_TIDY=clang-tidy-8 - compiler: clang - os: linux - script: ./util/travis/clangtidy.sh - addons: - apt: - packages: ['clang-tidy-8'] - - - name: "MinGW cross-compiler (32-bit)" - env: PLATFORM=Win32 - compiler: gcc - os: linux - - - name: "MinGW cross-compiler (64-bit)" - env: PLATFORM=Win64 - compiler: gcc - os: linux - -# - env: PLATFORM=Unix -# compiler: clang -# os: osx -# osx_image: xcode8 - - - env: PLATFORM=Unix COMPILER=gcc-6 - compiler: gcc - os: linux - addons: - apt: - packages: ['gcc-6', 'g++-6'] - - - env: PLATFORM=Unix COMPILER=gcc-8 - compiler: gcc - os: linux - addons: - apt: - packages: ['gcc-8', 'g++-8'] - - - env: PLATFORM=Unix COMPILER=clang-3.9 - compiler: clang - os: linux - addons: - apt: - packages: ['clang-3.9'] - - - env: PLATFORM=Unix COMPILER=clang-9 - compiler: clang - os: linux - addons: - apt: - packages: ['clang-9'] - - - env: PLATFORM=Unix COMPILER=clang-9 FREETYPE=0 - compiler: clang - os: linux - addons: - apt: - packages: ['clang-9'] - - - env: PLATFORM=Unix COMPILER=clang-9 VALGRIND=1 - compiler: clang - os: linux - addons: - apt: - packages: ['valgrind', 'clang-9'] diff -Nru minetest-5.2.0/util/buildbot/buildwin32.sh minetest-5.3.0/util/buildbot/buildwin32.sh --- minetest-5.2.0/util/buildbot/buildwin32.sh 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/buildbot/buildwin32.sh 2020-07-09 21:13:21.000000000 +0000 @@ -86,22 +86,21 @@ # Get minetest cd $builddir if [ ! "x$EXISTING_MINETEST_DIR" = "x" ]; then - ln -s $EXISTING_MINETEST_DIR $CORE_NAME + cd /$EXISTING_MINETEST_DIR # must be absolute path else [ -d $CORE_NAME ] && (cd $CORE_NAME && git pull) || (git clone -b $CORE_BRANCH $CORE_GIT) + cd $CORE_NAME fi -cd $CORE_NAME git_hash=$(git rev-parse --short HEAD) # Get minetest_game -cd games if [ "x$NO_MINETEST_GAME" = "x" ]; then + cd games [ -d $GAME_NAME ] && (cd $GAME_NAME && git pull) || (git clone -b $GAME_BRANCH $GAME_GIT) + cd .. fi -cd ../.. # Build the thing -cd $CORE_NAME [ -d _build ] && rm -Rf _build/ mkdir _build cd _build diff -Nru minetest-5.2.0/util/buildbot/buildwin64.sh minetest-5.3.0/util/buildbot/buildwin64.sh --- minetest-5.2.0/util/buildbot/buildwin64.sh 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/buildbot/buildwin64.sh 2020-07-09 21:13:21.000000000 +0000 @@ -78,22 +78,21 @@ # Get minetest cd $builddir if [ ! "x$EXISTING_MINETEST_DIR" = "x" ]; then - ln -s $EXISTING_MINETEST_DIR $CORE_NAME + cd /$EXISTING_MINETEST_DIR # must be absolute path else [ -d $CORE_NAME ] && (cd $CORE_NAME && git pull) || (git clone -b $CORE_BRANCH $CORE_GIT) + cd $CORE_NAME fi -cd $CORE_NAME git_hash=$(git rev-parse --short HEAD) # Get minetest_game -cd games if [ "x$NO_MINETEST_GAME" = "x" ]; then + cd games [ -d $GAME_NAME ] && (cd $GAME_NAME && git pull) || (git clone -b $GAME_BRANCH $GAME_GIT) + cd .. fi -cd ../.. # Build the thing -cd $CORE_NAME [ -d _build ] && rm -Rf _build/ mkdir _build cd _build diff -Nru minetest-5.2.0/util/bump_version.sh minetest-5.3.0/util/bump_version.sh --- minetest-5.2.0/util/bump_version.sh 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/bump_version.sh 2020-07-09 21:13:21.000000000 +0000 @@ -23,7 +23,7 @@ perform_release() { sed -i -re "s/^set\(DEVELOPMENT_BUILD TRUE\)$/set(DEVELOPMENT_BUILD FALSE)/" CMakeLists.txt - sed -i -re "s/versionCode [0-9]+$/versionCode $NEW_ANDROID_VERSION_CODE/" build/android/build.gradle + sed -i -re "s/\"versionCode\", [0-9]+/\"versionCode\", $NEW_ANDROID_VERSION_CODE/" build/android/build.gradle sed -i '/\ util/buildbot/toolchain_mingw64.cmake - sudo tar -xaf mingw.tar.xz -C /usr -fi diff -Nru minetest-5.2.0/util/travis/clang-format-whitelist.txt minetest-5.3.0/util/travis/clang-format-whitelist.txt --- minetest-5.2.0/util/travis/clang-format-whitelist.txt 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/travis/clang-format-whitelist.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,502 +0,0 @@ -src/activeobject.h -src/ban.cpp -src/camera.cpp -src/camera.h -src/chat.cpp -src/chat.h -src/chat_interface.h -src/client/clientlauncher.cpp -src/client/clientlauncher.h -src/client/sound_openal.cpp -src/client.cpp -src/clientenvironment.cpp -src/clientenvironment.h -src/client/gameui.cpp -src/client.h -src/client/hud.cpp -src/client/hud.h -src/clientiface.cpp -src/clientiface.h -src/client/joystick_controller.cpp -src/client/joystick_controller.h -src/clientmap.cpp -src/clientmap.h -src/clientmedia.cpp -src/clientmedia.h -src/clientobject.cpp -src/clientobject.h -src/client/render/core.cpp -src/client/renderingengine.cpp -src/client/render/interlaced.cpp -src/client/render/plain.cpp -src/client/render/sidebyside.cpp -src/client/render/stereo.cpp -src/client/tile.cpp -src/client/tile.h -src/client/fontengine.h -src/client/clientenvironment.cpp -src/client/mapblock_mesh.cpp -src/client/sound_openal.h -src/client/clouds.cpp -src/client/fontengine.cpp -src/client/camera.h -src/client/hud.cpp -src/client/clientmap.cpp -src/client/sound_openal.cpp -src/client/minimap.h -src/client/content_cao.cpp -src/client/localplayer.h -src/client/mapblock_mesh.h -src/client/mesh.cpp -src/client/sound.cpp -src/client/guiscalingfilter.cpp -src/client/content_cso.cpp -src/client/gameui.cpp -src/client/wieldmesh.cpp -src/client/clientmedia.h -src/client/game.cpp -src/client/keys.h -src/client/client.h -src/client/shader.cpp -src/client/clientmap.h -src/client/inputhandler.h -src/client/content_mapblock.h -src/client/game.h -src/client/mesh.h -src/client/camera.cpp -src/client/sky.h -src/client/mesh_generator_thread.cpp -src/client/guiscalingfilter.h -src/client/clientobject.cpp -src/client/tile.cpp -src/client/hud.h -src/client/inputhandler.cpp -src/client/clientevent.h -src/client/gameui.h -src/client/content_cso.h -src/client/sky.cpp -src/client/localplayer.cpp -src/client/content_mapblock.cpp -src/client/clientobject.h -src/client/filecache.cpp -src/client/particles.h -src/client/clientenvironment.h -src/client/imagefilters.h -src/client/renderingengine.cpp -src/client/tile.h -src/client/clientmedia.cpp -src/client/event_manager.h -src/client/joystick_controller.h -src/client/clouds.h -src/client/clientlauncher.h -src/client/content_cao.h -src/client/minimap.cpp -src/client/sound.h -src/client/keycode.cpp -src/client/particles.cpp -src/client/joystick_controller.cpp -src/client/keycode.h -src/client/wieldmesh.h -src/client/filecache.h -src/client/shader.h -src/client/mesh_generator_thread.h -src/client/renderingengine.h -src/client/client.cpp -src/client/imagefilters.cpp -src/client/clientlauncher.cpp -src/clouds.cpp -src/clouds.h -src/collision.cpp -src/collision.h -src/config.h -src/content_cao.cpp -src/content_cao.h -src/content_cso.cpp -src/content_cso.h -src/content_mapblock.cpp -src/content_mapblock.h -src/content_mapnode.cpp -src/content_nodemeta.cpp -src/content_nodemeta.h -src/content_sao.cpp -src/content_sao.h -src/convert_json.cpp -src/convert_json.h -src/craftdef.cpp -src/craftdef.h -src/database/database.cpp -src/database/database-dummy.cpp -src/database/database-files.cpp -src/database/database-leveldb.cpp -src/database/database-postgresql.cpp -src/database/database-postgresql.h -src/database/database-redis.cpp -src/database/database-sqlite3.cpp -src/database/database-sqlite3.h -src/daynightratio.h -src/debug.cpp -src/debug.h -src/defaultsettings.cpp -src/emerge.cpp -src/emerge.h -src/environment.cpp -src/exceptions.h -src/face_position_cache.cpp -src/face_position_cache.h -src/filecache.cpp -src/filesys.cpp -src/filesys.h -src/fontengine.cpp -src/fontengine.h -src/game.cpp -src/gamedef.h -src/game.h -src/genericobject.cpp -src/genericobject.h -src/gettext.cpp -src/gettext.h -src/gui/guiAnimatedImage.cpp -src/gui/guiAnimatedImage.h -src/gui/guiBackgroundImage.cpp -src/gui/guiBackgroundImage.h -src/gui/guiBox.cpp -src/gui/guiBox.h -src/gui/guiButton.cpp -src/gui/guiButton.h -src/gui/guiButtonImage.cpp -src/gui/guiButtonImage.h -src/gui/guiButtonItemImage.cpp -src/gui/guiButtonItemImage.h -src/gui/guiChatConsole.cpp -src/gui/guiChatConsole.h -src/gui/guiConfirmRegistration.cpp -src/gui/guiEditBoxWithScrollbar.cpp -src/gui/guiEditBoxWithScrollbar.h -src/gui/guiEngine.cpp -src/gui/guiEngine.h -src/gui/guiFormSpecMenu.cpp -src/gui/guiFormSpecMenu.h -src/gui/guiKeyChangeMenu.cpp -src/gui/guiHyperText.cpp -src/gui/guiHyperText.h -src/gui/guiInventoryList.cpp -src/gui/guiInventoryList.h -src/gui/guiItemImage.cpp -src/gui/guiItemImage.h -src/gui/guiMainMenu.h -src/gui/guiPasswordChange.cpp -src/gui/guiPathSelectMenu.cpp -src/gui/guiPathSelectMenu.h -src/gui/guiScrollBar.cpp -src/gui/guiSkin.cpp -src/gui/guiSkin.h -src/gui/guiTable.cpp -src/gui/guiTable.h -src/gui/guiVolumeChange.cpp -src/gui/guiVolumeChange.h -src/gui/intlGUIEditBox.cpp -src/gui/intlGUIEditBox.h -src/gui/mainmenumanager.h -src/gui/modalMenu.h -src/guiscalingfilter.cpp -src/guiscalingfilter.h -src/gui/StyleSpec.h -src/gui/touchscreengui.cpp -src/httpfetch.cpp -src/hud.cpp -src/hud.h -src/imagefilters.cpp -src/imagefilters.h -src/inventory.cpp -src/inventory.h -src/inventorymanager.cpp -src/inventorymanager.h -src/irrlicht_changes/CGUITTFont.cpp -src/irrlicht_changes/CGUITTFont.h -src/irrlicht_changes/irrUString.h -src/irrlicht_changes/static_text.cpp -src/irrlicht_changes/static_text.h -src/irrlichttypes.h -src/itemdef.cpp -src/itemdef.h -src/itemstackmetadata.cpp -src/keycode.cpp -src/light.cpp -src/localplayer.cpp -src/log.cpp -src/log.h -src/main.cpp -src/mapblock.cpp -src/mapblock.h -src/mapblock_mesh.cpp -src/mapblock_mesh.h -src/map.cpp -src/mapgen/cavegen.cpp -src/mapgen/cavegen.h -src/mapgen/dungeongen.cpp -src/mapgen/dungeongen.h -src/mapgen/mapgen.cpp -src/mapgen/mapgen.h -src/mapgen/mapgen_carpathian.cpp -src/mapgen/mapgen_carpathian.h -src/mapgen/mapgen_flat.cpp -src/mapgen/mapgen_flat.h -src/mapgen/mapgen_fractal.cpp -src/mapgen/mapgen_fractal.h -src/mapgen/mapgen_singlenode.cpp -src/mapgen/mapgen_singlenode.h -src/mapgen/mapgen_v5.cpp -src/mapgen/mapgen_v5.h -src/mapgen/mapgen_v6.cpp -src/mapgen/mapgen_v6.h -src/mapgen/mapgen_v7.cpp -src/mapgen/mapgen_v7.h -src/mapgen/mapgen_valleys.cpp -src/mapgen/mapgen_valleys.h -src/mapgen/mg_biome.cpp -src/mapgen/mg_biome.h -src/mapgen/mg_decoration.cpp -src/mapgen/mg_decoration.h -src/mapgen/mg_ore.cpp -src/mapgen/mg_ore.h -src/mapgen/mg_schematic.cpp -src/mapgen/mg_schematic.h -src/mapgen/treegen.cpp -src/mapgen/treegen.h -src/map.h -src/mapnode.cpp -src/mapnode.h -src/mapsector.cpp -src/mapsector.h -src/map_settings_manager.cpp -src/map_settings_manager.h -src/mesh.cpp -src/mesh_generator_thread.cpp -src/mesh.h -src/metadata.h -src/minimap.cpp -src/minimap.h -src/mods.cpp -src/mods.h -src/network/address.cpp -src/network/clientopcodes.cpp -src/network/clientopcodes.h -src/network/clientpackethandler.cpp -src/network/connection.cpp -src/network/connection.h -src/network/connectionthreads.cpp -src/network/networkpacket.cpp -src/network/networkprotocol.h -src/network/serveropcodes.cpp -src/network/serveropcodes.h -src/network/serverpackethandler.cpp -src/nodedef.cpp -src/nodedef.h -src/nodemetadata.cpp -src/nodemetadata.h -src/nodetimer.cpp -src/nodetimer.h -src/noise.cpp -src/noise.h -src/objdef.cpp -src/objdef.h -src/object_properties.cpp -src/object_properties.h -src/particles.cpp -src/particles.h -src/pathfinder.cpp -src/pathfinder.h -src/player.cpp -src/player.h -src/porting_android.cpp -src/porting_android.h -src/porting.cpp -src/porting.h -src/profiler.h -src/raycast.cpp -src/raycast.h -src/reflowscan.cpp -src/reflowscan.h -src/remoteplayer.cpp -src/rollback.cpp -src/rollback.h -src/rollback_interface.cpp -src/rollback_interface.h -src/script/common/c_content.cpp -src/script/common/c_content.h -src/script/common/c_converter.cpp -src/script/common/c_converter.h -src/script/common/c_internal.cpp -src/script/common/c_internal.h -src/script/common/c_types.cpp -src/script/common/c_types.h -src/script/cpp_api/s_async.cpp -src/script/cpp_api/s_async.h -src/script/cpp_api/s_base.cpp -src/script/cpp_api/s_base.h -src/script/cpp_api/s_client.cpp -src/script/cpp_api/s_entity.cpp -src/script/cpp_api/s_entity.h -src/script/cpp_api/s_env.cpp -src/script/cpp_api/s_env.h -src/script/cpp_api/s_internal.h -src/script/cpp_api/s_inventory.cpp -src/script/cpp_api/s_inventory.h -src/script/cpp_api/s_item.cpp -src/script/cpp_api/s_item.h -src/script/cpp_api/s_mainmenu.h -src/script/cpp_api/s_node.cpp -src/script/cpp_api/s_node.h -src/script/cpp_api/s_nodemeta.cpp -src/script/cpp_api/s_nodemeta.h -src/script/cpp_api/s_player.cpp -src/script/cpp_api/s_player.h -src/script/cpp_api/s_security.cpp -src/script/cpp_api/s_security.h -src/script/cpp_api/s_server.cpp -src/script/cpp_api/s_server.h -src/script/lua_api/l_areastore.cpp -src/script/lua_api/l_base.cpp -src/script/lua_api/l_base.h -src/script/lua_api/l_client.cpp -src/script/lua_api/l_craft.cpp -src/script/lua_api/l_craft.h -src/script/lua_api/l_env.cpp -src/script/lua_api/l_env.h -src/script/lua_api/l_http.cpp -src/script/lua_api/l_http.h -src/script/lua_api/l_internal.h -src/script/lua_api/l_inventory.cpp -src/script/lua_api/l_inventory.h -src/script/lua_api/l_item.cpp -src/script/lua_api/l_item.h -src/script/lua_api/l_itemstackmeta.cpp -src/script/lua_api/l_itemstackmeta.h -src/script/lua_api/l_localplayer.cpp -src/script/lua_api/l_mainmenu.cpp -src/script/lua_api/l_mainmenu.h -src/script/lua_api/l_mapgen.cpp -src/script/lua_api/l_mapgen.h -src/script/lua_api/l_metadata.cpp -src/script/lua_api/l_minimap.cpp -src/script/lua_api/l_nodemeta.cpp -src/script/lua_api/l_nodemeta.h -src/script/lua_api/l_nodetimer.cpp -src/script/lua_api/l_noise.cpp -src/script/lua_api/l_object.cpp -src/script/lua_api/l_object.h -src/script/lua_api/l_particles.cpp -src/script/lua_api/l_particles.h -src/script/lua_api/l_particles_local.cpp -src/script/lua_api/l_rollback.cpp -src/script/lua_api/l_rollback.h -src/script/lua_api/l_server.cpp -src/script/lua_api/l_settings.cpp -src/script/lua_api/l_sound.cpp -src/script/lua_api/l_storage.cpp -src/script/lua_api/l_util.cpp -src/script/lua_api/l_vmanip.cpp -src/script/scripting_client.cpp -src/script/scripting_client.h -src/script/scripting_mainmenu.cpp -src/script/scripting_mainmenu.h -src/script/scripting_server.cpp -src/script/scripting_server.h -src/serialization.cpp -src/serialization.h -src/serveractiveobjectmap.cpp -src/serveractiveobjectmap.h -src/server.cpp -src/serverenvironment.cpp -src/serverenvironment.h -src/server.h -src/serverlist.cpp -src/serverlist.h -src/serverobject.cpp -src/serverobject.h -src/settings.cpp -src/settings.h -src/settings_translation_file.cpp -src/shader.cpp -src/shader.h -src/sky.cpp -src/sound.cpp -src/staticobject.cpp -src/staticobject.h -src/subgame.cpp -src/subgame.h -src/terminal_chat_console.cpp -src/terminal_chat_console.h -src/threading/atomic.h -src/threading/event.cpp -src/threading/mutex_auto_lock.h -src/threading/mutex.cpp -src/threading/mutex.h -src/threading/semaphore.cpp -src/threading/thread.cpp -src/threading/thread.h -src/threads.h -src/tileanimation.cpp -src/tool.cpp -src/tool.h -src/translation.cpp -src/unittest/test_areastore.cpp -src/unittest/test_collision.cpp -src/unittest/test_compression.cpp -src/unittest/test_connection.cpp -src/unittest/test.cpp -src/unittest/test_filepath.cpp -src/unittest/test.h -src/unittest/test_inventory.cpp -src/unittest/test_keycode.cpp -src/unittest/test_map_settings_manager.cpp -src/unittest/test_noderesolver.cpp -src/unittest/test_noise.cpp -src/unittest/test_random.cpp -src/unittest/test_schematic.cpp -src/unittest/test_serialization.cpp -src/unittest/test_settings.cpp -src/unittest/test_socket.cpp -src/unittest/test_threading.cpp -src/unittest/test_utilities.cpp -src/unittest/test_voxelalgorithms.cpp -src/unittest/test_voxelmanipulator.cpp -src/util/areastore.cpp -src/util/areastore.h -src/util/auth.cpp -src/util/auth.h -src/util/base64.cpp -src/util/base64.h -src/util/basic_macros.h -src/util/container.h -src/util/directiontables.cpp -src/util/directiontables.h -src/util/enriched_string.cpp -src/util/enriched_string.h -src/util/md32_common.h -src/util/numeric.cpp -src/util/numeric.h -src/util/pointedthing.cpp -src/util/pointedthing.h -src/util/pointer.h -src/util/quicktune.h -src/util/quicktune_shortcutter.h -src/util/quicktune.cpp -src/util/serialize.cpp -src/util/serialize.h -src/util/sha1.cpp -src/util/srp.cpp -src/util/srp.h -src/util/strfnd.h -src/util/string.cpp -src/util/string.h -src/util/thread.h -src/util/timetaker.cpp -src/util/timetaker.h -src/version.cpp -src/version.h -src/voxelalgorithms.cpp -src/voxelalgorithms.h -src/voxel.cpp -src/voxel.h -src/wieldmesh.cpp diff -Nru minetest-5.2.0/util/travis/clangtidy.sh minetest-5.3.0/util/travis/clangtidy.sh --- minetest-5.2.0/util/travis/clangtidy.sh 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/travis/clangtidy.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -#!/bin/bash -e -. util/travis/common.sh - -needs_compile || exit 0 - -if [ -z "${CLANG_TIDY}" ]; then - CLANG_TIDY=clang-tidy -fi - -mkdir -p cmakebuild && cd cmakebuild -cmake -DCMAKE_BUILD_TYPE=Debug \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ - -DRUN_IN_PLACE=TRUE \ - -DENABLE_GETTEXT=TRUE \ - -DENABLE_SOUND=FALSE \ - -DBUILD_SERVER=TRUE .. -make GenerateVersion -cd .. - -echo "Performing clang-tidy checks..." -./util/travis/run-clang-tidy.py \ - -clang-tidy-binary=${CLANG_TIDY} -p cmakebuild \ - -quiet -config="$(cat .clang-tidy)" \ - 'src/.*' - -RET=$? -echo "Clang tidy returned $RET" -exit $RET diff -Nru minetest-5.2.0/util/travis/common.sh minetest-5.3.0/util/travis/common.sh --- minetest-5.2.0/util/travis/common.sh 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/travis/common.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -#!/bin/bash -e - -set_linux_compiler_env() { - if [[ "${COMPILER}" == "gcc-6" ]]; then - export CC=gcc-6 - export CXX=g++-6 - elif [[ "${COMPILER}" == "gcc-8" ]]; then - export CC=gcc-8 - export CXX=g++-8 - elif [[ "${COMPILER}" == "clang-3.9" ]]; then - export CC=clang-3.9 - export CXX=clang++-3.9 - elif [[ "${COMPILER}" == "clang-9" ]]; then - export CC=clang-9 - export CXX=clang++-9 - fi -} - -# Linux build only -install_linux_deps() { - sudo apt-get update - sudo apt-get install libirrlicht-dev cmake libbz2-dev libpng-dev \ - libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \ - libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev \ - gettext libpq-dev postgresql-server-dev-all libleveldb-dev -} - -# Mac OSX build only -install_macosx_deps() { - brew update - brew install freetype gettext hiredis irrlicht leveldb libogg libvorbis luajit - if brew ls | grep -q jpeg; then - brew upgrade jpeg - else - brew install jpeg - fi - #brew upgrade postgresql -} - -# Relative to git-repository root: -TRIGGER_COMPILE_PATHS="src/.*\.(c|cpp|h)|CMakeLists.txt|cmake/Modules/|util/travis/|util/buildbot/" - -needs_compile() { - RANGE="$TRAVIS_COMMIT_RANGE" - if [[ "$(git diff --name-only $RANGE -- 2>/dev/null)" == "" ]]; then - RANGE="$TRAVIS_COMMIT^...$TRAVIS_COMMIT" - echo "Fixed range: $RANGE" - fi - git diff --name-only $RANGE -- | egrep -q "^($TRIGGER_COMPILE_PATHS)" -} - diff -Nru minetest-5.2.0/util/travis/lint.sh minetest-5.3.0/util/travis/lint.sh --- minetest-5.2.0/util/travis/lint.sh 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/travis/lint.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -#! /bin/bash -function perform_lint() { - echo "Performing LINT..." - if [ -z "${CLANG_FORMAT}" ]; then - CLANG_FORMAT=clang-format - fi - echo "LINT: Using binary $CLANG_FORMAT" - CLANG_FORMAT_WHITELIST="util/travis/clang-format-whitelist.txt" - - files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')" - - local errorcount=0 - local fail=0 - for f in ${files_to_lint}; do - d=$(diff -u "$f" <(${CLANG_FORMAT} "$f") || true) - - if ! [ -z "$d" ]; then - whitelisted=$(awk '$1 == "'$f'" { print 1 }' "$CLANG_FORMAT_WHITELIST") - - # If file is not whitelisted, mark a failure - if [ -z "${whitelisted}" ]; then - errorcount=$((errorcount+1)) - - printf "The file %s is not compliant with the coding style" "$f" - if [ ${errorcount} -gt 50 ]; then - printf "\nToo many errors encountered previously, this diff is hidden.\n" - else - printf ":\n%s\n" "$d" - fi - - fail=1 - fi - fi - done - - if [ "$fail" = 1 ]; then - echo "LINT reports failure." - exit 1 - fi - - echo "LINT OK" -} - diff -Nru minetest-5.2.0/util/travis/run-clang-tidy.py minetest-5.3.0/util/travis/run-clang-tidy.py --- minetest-5.2.0/util/travis/run-clang-tidy.py 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/travis/run-clang-tidy.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,321 +0,0 @@ -#!/usr/bin/env python -# -#===- run-clang-tidy.py - Parallel clang-tidy runner ---------*- python -*--===# -# -# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -# See https://llvm.org/LICENSE.txt for license information. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -# -#===------------------------------------------------------------------------===# -# FIXME: Integrate with clang-tidy-diff.py - -""" -Parallel clang-tidy runner -========================== - -Runs clang-tidy over all files in a compilation database. Requires clang-tidy -and clang-apply-replacements in $PATH. - -Example invocations. -- Run clang-tidy on all files in the current working directory with a default - set of checks and show warnings in the cpp files and all project headers. - run-clang-tidy.py $PWD - -- Fix all header guards. - run-clang-tidy.py -fix -checks=-*,llvm-header-guard - -- Fix all header guards included from clang-tidy and header guards - for clang-tidy headers. - run-clang-tidy.py -fix -checks=-*,llvm-header-guard extra/clang-tidy \ - -header-filter=extra/clang-tidy - -Compilation database setup: -http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html -""" - -from __future__ import print_function - -import argparse -import glob -import json -import multiprocessing -import os -import re -import shutil -import subprocess -import sys -import tempfile -import threading -import traceback - -try: - import yaml -except ImportError: - yaml = None - -is_py2 = sys.version[0] == '2' - -if is_py2: - import Queue as queue -else: - import queue as queue - -def find_compilation_database(path): - """Adjusts the directory until a compilation database is found.""" - result = './' - while not os.path.isfile(os.path.join(result, path)): - if os.path.realpath(result) == '/': - print('Error: could not find compilation database.') - sys.exit(1) - result += '../' - return os.path.realpath(result) - - -def make_absolute(f, directory): - if os.path.isabs(f): - return f - return os.path.normpath(os.path.join(directory, f)) - - -def get_tidy_invocation(f, clang_tidy_binary, checks, tmpdir, build_path, - header_filter, extra_arg, extra_arg_before, quiet, - config): - """Gets a command line for clang-tidy.""" - start = [clang_tidy_binary] - if header_filter is not None: - start.append('-header-filter=' + header_filter) - if checks: - start.append('-checks=' + checks) - if tmpdir is not None: - start.append('-export-fixes') - # Get a temporary file. We immediately close the handle so clang-tidy can - # overwrite it. - (handle, name) = tempfile.mkstemp(suffix='.yaml', dir=tmpdir) - os.close(handle) - start.append(name) - for arg in extra_arg: - start.append('-extra-arg=%s' % arg) - for arg in extra_arg_before: - start.append('-extra-arg-before=%s' % arg) - start.append('-p=' + build_path) - if quiet: - start.append('-quiet') - if config: - start.append('-config=' + config) - start.append(f) - return start - - -def merge_replacement_files(tmpdir, mergefile): - """Merge all replacement files in a directory into a single file""" - # The fixes suggested by clang-tidy >= 4.0.0 are given under - # the top level key 'Diagnostics' in the output yaml files - mergekey="Diagnostics" - merged=[] - for replacefile in glob.iglob(os.path.join(tmpdir, '*.yaml')): - content = yaml.safe_load(open(replacefile, 'r')) - if not content: - continue # Skip empty files. - merged.extend(content.get(mergekey, [])) - - if merged: - # MainSourceFile: The key is required by the definition inside - # include/clang/Tooling/ReplacementsYaml.h, but the value - # is actually never used inside clang-apply-replacements, - # so we set it to '' here. - output = { 'MainSourceFile': '', mergekey: merged } - with open(mergefile, 'w') as out: - yaml.safe_dump(output, out) - else: - # Empty the file: - open(mergefile, 'w').close() - - -def check_clang_apply_replacements_binary(args): - """Checks if invoking supplied clang-apply-replacements binary works.""" - try: - subprocess.check_call([args.clang_apply_replacements_binary, '--version']) - except: - print('Unable to run clang-apply-replacements. Is clang-apply-replacements ' - 'binary correctly specified?', file=sys.stderr) - traceback.print_exc() - sys.exit(1) - - -def apply_fixes(args, tmpdir): - """Calls clang-apply-fixes on a given directory.""" - invocation = [args.clang_apply_replacements_binary] - if args.format: - invocation.append('-format') - if args.style: - invocation.append('-style=' + args.style) - invocation.append(tmpdir) - subprocess.call(invocation) - - -def run_tidy(args, tmpdir, build_path, queue, lock, failed_files): - """Takes filenames out of queue and runs clang-tidy on them.""" - while True: - name = queue.get() - invocation = get_tidy_invocation(name, args.clang_tidy_binary, args.checks, - tmpdir, build_path, args.header_filter, - args.extra_arg, args.extra_arg_before, - args.quiet, args.config) - - proc = subprocess.Popen(invocation) - proc.wait() - if proc.returncode != 0: - failed_files.append(name) - queue.task_done() - - -def main(): - parser = argparse.ArgumentParser(description='Runs clang-tidy over all files ' - 'in a compilation database. Requires ' - 'clang-tidy and clang-apply-replacements in ' - '$PATH.') - parser.add_argument('-clang-tidy-binary', metavar='PATH', - default='clang-tidy', - help='path to clang-tidy binary') - parser.add_argument('-clang-apply-replacements-binary', metavar='PATH', - default='clang-apply-replacements', - help='path to clang-apply-replacements binary') - parser.add_argument('-checks', default=None, - help='checks filter, when not specified, use clang-tidy ' - 'default') - parser.add_argument('-config', default=None, - help='Specifies a configuration in YAML/JSON format: ' - ' -config="{Checks: \'*\', ' - ' CheckOptions: [{key: x, ' - ' value: y}]}" ' - 'When the value is empty, clang-tidy will ' - 'attempt to find a file named .clang-tidy for ' - 'each source file in its parent directories.') - parser.add_argument('-header-filter', default=None, - help='regular expression matching the names of the ' - 'headers to output diagnostics from. Diagnostics from ' - 'the main file of each translation unit are always ' - 'displayed.') - if yaml: - parser.add_argument('-export-fixes', metavar='filename', dest='export_fixes', - help='Create a yaml file to store suggested fixes in, ' - 'which can be applied with clang-apply-replacements.') - parser.add_argument('-j', type=int, default=0, - help='number of tidy instances to be run in parallel.') - parser.add_argument('files', nargs='*', default=['.*'], - help='files to be processed (regex on path)') - parser.add_argument('-fix', action='store_true', help='apply fix-its') - parser.add_argument('-format', action='store_true', help='Reformat code ' - 'after applying fixes') - parser.add_argument('-style', default='file', help='The style of reformat ' - 'code after applying fixes') - parser.add_argument('-p', dest='build_path', - help='Path used to read a compile command database.') - parser.add_argument('-extra-arg', dest='extra_arg', - action='append', default=[], - help='Additional argument to append to the compiler ' - 'command line.') - parser.add_argument('-extra-arg-before', dest='extra_arg_before', - action='append', default=[], - help='Additional argument to prepend to the compiler ' - 'command line.') - parser.add_argument('-quiet', action='store_true', - help='Run clang-tidy in quiet mode') - args = parser.parse_args() - - db_path = 'compile_commands.json' - - if args.build_path is not None: - build_path = args.build_path - else: - # Find our database - build_path = find_compilation_database(db_path) - - try: - invocation = [args.clang_tidy_binary, '-list-checks'] - invocation.append('-p=' + build_path) - if args.checks: - invocation.append('-checks=' + args.checks) - invocation.append('-') - if args.quiet: - # Even with -quiet we still want to check if we can call clang-tidy. - with open(os.devnull, 'w') as dev_null: - subprocess.check_call(invocation, stdout=dev_null) - else: - subprocess.check_call(invocation) - except: - print("Unable to run clang-tidy.", file=sys.stderr) - sys.exit(1) - - # Load the database and extract all files. - database = json.load(open(os.path.join(build_path, db_path))) - files = [make_absolute(entry['file'], entry['directory']) - for entry in database] - - max_task = args.j - if max_task == 0: - max_task = multiprocessing.cpu_count() - - tmpdir = None - if args.fix or (yaml and args.export_fixes): - check_clang_apply_replacements_binary(args) - tmpdir = tempfile.mkdtemp() - - # Build up a big regexy filter from all command line arguments. - file_name_re = re.compile('|'.join(args.files)) - - return_code = 0 - try: - # Spin up a bunch of tidy-launching threads. - task_queue = queue.Queue(max_task) - # List of files with a non-zero return code. - failed_files = [] - lock = threading.Lock() - for _ in range(max_task): - t = threading.Thread(target=run_tidy, - args=(args, tmpdir, build_path, task_queue, lock, failed_files)) - t.daemon = True - t.start() - - # Fill the queue with files. - for name in files: - if file_name_re.search(name): - task_queue.put(name) - - # Wait for all threads to be done. - task_queue.join() - if len(failed_files): - return_code = 1 - - except KeyboardInterrupt: - # This is a sad hack. Unfortunately subprocess goes - # bonkers with ctrl-c and we start forking merrily. - print('\nCtrl-C detected, goodbye.') - if tmpdir: - shutil.rmtree(tmpdir) - os.kill(0, 9) - - if yaml and args.export_fixes: - print('Writing fixes to ' + args.export_fixes + ' ...') - try: - merge_replacement_files(tmpdir, args.export_fixes) - except: - print('Error exporting fixes.\n', file=sys.stderr) - traceback.print_exc() - return_code=1 - - if args.fix: - print('Applying fixes ...') - try: - apply_fixes(args, tmpdir) - except: - print('Error applying fixes.\n', file=sys.stderr) - traceback.print_exc() - return_code=1 - - if tmpdir: - shutil.rmtree(tmpdir) - sys.exit(return_code) - -if __name__ == '__main__': - main() diff -Nru minetest-5.2.0/util/travis/script.sh minetest-5.3.0/util/travis/script.sh --- minetest-5.2.0/util/travis/script.sh 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/travis/script.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -#!/bin/bash -e -. util/travis/common.sh -. util/travis/lint.sh - -needs_compile || exit 0 - -if [[ ! -z "${CLANG_FORMAT}" ]]; then - # Lint and exit CI - perform_lint - exit 0 -fi - -set_linux_compiler_env - -if [[ ${PLATFORM} == "Unix" ]]; then - mkdir -p travisbuild - cd travisbuild || exit 1 - - CMAKE_FLAGS='' - - if [[ ${TRAVIS_OS_NAME} == "osx" ]]; then - CMAKE_FLAGS+=' -DCUSTOM_GETTEXT_PATH=/usr/local/opt/gettext' - fi - - if [[ -n "${FREETYPE}" ]] && [[ "${FREETYPE}" == "0" ]]; then - CMAKE_FLAGS+=' -DENABLE_FREETYPE=0' - fi - - cmake -DCMAKE_BUILD_TYPE=Debug \ - -DRUN_IN_PLACE=TRUE \ - -DENABLE_GETTEXT=TRUE \ - -DBUILD_SERVER=TRUE \ - ${CMAKE_FLAGS} .. - make -j2 - - echo "Running unit tests." - CMD="../bin/minetest --run-unittests" - if [[ "${VALGRIND}" == "1" ]]; then - valgrind --leak-check=full --leak-check-heuristics=all --undef-value-errors=no --error-exitcode=9 ${CMD} && exit 0 - else - ${CMD} && exit 0 - fi - -elif [[ $PLATFORM == Win* ]]; then - [[ $CC == "clang" ]] && exit 1 # Not supposed to happen - # We need to have our build directory outside of the minetest directory because - # CMake will otherwise get very very confused with symlinks and complain that - # something is not a subdirectory of something even if it actually is. - # e.g.: - # /home/travis/minetest/minetest/travisbuild/minetest - # \/ \/ \/ - # /home/travis/minetest/minetest/travisbuild/minetest/travisbuild/minetest - # \/ \/ \/ - # /home/travis/minetest/minetest/travisbuild/minetest/travisbuild/minetest/travisbuild/minetest - # You get the idea. - OLDDIR=$(pwd) - cd .. - export EXISTING_MINETEST_DIR=$OLDDIR - export NO_MINETEST_GAME=1 - if [[ $PLATFORM == "Win32" ]]; then - "$OLDDIR/util/buildbot/buildwin32.sh" travisbuild && exit 0 - elif [[ $PLATFORM == "Win64" ]]; then - "$OLDDIR/util/buildbot/buildwin64.sh" travisbuild && exit 0 - fi -else - echo "Unknown platform \"${PLATFORM}\"." - exit 1 -fi - diff -Nru minetest-5.2.0/util/travis/toolchain_mingw.cmake.in minetest-5.3.0/util/travis/toolchain_mingw.cmake.in --- minetest-5.2.0/util/travis/toolchain_mingw.cmake.in 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/travis/toolchain_mingw.cmake.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -# Target operating system name -set(CMAKE_SYSTEM_NAME Windows) - -# Compilers to use -set(CMAKE_C_COMPILER %PREFIX%-gcc) -set(CMAKE_CXX_COMPILER %PREFIX%-g++) -set(CMAKE_RC_COMPILER %PREFIX%-windres) - -# Location of the target environment -set(CMAKE_FIND_ROOT_PATH %ROOTPATH%) - -# Adjust the default behaviour of the FIND_XXX() commands: -# search for headers and libraries in the target environment, -# search for programs in the host environment -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - diff -Nru minetest-5.2.0/util/wireshark/minetest.lua minetest-5.3.0/util/wireshark/minetest.lua --- minetest-5.2.0/util/wireshark/minetest.lua 2020-04-05 17:47:01.000000000 +0000 +++ minetest-5.3.0/util/wireshark/minetest.lua 2020-07-09 21:13:21.000000000 +0000 @@ -23,18 +23,39 @@ -- +-- Wireshark documentation: +-- https://web.archive.org/web/20170711121726/https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Proto.html +-- https://web.archive.org/web/20170711121844/https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Tree.html +-- https://web.archive.org/web/20170711121917/https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Tvb.html + + -- Table of Contents: --- Part 1: Client command dissectors (TOSERVER_*) --- Part 2: Server command dissectors (TOCLIENT_*) --- Part 3: Wrapper protocol subdissectors --- Part 4: Wrapper protocol main dissector --- Part 5: Utility functions +-- Part 1: Utility functions +-- Part 2: Client command dissectors (TOSERVER_*) +-- Part 3: Server command dissectors (TOCLIENT_*) +-- Part 4: Wrapper protocol subdissectors +-- Part 5: Wrapper protocol main dissector +-- Part 6: Utility functions part 2 + + +----------------------- +-- Part 1 -- +-- Utility functions -- +----------------------- + +-- Creates two ProtoFields to hold a length and variable-length text content +-- lentype must be either "uint16" or "uint32" +function minetest_field_helper(lentype, name, abbr) + local f_textlen = ProtoField[lentype](name .. "len", abbr .. " (length)", base.DEC) + local f_text = ProtoField.string(name, abbr) + return f_textlen, f_text +end -------------------------------------------- --- Part 1 -- +-- Part 2 -- -- Client command dissectors (TOSERVER_*) -- -------------------------------------------- @@ -42,34 +63,71 @@ minetest_client_obsolete = {} -- TOSERVER_INIT -minetest_client_commands[0x02] = { "INIT", 2 } do - local f_ser_fmt = ProtoField.uint8("minetest.client.init_ser_version", + local abbr = "minetest.client.init_" + + local f_ser_fmt = ProtoField.uint8(abbr.."ser_version", "Maximum serialization format version", base.DEC) - local f_player_name = ProtoField.stringz("minetest.client.init_player_name", "Player Name") - local f_password = ProtoField.stringz("minetest.client.init_password", "Password") - local f_version = ProtoField.uint16("minetest.client.init_version", "Version", base.DEC) - - minetest_client_commands[0x10] = { - "INIT_LEGACY", -- Command name - 53, -- Minimum message length including code - { f_ser_fmt, -- List of fields [optional] - f_player_name, - f_password, - f_version }, - function(buffer, pinfo, tree, t) -- Dissector function [optional] + local f_comp_modes = ProtoField.uint16(abbr.."compression", + "Supported compression modes", base.DEC, { [0] = "No compression" }) + local f_proto_min = ProtoField.uint16(abbr.."proto_min", "Minimum protocol version", base.DEC) + local f_proto_max = ProtoField.uint16(abbr.."_proto_max", "Maximum protocol version", base.DEC) + local f_player_namelen, f_player_name = + minetest_field_helper("uint16", abbr.."player_name", "Player Name") + + minetest_client_commands[0x02] = { + "INIT", -- Command name + 11, -- Minimum message length including code + { f_ser_fmt, -- List of fields [optional] + f_comp_modes, + f_proto_min, + f_proto_max, + f_player_namelen, + f_player_name }, + function(buffer, pinfo, tree, t) -- Dissector function [optional] t:add(f_ser_fmt, buffer(2,1)) - t:add(f_player_name, buffer(3,20)) - t:add(f_password, buffer(23,28)) - t:add(f_version, buffer(51,2)) + t:add(f_comp_modes, buffer(3,2)) + t:add(f_proto_min, buffer(5,2)) + t:add(f_proto_max, buffer(7,2)) + minetest_decode_helper_ascii(buffer, t, "uint16", 9, f_player_namelen, f_player_name) end } end +-- TOSERVER_INIT_LEGACY (obsolete) + +minetest_client_commands[0x10] = { "INIT_LEGACY", 53 } +minetest_client_obsolete[0x10] = true + -- TOSERVER_INIT2 -minetest_client_commands[0x11] = { "INIT2", 2 } +do + local f_langlen, f_lang = + minetest_field_helper("uint16", "minetest.client.init2_language", "Language Code") + + minetest_client_commands[0x11] = { + "INIT2", + 2, + { f_langlen, + f_lang }, + function(buffer, pinfo, tree, t) + minetest_decode_helper_ascii(buffer, t, "uint16", 2, f_langlen, f_lang) + end + } +end + +-- TOSERVER_MODCHANNEL_JOIN + +minetest_client_commands[0x17] = { "MODCHANNEL_JOIN", 2 } + +-- TOSERVER_MODCHANNEL_LEAVE + +minetest_client_commands[0x18] = { "MODCHANNEL_LEAVE", 2 } + +-- TOSERVER_MODCHANNEL_MSG + +minetest_client_commands[0x19] = { "MODCHANNEL_MSG", 2 } -- TOSERVER_GETBLOCK (obsolete) @@ -89,18 +147,24 @@ -- TOSERVER_PLAYERPOS do - local f_x = ProtoField.int32("minetest.client.playerpos_x", "Position X", base.DEC) - local f_y = ProtoField.int32("minetest.client.playerpos_y", "Position Y", base.DEC) - local f_z = ProtoField.int32("minetest.client.playerpos_z", "Position Z", base.DEC) - local f_speed_x = ProtoField.int32("minetest.client.playerpos_speed_x", "Speed X", base.DEC) - local f_speed_y = ProtoField.int32("minetest.client.playerpos_speed_y", "Speed Y", base.DEC) - local f_speed_z = ProtoField.int32("minetest.client.playerpos_speed_z", "Speed Z", base.DEC) - local f_pitch = ProtoField.int32("minetest.client.playerpos_pitch", "Pitch", base.DEC) - local f_yaw = ProtoField.int32("minetest.client.playerpos_yaw", "Yaw", base.DEC) + local abbr = "minetest.client.playerpos_" + + local f_x = ProtoField.int32(abbr.."x", "Position X", base.DEC) + local f_y = ProtoField.int32(abbr.."y", "Position Y", base.DEC) + local f_z = ProtoField.int32(abbr.."z", "Position Z", base.DEC) + local f_speed_x = ProtoField.int32(abbr.."speed_x", "Speed X", base.DEC) + local f_speed_y = ProtoField.int32(abbr.."speed_y", "Speed Y", base.DEC) + local f_speed_z = ProtoField.int32(abbr.."speed_z", "Speed Z", base.DEC) + local f_pitch = ProtoField.int32(abbr.."pitch", "Pitch", base.DEC) + local f_yaw = ProtoField.int32(abbr.."yaw", "Yaw", base.DEC) + local f_key_pressed = ProtoField.bytes(abbr.."key_pressed", "Pressed keys") + local f_fov = ProtoField.uint8(abbr.."fov", "FOV", base.DEC) + local f_wanted_range = ProtoField.uint8(abbr.."wanted_range", "Requested view range", base.DEC) minetest_client_commands[0x23] = { "PLAYERPOS", 34, - { f_x, f_y, f_z, f_speed_x, f_speed_y, f_speed_z, f_pitch, f_yaw }, + { f_x, f_y, f_z, f_speed_x, f_speed_y, f_speed_z, f_pitch, f_yaw, + f_key_pressed, f_fov, f_wanted_range }, function(buffer, pinfo, tree, t) t:add(f_x, buffer(2,4)) t:add(f_y, buffer(6,4)) @@ -110,6 +174,9 @@ t:add(f_speed_z, buffer(22,4)) t:add(f_pitch, buffer(26,4)) t:add(f_yaw, buffer(30,4)) + t:add(f_key_pressed, buffer(34,4)) + t:add(f_fov, buffer(38,1)) + t:add(f_wanted_range, buffer(39,1)) end } end @@ -148,7 +215,6 @@ end -- TOSERVER_DELETEDBLOCKS --- TODO: Test this do local f_count = ProtoField.uint8("minetest.client.deletedblocks_count", "Count", base.DEC) @@ -186,122 +252,25 @@ minetest_client_commands[0x26] = { "ADDNODE_FROM_INVENTORY", 2 } minetest_client_obsolete[0x26] = true --- TOSERVER_CLICK_OBJECT --- TODO: Test this - -do - local vs_button = { - [0] = "left", - [1] = "right" - } - - local f_button = ProtoField.uint8("minetest.client.click_object_button", "Button", base.DEC, vs_button) - local f_blockpos_x = ProtoField.int16("minetest.client.click_object_blockpos_x", "Block position X", base.DEC) - local f_blockpos_y = ProtoField.int16("minetest.client.click_object_blockpos_y", "Block position Y", base.DEC) - local f_blockpos_z = ProtoField.int16("minetest.client.click_object_blockpos_z", "Block position Z", base.DEC) - local f_id = ProtoField.int16("minetest.client.click_object_id", "ID", base.DEC) - local f_item = ProtoField.uint16("minetest.client.click_object_item", "Item", base.DEC) +-- TOSERVER_CLICK_OBJECT (obsolete) - minetest_client_commands[0x27] = { - "CLICK_OBJECT", 13, - { f_button, f_blockpos_x, f_blockpos_y, f_blockpos_z, f_id, f_item }, - function(buffer, pinfo, tree, t) - t:add(f_button, buffer(2,1)) - t:add(f_blockpos_x, buffer(3,2)) - t:add(f_blockpos_y, buffer(5,2)) - t:add(f_blockpos_z, buffer(7,2)) - t:add(f_id, buffer(9,2)) - t:add(f_item, buffer(11,2)) - end - } -end +minetest_client_commands[0x27] = { "CLICK_OBJECT", 2 } +minetest_client_obsolete[0x27] = true --- TOSERVER_GROUND_ACTION - -do - local vs_action = { - [0] = "Start digging", - [1] = "Place block", - [2] = "Stop digging", - [3] = "Digging completed" - } - - local f_action = ProtoField.uint8("minetest.client.ground_action", "Action", base.DEC, vs_action) - local f_nodepos_undersurface_x = ProtoField.int16( - "minetest.client.ground_action_nodepos_undersurface_x", - "Node position (under surface) X") - local f_nodepos_undersurface_y = ProtoField.int16( - "minetest.client.ground_action_nodepos_undersurface_y", - "Node position (under surface) Y") - local f_nodepos_undersurface_z = ProtoField.int16( - "minetest.client.ground_action_nodepos_undersurface_z", - "Node position (under surface) Z") - local f_nodepos_abovesurface_x = ProtoField.int16( - "minetest.client.ground_action_nodepos_abovesurface_x", - "Node position (above surface) X") - local f_nodepos_abovesurface_y = ProtoField.int16( - "minetest.client.ground_action_nodepos_abovesurface_y", - "Node position (above surface) Y") - local f_nodepos_abovesurface_z = ProtoField.int16( - "minetest.client.ground_action_nodepos_abovesurface_z", - "Node position (above surface) Z") - local f_item = ProtoField.uint16("minetest.client.ground_action_item", "Item") +-- TOSERVER_GROUND_ACTION (obsolete) - minetest_client_commands[0x28] = { - "GROUND_ACTION", 17, - { f_action, - f_nodepos_undersurface_x, - f_nodepos_undersurface_y, - f_nodepos_undersurface_z, - f_nodepos_abovesurface_x, - f_nodepos_abovesurface_y, - f_nodepos_abovesurface_z, - f_item }, - function(buffer, pinfo, tree, t) - t:add(f_action, buffer(2,1)) - t:add(f_nodepos_undersurface_x, buffer(3,2)) - t:add(f_nodepos_undersurface_y, buffer(5,2)) - t:add(f_nodepos_undersurface_z, buffer(7,2)) - t:add(f_nodepos_abovesurface_x, buffer(9,2)) - t:add(f_nodepos_abovesurface_y, buffer(11,2)) - t:add(f_nodepos_abovesurface_z, buffer(13,2)) - t:add(f_item, buffer(15,2)) - end - } -end +minetest_client_commands[0x28] = { "GROUND_ACTION", 2 } +minetest_client_obsolete[0x28] = true -- TOSERVER_RELEASE (obsolete) minetest_client_commands[0x29] = { "RELEASE", 2 } minetest_client_obsolete[0x29] = true --- TOSERVER_SIGNTEXT (old signs) --- TODO: Test this or mark obsolete +-- TOSERVER_SIGNTEXT (obsolete) -do - local f_blockpos_x = ProtoField.int16("minetest.client.signtext_blockpos_x", "Block position X", base.DEC) - local f_blockpos_y = ProtoField.int16("minetest.client.signtext_blockpos_y", "Block position Y", base.DEC) - local f_blockpos_z = ProtoField.int16("minetest.client.signtext_blockpos_z", "Block position Z", base.DEC) - local f_id = ProtoField.int16("minetest.client.signtext_id", "ID", base.DEC) - local f_textlen = ProtoField.uint16("minetest.client.signtext_textlen", "Text length", base.DEC) - local f_text = ProtoField.string("minetest.client.signtext_text", "Text") - - minetest_client_commands[0x30] = { - "SIGNTEXT", 12, - { f_blockpos_x, f_blockpos_y, f_blockpos_z, f_id, f_textlen, f_text }, - function(buffer, pinfo, tree, t) - t:add(f_blockpos_x, buffer(2,2)) - t:add(f_blockpos_y, buffer(4,2)) - t:add(f_blockpos_z, buffer(6,2)) - t:add(f_id, buffer(8,2)) - t:add(f_textlen, buffer(10,2)) - local textlen = buffer(10,2):uint() - if minetest_check_length(buffer, 12 + textlen, t) then - t:add(f_text, buffer, buffer(12,textlen)) - end - end - } -end +minetest_client_commands[0x30] = { "SIGNTEXT", 2 } +minetest_client_obsolete[0x30] = true -- TOSERVER_INVENTORY_ACTION @@ -336,53 +305,16 @@ } end --- TOSERVER_SIGNNODETEXT +-- TOSERVER_SIGNNODETEXT (obsolete) -do - local f_pos_x = ProtoField.int16("minetest.client.signnodetext_pos_x", "Block position X", base.DEC) - local f_pos_y = ProtoField.int16("minetest.client.signnodetext_pos_y", "Block position Y", base.DEC) - local f_pos_z = ProtoField.int16("minetest.client.signnodetext_pos_z", "Block position Z", base.DEC) - local f_textlen = ProtoField.uint16("minetest.client.signnodetext_textlen", "Text length", base.DEC) - local f_text = ProtoField.string("minetest.client.signnodetext_text", "Text") - - minetest_client_commands[0x33] = { - "SIGNNODETEXT", 10, - { f_pos_x, f_pos_y, f_pos_z, f_textlen, f_text }, - function(buffer, pinfo, tree, t) - t:add(f_pos_x, buffer(2,2)) - t:add(f_pos_y, buffer(4,2)) - t:add(f_pos_z, buffer(6,2)) - t:add(f_textlen, buffer(8,2)) - local textlen = buffer(8,2):uint() - if minetest_check_length(buffer, 10 + textlen, t) then - t:add(f_text, buffer(10, textlen)) - end - end - } -end +minetest_client_commands[0x33] = { "SIGNNODETEXT", 2 } +minetest_client_obsolete[0x33] = true --- TOSERVER_CLICK_ACTIVEOBJECT -do - local vs_button = { - [0] = "left", - [1] = "right" - } +-- TOSERVER_CLICK_ACTIVEOBJECT (obsolete) - local f_button = ProtoField.uint8("minetest.client.click_activeobject_button", "Button", base.DEC, vs_button) - local f_id = ProtoField.uint16("minetest.client.click_activeobject_id", "ID", base.DEC) - local f_item = ProtoField.uint16("minetest.client.click_activeobject_item", "Item", base.DEC) - - minetest_client_commands[0x34] = { - "CLICK_ACTIVEOBJECT", 7, - { f_button, f_id, f_item }, - function(buffer, pinfo, tree, t) - t:add(f_button, buffer(2,1)) - t:add(f_id, buffer(3,2)) - t:add(f_item, buffer(5,2)) - end - } -end +minetest_client_commands[0x34] = { "CLICK_ACTIVEOBJECT", 2 } +minetest_client_obsolete[0x34] = true -- TOSERVER_DAMAGE @@ -398,21 +330,10 @@ } end --- TOSERVER_PASSWORD - -do - local f_old_password = ProtoField.string("minetest.client.password_old", "Old password") - local f_new_password = ProtoField.string("minetest.client.password_new", "New password") +-- TOSERVER_PASSWORD (obsolete) - minetest_client_commands[0x36] = { - "PASSWORD", 58, - { f_old_password, f_new_password }, - function(buffer, pinfo, tree, t) - t:add(f_old_password, buffer(2,28)) - t:add(f_new_password, buffer(30,28)) - end - } -end +minetest_client_commands[0x36] = { "CLICK_ACTIVEOBJECT", 2 } +minetest_client_obsolete[0x36] = true -- TOSERVER_PLAYERITEM @@ -429,16 +350,135 @@ end -- TOSERVER_RESPAWN + minetest_client_commands[0x38] = { "RESPAWN", 2 } -minetest_client_commands[0x39] = { "INTERACT", 2 } +-- TOSERVER_INTERACT + +do + local abbr = "minetest.client.interact_" + local vs_action = { + [0] = "Start digging", + [1] = "Stop digging", + [2] = "Digging completed", + [3] = "Place block or item", + [4] = "Use item", + [5] = "Activate held item", + } + local vs_pointed_type = { + [0] = "Nothing", + [1] = "Node", + [2] = "Object", + } + + local f_action = ProtoField.uint8(abbr.."action", "Action", base.DEC, vs_action) + local f_item = ProtoField.uint16(abbr.."item", "Item Index", base.DEC) + local f_plen = ProtoField.uint32(abbr.."plen", "Length of pointed thing", base.DEC) + local f_pointed_version = ProtoField.uint8(abbr.."pointed_version", + "Pointed Thing Version", base.DEC) + local f_pointed_type = ProtoField.uint8(abbr.."pointed_version", + "Pointed Thing Type", base.DEC, vs_pointed_type) + local f_pointed_under_x = ProtoField.int16(abbr.."pointed_under_x", + "Node position (under surface) X") + local f_pointed_under_y = ProtoField.int16(abbr.."pointed_under_y", + "Node position (under surface) Y") + local f_pointed_under_z = ProtoField.int16(abbr.."pointed_under_z", + "Node position (under surface) Z") + local f_pointed_above_x = ProtoField.int16(abbr.."pointed_above_x", + "Node position (above surface) X") + local f_pointed_above_y = ProtoField.int16(abbr.."pointed_above_y", + "Node position (above surface) Y") + local f_pointed_above_z = ProtoField.int16(abbr.."pointed_above_z", + "Node position (above surface) Z") + local f_pointed_object_id = ProtoField.int16(abbr.."pointed_object_id", + "Object ID") + -- mising: additional playerpos data just like in TOSERVER_PLAYERPOS + + minetest_client_commands[0x39] = { + "INTERACT", 11, + { f_action, + f_item, + f_plen, + f_pointed_version, + f_pointed_type, + f_pointed_under_x, + f_pointed_under_y, + f_pointed_under_z, + f_pointed_above_x, + f_pointed_above_y, + f_pointed_above_z, + f_pointed_object_id }, + function(buffer, pinfo, tree, t) + t:add(f_action, buffer(2,1)) + t:add(f_item, buffer(3,2)) + t:add(f_plen, buffer(5,4)) + local plen = buffer(5,4):uint() + if minetest_check_length(buffer, 9 + plen, t) then + t:add(f_pointed_version, buffer(9,1)) + t:add(f_pointed_type, buffer(10,1)) + local ptype = buffer(10,1):uint() + if ptype == 1 then -- Node + t:add(f_pointed_under_x, buffer(11,2)) + t:add(f_pointed_under_y, buffer(13,2)) + t:add(f_pointed_under_z, buffer(15,2)) + t:add(f_pointed_above_x, buffer(17,2)) + t:add(f_pointed_above_x, buffer(19,2)) + t:add(f_pointed_above_x, buffer(21,2)) + elseif ptype == 2 then -- Object + t:add(f_pointed_object_id, buffer(11,2)) + end + end + end + } +end + +-- ... + minetest_client_commands[0x3a] = { "REMOVED_SOUNDS", 2 } minetest_client_commands[0x3b] = { "NODEMETA_FIELDS", 2 } minetest_client_commands[0x3c] = { "INVENTORY_FIELDS", 2 } minetest_client_commands[0x40] = { "REQUEST_MEDIA", 2 } minetest_client_commands[0x41] = { "RECEIVED_MEDIA", 2 } + +-- TOSERVER_BREATH (obsolete) + minetest_client_commands[0x42] = { "BREATH", 2 } -minetest_client_commands[0x43] = { "CLIENT_READY", 2 } +minetest_client_obsolete[0x42] = true + +-- TOSERVER_CLIENT_READY + +do + local abbr = "minetest.client.client_ready_" + local f_major = ProtoField.uint8(abbr.."major","Version Major") + local f_minor = ProtoField.uint8(abbr.."minor","Version Minor") + local f_patch = ProtoField.uint8(abbr.."patch","Version Patch") + local f_reserved = ProtoField.uint8(abbr.."reserved","Reserved") + local f_versionlen, f_version = + minetest_field_helper("uint16", abbr.."version", "Full Version String") + local f_formspec_ver = ProtoField.uint16(abbr.."formspec_version", + "Formspec API version") + + minetest_client_commands[0x43] = { + "CLIENT_READY", + 8, + { f_major, f_minor, f_patch, f_reserved, f_versionlen, + f_version, f_formspec_ver }, + function(buffer, pinfo, tree, t) + t:add(f_major, buffer(2,1)) + t:add(f_minor, buffer(3,1)) + t:add(f_patch, buffer(4,1)) + t:add(f_reserved, buffer(5,1)) + local off = minetest_decode_helper_ascii(buffer, t, "uint16", 6, + f_versionlen, f_version) + if off and minetest_check_length(buffer, off + 2, t) then + t:add(f_formspec_ver, buffer(off,2)) + end + end + } +end + +-- ... + minetest_client_commands[0x50] = { "FIRST_SRP", 2 } minetest_client_commands[0x51] = { "SRP_BYTES_A", 2 } minetest_client_commands[0x52] = { "SRP_BYTES_M", 2 } @@ -446,41 +486,85 @@ -------------------------------------------- --- Part 2 -- +-- Part 3 -- -- Server command dissectors (TOCLIENT_*) -- -------------------------------------------- minetest_server_commands = {} minetest_server_obsolete = {} --- TOCLIENT_INIT +-- TOCLIENT_HELLO -minetest_server_commands[0x02] = {"HELLO", 2} -minetest_server_commands[0x03] = {"AUTH_ACCEPT", 2} -minetest_server_commands[0x04] = {"ACCEPT_SUDO_MODE", 2} -minetest_server_commands[0x05] = {"DENY_SUDO_MODE", 2} -minetest_server_commands[0x0A] = {"ACCESS_DENIED", 2} +do + local abbr = "minetest.server.hello_" + + local f_ser_fmt = ProtoField.uint8(abbr.."ser_version", + "Deployed serialization format version", base.DEC) + local f_comp_mode = ProtoField.uint16(abbr.."compression", + "Deployed compression mode", base.DEC, { [0] = "No compression" }) + local f_proto = ProtoField.uint16(abbr.."proto", + "Deployed protocol version", base.DEC) + local f_auth_methods = ProtoField.bytes(abbr.."auth_modes", + "Supported authentication modes") + local f_legacy_namelen, f_legacy_name = minetest_field_helper("uint16", + abbr.."legacy_name", "Legacy player name for hashing") + + minetest_server_commands[0x02] = { + "HELLO", + 13, + { f_ser_fmt, f_comp_mode, f_proto, f_auth_methods, + f_legacy_namelen, f_legacy_name }, + function(buffer, pinfo, tree, t) + t:add(f_ser_fmt, buffer(2,1)) + t:add(f_comp_mode, buffer(3,2)) + t:add(f_proto, buffer(5,2)) + t:add(f_auth_methods, buffer(7,4)) + minetest_decode_helper_ascii(buffer, t, "uint16", 11, f_legacy_namelen, f_legacy_name) + end + } +end + +-- TOCLIENT_AUTH_ACCEPT do - local f_version = ProtoField.uint8("minetest.server.init_version", "Deployed version", base.DEC) - local f_pos_x = ProtoField.int16("minetest.server.init_pos_x", "Position X", base.DEC) - local f_pos_y = ProtoField.int16("minetest.server.init_pos_y", "Position Y", base.DEC) - local f_pos_z = ProtoField.int16("minetest.server.init_pos_x", "Position Z", base.DEC) - local f_map_seed = ProtoField.uint64("minetest.server.init_map_seed", "Map seed", base.DEC) - - minetest_server_commands[0x10] = { - "INIT", 17, - { f_version, f_pos_x, f_pos_y, f_pos_z, f_map_seed }, + local abbr = "minetest.server.auth_accept_" + + local f_player_x = ProtoField.float(abbr.."player_x", "Player position X") + local f_player_y = ProtoField.float(abbr.."player_y", "Player position Y") + local f_player_z = ProtoField.float(abbr.."player_z", "Player position Z") + local f_map_seed = ProtoField.uint64(abbr.."map_seed", "Map seed") + local f_send_interval = ProtoField.float(abbr.."send_interval", + "Recommended send interval") + local f_sudo_auth_methods = ProtoField.bytes(abbr.."sudo_auth_methods", + "Supported auth methods for sudo mode") + + minetest_server_commands[0x03] = { + "AUTH_ACCEPT", + 30, + { f_player_x, f_player_y, f_player_z, f_map_seed, + f_send_interval, f_sudo_auth_methods }, function(buffer, pinfo, tree, t) - t:add(f_version, buffer(2,1)) - t:add(f_pos_x, buffer(3,2)) - t:add(f_pos_y, buffer(5,2)) - t:add(f_pos_z, buffer(7,2)) - t:add(f_map_seed, buffer(9,8)) + t:add(f_player_x, buffer(2,4)) + t:add(f_player_y, buffer(6,4)) + t:add(f_player_z, buffer(10,4)) + t:add(f_map_seed, buffer(14,8)) + t:add(f_send_interval, buffer(22,4)) + t:add(f_sudo_auth_methods, buffer(26,4)) end } end +-- ... + +minetest_server_commands[0x04] = {"ACCEPT_SUDO_MODE", 2} +minetest_server_commands[0x05] = {"DENY_SUDO_MODE", 2} +minetest_server_commands[0x0A] = {"ACCESS_DENIED", 2} + +-- TOCLIENT_INIT (obsolete) + +minetest_server_commands[0x10] = { "INIT", 2 } +minetest_server_obsolete[0x10] = true + -- TOCLIENT_BLOCKDATA do @@ -544,37 +628,10 @@ minetest_server_commands[0x23] = { "PLAYERPOS", 2 } minetest_server_obsolete[0x23] = true --- TOCLIENT_PLAYERINFO - -do - local f_count = ProtoField.uint16("minetest.server.playerinfo_count", "Count", base.DEC) - local f_player = ProtoField.bytes("minetest.server.playerinfo_player", "Player", base.NONE) - local f_peer_id = ProtoField.uint16("minetest.server.playerinfo_peer_id", "Peer ID", base.DEC) - local f_name = ProtoField.string("minetest.server.playerinfo_name", "Name") +-- TOCLIENT_PLAYERINFO (obsolete) - minetest_server_commands[0x24] = { - "PLAYERINFO", 2, - { f_count, f_player, f_peer_id, f_name }, - function(buffer, pinfo, tree, t) - local count = 0 - local pos, index - for pos = 2, buffer:len() - 22, 22 do -- does lua have integer division? - count = count + 1 - end - t:add(f_count, count):set_generated() - t:set_len(2 + 22 * count) - pinfo.cols.info:append(" * " .. count) - for index = 0, count - 1 do - local pos = 2 + 22 * index - local t2 = t:add(f_player, buffer(pos, 22)) - t2:set_text("Player, ID: " .. buffer(pos, 2):uint() - .. ", Name: " .. buffer(pos + 2, 20):string()) - t2:add(f_peer_id, buffer(pos, 2)) - t2:add(f_name, buffer(pos + 2, 20)) - end - end - } -end +minetest_server_commands[0x24] = { "PLAYERINFO", 2 } +minetest_server_obsolete[0x24] = true -- TOCLIENT_OPT_BLOCK_NOT_FOUND (obsolete) @@ -600,100 +657,74 @@ } end --- TOCLIENT_OBJECTDATA - -do - local f_player_count = ProtoField.uint16("minetest.server.objectdata_player_count", - "Count of player positions", base.DEC) - local f_player = ProtoField.bytes("minetest.server.objectdata_player", "Player position") - local f_peer_id = ProtoField.uint16("minetest.server.objectdata_player_peer_id", "Peer ID") - local f_x = ProtoField.int32("minetest.server.objectdata_player_x", "Position X", base.DEC) - local f_y = ProtoField.int32("minetest.server.objectdata_player_y", "Position Y", base.DEC) - local f_z = ProtoField.int32("minetest.server.objectdata_player_z", "Position Z", base.DEC) - local f_speed_x = ProtoField.int32("minetest.server.objectdata_player_speed_x", "Speed X", base.DEC) - local f_speed_y = ProtoField.int32("minetest.server.objectdata_player_speed_y", "Speed Y", base.DEC) - local f_speed_z = ProtoField.int32("minetest.server.objectdata_player_speed_z", "Speed Z", base.DEC) - local f_pitch = ProtoField.int32("minetest.server.objectdata_player_pitch", "Pitch", base.DEC) - local f_yaw = ProtoField.int32("minetest.server.objectdata_player_yaw", "Yaw", base.DEC) - local f_block_count = ProtoField.uint16("minetest.server.objectdata_block_count", - "Count of blocks", base.DEC) - - minetest_server_commands[0x28] = { - "OBJECTDATA", 6, - { f_player_count, f_player, f_peer_id, f_x, f_y, f_z, - f_speed_x, f_speed_y, f_speed_z,f_pitch, f_yaw, - f_block_count }, - function(buffer, pinfo, tree, t) - local t2, index, pos - - local player_count_pos = 2 - local player_count = buffer(player_count_pos, 2):uint() - t:add(f_player_count, buffer(player_count_pos, 2)) - - local block_count_pos = player_count_pos + 2 + 34 * player_count - if not minetest_check_length(buffer, block_count_pos + 2, t) then - return - end - - for index = 0, player_count - 1 do - pos = player_count_pos + 2 + 34 * index - t2 = t:add(f_player, buffer(pos, 34)) - t2:set_text("Player position, ID: " .. buffer(pos, 2):uint()) - t2:add(f_peer_id, buffer(pos, 2)) - t2:add(f_x, buffer(pos + 2, 4)) - t2:add(f_y, buffer(pos + 6, 4)) - t2:add(f_z, buffer(pos + 10, 4)) - t2:add(f_speed_x, buffer(pos + 14, 4)) - t2:add(f_speed_y, buffer(pos + 18, 4)) - t2:add(f_speed_z, buffer(pos + 22, 4)) - t2:add(f_pitch, buffer(pos + 26, 4)) - t2:add(f_yaw, buffer(pos + 30, 4)) - end - - local block_count = buffer(block_count_pos, 2):uint() - t:add(f_block_count, buffer(block_count_pos, 2)) +-- TOCLIENT_OBJECTDATA (obsolete) - -- TODO: dissect blocks. - -- NOTE: block_count > 0 is obsolete. (?) - - pinfo.cols.info:append(" * " .. (player_count + block_count)) - end - } -end +minetest_server_commands[0x28] = { "OBJECTDATA", 2 } +minetest_server_obsolete[0x28] = true -- TOCLIENT_TIME_OF_DAY do local f_time = ProtoField.uint16("minetest.server.time_of_day", "Time", base.DEC) + local f_time_speed = ProtoField.float("minetest.server.time_speed", "Time Speed", base.DEC) minetest_server_commands[0x29] = { "TIME_OF_DAY", 4, - { f_time }, + { f_time, f_time_speed }, function(buffer, pinfo, tree, t) t:add(f_time, buffer(2,2)) + t:add(f_time_speed, buffer(4,4)) end } end +-- TOCLIENT_CSM_RESTRICTION_FLAGS + +minetest_server_commands[0x2a] = { "CSM_RESTRICTION_FLAGS", 2 } + +-- TOCLIENT_PLAYER_SPEED + +minetest_server_commands[0x2b] = { "PLAYER_SPEED", 2 } + -- TOCLIENT_CHAT_MESSAGE do - local f_length = ProtoField.uint16("minetest.server.chat_message_length", "Length", base.DEC) - local f_message = ProtoField.string("minetest.server.chat_message", "Message") + local abbr = "minetest.server.chat_message_" + local vs_type = { + [0] = "Raw", + [1] = "Normal", + [2] = "Announce", + [3] = "System", + } - minetest_server_commands[0x30] = { - "CHAT_MESSAGE", 4, - { f_length, f_message }, + local f_version = ProtoField.uint8(abbr.."version", "Version") + local f_type = ProtoField.uint8(abbr.."type", "Message Type", base.DEC, vs_type) + local f_senderlen, f_sender = minetest_field_helper("uint16", abbr.."sender", + "Message sender") + local f_messagelen, f_message = minetest_field_helper("uint16", abbr:sub(1,-2), + "Message") + + minetest_server_commands[0x2f] = { + "CHAT_MESSAGE", 8, + { f_version, f_type, f_senderlen, f_sender, + f_messagelen, f_message }, function(buffer, pinfo, tree, t) - t:add(f_length, buffer(2,2)) - local textlen = buffer(2,2):uint() - if minetest_check_length(buffer, 4 + textlen*2, t) then - t:add(f_message, minetest_convert_utf16(buffer(4, textlen*2), "Converted chat message")) + t:add(f_version, buffer(2,1)) + t:add(f_type, buffer(3,1)) + local off = 4 + off = minetest_decode_helper_utf16(buffer, t, "uint16", off, f_senderlen, f_sender) + if off then + off = minetest_decode_helper_utf16(buffer, t, "uint16", off, f_messagelen, f_message) end end } end +-- TOCLIENT_CHAT_MESSAGE_OLD (obsolete) + +minetest_server_commands[0x30] = { "CHAT_MESSAGE_OLD", 2 } +minetest_server_obsolete[0x30] = true + -- TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD do @@ -842,13 +873,13 @@ -- TOCLIENT_HP do - local f_hp = ProtoField.uint8("minetest.server.hp", "Hitpoints", base.DEC) + local f_hp = ProtoField.uint16("minetest.server.hp", "Hitpoints", base.DEC) minetest_server_commands[0x33] = { - "HP", 3, + "HP", 4, { f_hp }, function(buffer, pinfo, tree, t) - t:add(f_hp, buffer(2,1)) + t:add(f_hp, buffer(2,2)) end } end @@ -856,45 +887,35 @@ -- TOCLIENT_MOVE_PLAYER do - local f_x = ProtoField.int32("minetest.server.move_player_x", "Position X", base.DEC) - local f_y = ProtoField.int32("minetest.server.move_player_y", "Position Y", base.DEC) - local f_z = ProtoField.int32("minetest.server.move_player_z", "Position Z", base.DEC) - local f_pitch = ProtoField.int32("minetest.server.move_player_pitch", "Pitch", base.DEC) - local f_yaw = ProtoField.int32("minetest.server.move_player_yaw", "Yaw", base.DEC) - local f_garbage = ProtoField.bytes("minetest.server.move_player_garbage", "Garbage") + local abbr = "minetest.server.move_player_" + + local f_x = ProtoField.float(abbr.."x", "Position X") + local f_y = ProtoField.float(abbr.."y", "Position Y") + local f_z = ProtoField.float(abbr.."z", "Position Z") + local f_pitch = ProtoField.float(abbr.."_pitch", "Pitch") + local f_yaw = ProtoField.float(abbr.."yaw", "Yaw") minetest_server_commands[0x34] = { - "MOVE_PLAYER", 18, -- actually 22, but see below + "MOVE_PLAYER", 22, { f_x, f_y, f_z, f_pitch, f_yaw, f_garbage }, function(buffer, pinfo, tree, t) t:add(f_x, buffer(2, 4)) t:add(f_y, buffer(6, 4)) t:add(f_z, buffer(10, 4)) - - -- Compatibility note: - -- Up to 2011-08-23, there was a bug in Minetest that - -- caused the server to serialize the pitch and yaw - -- with 2 bytes each instead of 4, creating a - -- malformed message. - if buffer:len() >= 22 then - t:add(f_pitch, buffer(14, 4)) - t:add(f_yaw, buffer(18, 4)) - else - t:add(f_garbage, buffer(14, 4)) - t:add_expert_info(PI_MALFORMED, PI_WARN, "Malformed pitch and yaw, possibly caused by a serialization bug in Minetest") - end + t:add(f_pitch, buffer(14, 4)) + t:add(f_yaw, buffer(18, 4)) end } end --- TOCLIENT_ACCESS_DENIED +-- TOCLIENT_ACCESS_DENIED_LEGACY do local f_reason_length = ProtoField.uint16("minetest.server.access_denied_reason_length", "Reason length", base.DEC) local f_reason = ProtoField.string("minetest.server.access_denied_reason", "Reason") minetest_server_commands[0x35] = { - "ACCESS_DENIED", 4, + "ACCESS_DENIED_LEGACY", 4, { f_reason_length, f_reason }, function(buffer, pinfo, tree, t) t:add(f_reason_length, buffer(2,2)) @@ -906,68 +927,16 @@ } end --- TOCLIENT_PLAYERITEM +-- TOCLIENT_FOV -do - local f_count = ProtoField.uint16( - "minetest.server.playeritem_count", - "Count of players", base.DEC) - local f_player = ProtoField.bytes( - "minetest.server.playeritem_player", - "Player") - local f_peer_id = ProtoField.uint16( - "minetest.server.playeritem_peer_id", - "Peer ID", base.DEC) - local f_item_length = ProtoField.uint16( - "minetest.server.playeritem_item_length", - "Item information length", base.DEC) - local f_item = ProtoField.string( - "minetest.server.playeritem_item", - "Item information") - - minetest_server_commands[0x36] = { - "PLAYERITEM", 4, - { f_count, f_player, f_peer_id, f_item_length, f_item }, - function(buffer, pinfo, tree, t) - local count, index, pos, item_length - - count = buffer(2,2):uint() - pinfo.cols.info:append(" * " .. count) - t:add(f_count, buffer(2,2)) - - pos = 4 - for index = 0, count - 1 do - if not minetest_check_length(buffer, pos + 4, t) then - return - end - item_length = buffer(pos + 2, 2):uint() - if not minetest_check_length(buffer, pos + 4 + item_length, t) then - return - end - - local t2 = t:add(f_player, buffer(pos, 4 + item_length)) - t2:set_text("Player, ID: " .. buffer(pos, 2):uint()) - t2:add(f_peer_id, buffer(pos, 2)) - t2:add(f_item_length, buffer(pos + 2, 2)) - t2:add(f_item, buffer(pos + 4, item_length)) - - pos = pos + 4 + item_length - end - end - } -end +minetest_server_commands[0x36] = { "FOV", 2 } -- TOCLIENT_DEATHSCREEN do - local vs_set_camera_point_target = { - [0] = "False", - [1] = "True" - } - - local f_set_camera_point_target = ProtoField.uint8( + local f_set_camera_point_target = ProtoField.bool( "minetest.server.deathscreen_set_camera_point_target", - "Set camera point target", base.DEC, vs_set_camera_point_target) + "Set camera point target") local f_camera_point_target_x = ProtoField.int32( "minetest.server.deathscreen_camera_point_target_x", "Camera point target X", base.DEC) @@ -991,10 +960,26 @@ } end +-- TOCLIENT_MEDIA + minetest_server_commands[0x38] = {"MEDIA", 2} + +-- TOCLIENT_TOOLDEF (obsolete) + minetest_server_commands[0x39] = {"TOOLDEF", 2} +minetest_server_obsolete[0x39] = true + +-- TOCLIENT_NODEDEF + minetest_server_commands[0x3a] = {"NODEDEF", 2} + +-- TOCLIENT_CRAFTITEMDEF (obsolete) + minetest_server_commands[0x3b] = {"CRAFTITEMDEF", 2} +minetest_server_obsolete[0x3b] = true + +-- ... + minetest_server_commands[0x3c] = {"ANNOUNCE_MEDIA", 2} minetest_server_commands[0x3d] = {"ITEMDEF", 2} minetest_server_commands[0x3f] = {"PLAY_SOUND", 2} @@ -1006,7 +991,14 @@ minetest_server_commands[0x45] = {"MOVEMENT", 2} minetest_server_commands[0x46] = {"SPAWN_PARTICLE", 2} minetest_server_commands[0x47] = {"ADD_PARTICLE_SPAWNER", 2} + +-- TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY (obsolete) + minetest_server_commands[0x48] = {"DELETE_PARTICLESPAWNER_LEGACY", 2} +minetest_server_obsolete[0x48] = true + +-- ... + minetest_server_commands[0x49] = {"HUDADD", 2} minetest_server_commands[0x4a] = {"HUDRM", 2} minetest_server_commands[0x4b] = {"HUDCHANGE", 2} @@ -1020,11 +1012,57 @@ minetest_server_commands[0x53] = {"DELETE_PARTICLESPAWNER", 2} minetest_server_commands[0x54] = {"CLOUD_PARAMS", 2} minetest_server_commands[0x55] = {"FADE_SOUND", 2} -minetest_server_commands[0x61] = {"SRP_BYTES_S_B", 2} + +-- TOCLIENT_UPDATE_PLAYER_LIST + +do + local abbr = "minetest.server.update_player_list_" + local vs_type = { + [0] = "Init", + [1] = "Add", + [2] = "Remove", + } + + local f_type = ProtoField.uint8(abbr.."type", "Type", base.DEC, vs_type) + local f_count = ProtoField.uint16(abbr.."count", "Number of players", base.DEC) + local f_name = ProtoField.string(abbr.."name", "Name") + + minetest_server_commands[0x56] = { + "UPDATE_PLAYER_LIST", + 5, + { f_type, f_count, f_name }, + function(buffer, pinfo, tree, t) + t:add(f_type, buffer(2,1)) + t:add(f_count, buffer(3,2)) + local count = buffer(3,2):uint() + local off = 5 + for i = 1, count do + if not minetest_check_length(buffer, off + 2, t) then + return + end + off = minetest_decode_helper_ascii(buffer, t, "uint16", off, nil, f_name) + if not off then + return + end + end + end + } +end + +-- ... + +minetest_server_commands[0x57] = {"MODCHANNEL_MSG", 2} +minetest_server_commands[0x58] = {"MODCHANNEL_SIGNAL", 2} +minetest_server_commands[0x59] = {"NODEMETA_CHANGED", 2} +minetest_server_commands[0x5a] = {"SET_SUN", 2} +minetest_server_commands[0x5b] = {"SET_MOON", 2} +minetest_server_commands[0x5c] = {"SET_STARS", 2} +minetest_server_commands[0x60] = {"SRP_BYTES_S_B", 2} +minetest_server_commands[0x61] = {"FORMSPEC_PREPEND", 2} ------------------------------------ --- Part 3 -- +-- Part 4 -- -- Wrapper protocol subdissectors -- ------------------------------------ @@ -1093,15 +1131,15 @@ this_peer = "Client" other_peer = "Server" empty_message_info = "Empty message / Connect" - commands = minetest_client_commands -- defined in Part 1 - obsolete = minetest_client_obsolete -- defined in Part 1 + commands = minetest_client_commands -- defined in Part 2 + obsolete = minetest_client_obsolete -- defined in Part 2 else proto_name = "minetest.server" this_peer = "Server" other_peer = "Client" empty_message_info = "Empty message" - commands = minetest_server_commands -- defined in Part 2 - obsolete = minetest_server_obsolete -- defined in Part 2 + commands = minetest_server_commands -- defined in Part 3 + obsolete = minetest_server_obsolete -- defined in Part 3 end -- Create the protocol object. @@ -1124,8 +1162,8 @@ for code, command_info in pairs(commands) do local command_fields = command_info[3] if command_fields ~= nil then - local index, field for index, field in ipairs(command_fields) do + assert(field ~= nil) table.insert(proto.fields, field) end end @@ -1199,7 +1237,7 @@ ------------------------------------- --- Part 4 -- +-- Part 5 -- -- Wrapper protocol main dissector -- ------------------------------------- @@ -1311,10 +1349,10 @@ ------------------------ --- Part 5 -- --- Utility functions -- ------------------------ +------------------------------ +-- Part 6 -- +-- Utility functions part 2 -- +------------------------------ -- Checks if a (sub-)Tvb is long enough to be further dissected. -- If it is long enough, sets the dissector tree item length to min_len @@ -1329,14 +1367,11 @@ t:set_len(min_len) return true - -- Tvb:reported_length_remaining() has been added in August 2011 - -- and is not yet widely available, disable for the time being - -- TODO: uncomment at a later date - -- TODO: when uncommenting this, also re-check if other parts of + -- TODO: check if other parts of -- the dissector could benefit from reported_length_remaining - --elseif tvb:reported_length_remaining() >= min_len then - -- t:add_expert_info(PI_UNDECODED, PI_INFO, "Only part of this packet was captured, unable to decode.") - -- return false + elseif tvb:reported_length_remaining() >= min_len then + t:add_expert_info(PI_UNDECODED, PI_INFO, "Only part of this packet was captured, unable to decode.") + return false else t:add_expert_info(PI_MALFORMED, PI_ERROR, "Message is too short") @@ -1358,7 +1393,7 @@ hex = "" for pos = 0, tvb:len() - 2, 2 do char = tvb(pos, 2):uint() - if (char >= 0x20) and (char <= 0x7e) then + if (char >= 0x20 and char <= 0x7e) or char == 0x0a then hex = hex .. string.format(" %02x", char) else hex = hex .. " 3F" @@ -1373,3 +1408,37 @@ end end +-- Decodes a variable-length string as ASCII text +-- t_textlen, t_text should be the ProtoFields created by minetest_field_helper +-- alternatively t_text can be a ProtoField.string and t_textlen can be nil +-- lentype must be the type of the length field (as passed to minetest_field_helper) +-- returns nil if length check failed +function minetest_decode_helper_ascii(tvb, t, lentype, offset, f_textlen, f_text) + local n = ({uint16 = 2, uint32 = 4})[lentype] + assert(n) + + if f_textlen then + t:add(f_textlen, tvb(offset, n)) + end + local textlen = tvb(offset, n):uint() + if minetest_check_length(tvb, offset + n + textlen, t) then + t:add(f_text, tvb(offset + n, textlen)) + return offset + n + textlen + end +end + +-- Decodes a variable-length string as UTF-16 text +-- (see minetest_decode_helper_ascii) +function minetest_decode_helper_utf16(tvb, t, lentype, offset, f_textlen, f_text) + local n = ({uint16 = 2, uint32 = 4})[lentype] + assert(n) + + if f_textlen then + t:add(f_textlen, tvb(offset, n)) + end + local textlen = tvb(offset, n):uint() * 2 + if minetest_check_length(tvb, offset + n + textlen, t) then + t:add(f_text, minetest_convert_utf16(tvb(offset + n, textlen), "UTF-16 text")) + return offset + n + textlen + end +end